Explorar el Código

Make tasks_size_overhead able to pick up random data among a pool

Samuel Thibault hace 9 años
padre
commit
2a5228bdc3
Se han modificado 1 ficheros con 21 adiciones y 12 borrados
  1. 21 12
      tests/microbenchs/tasks_size_overhead.c

+ 21 - 12
tests/microbenchs/tasks_size_overhead.c

@@ -43,6 +43,7 @@ static unsigned ntasks = 10;
 static unsigned ntasks = 1000;
 #endif
 static unsigned nbuffers = 0;
+static unsigned total_nbuffers = 0;
 
 struct starpu_task *tasks;
 
@@ -70,7 +71,7 @@ static struct starpu_codelet codelet =
 static void parse_args(int argc, char **argv)
 {
 	int c;
-	while ((c = getopt(argc, argv, "i:b:h")) != -1)
+	while ((c = getopt(argc, argv, "i:b:B:h")) != -1)
 	switch(c)
 	{
 		case 'i':
@@ -80,8 +81,11 @@ static void parse_args(int argc, char **argv)
 			nbuffers = atoi(optarg);
 			codelet.nbuffers = nbuffers;
 			break;
+		case 'B':
+			total_nbuffers = atoi(optarg);
+			break;
 		case 'h':
-			fprintf(stderr, "Usage: %s [-i ntasks] [-b nbuffers] [-h]\n", argv[0]);
+			fprintf(stderr, "Usage: %s [-i ntasks] [-b nbuffers] [-B total_nbuffers] [-h]\n", argv[0]);
 			exit(EXIT_SUCCESS);
 			break;
 	}
@@ -116,16 +120,16 @@ int main(int argc, char **argv)
 
 	starpu_shutdown();
 
-	float *buffers[nbuffers];
+	float *buffers[total_nbuffers];
 
 	/* Allocate data */
-	for (buffer = 0; buffer < nbuffers; buffer++)
+	for (buffer = 0; buffer < total_nbuffers; buffer++)
 		buffers[buffer] = (float *) malloc(16*sizeof(float));
 
 	tasks = (struct starpu_task *) calloc(1, ntasks*sizeof(struct starpu_task));
 
 	/* Emit headers and compute raw tasks speed */
-	FPRINTF(stdout, "# tasks : %u buffers : %u\n", ntasks, nbuffers);
+	FPRINTF(stdout, "# tasks : %u buffers : %u total_nbuffers : %u\n", ntasks, nbuffers, total_nbuffers);
 	FPRINTF(stdout, "# ncpus\t");
 	for (size = START; size <= STOP; size *= FACTOR)
 		FPRINTF(stdout, "%u iters(us)\ttotal(s)\t", size);
@@ -143,7 +147,7 @@ int main(int argc, char **argv)
 	FPRINTF(stdout, "\n");
 	fflush(stdout);
 
-	starpu_data_handle_t data_handles[nbuffers];
+	starpu_data_handle_t data_handles[total_nbuffers];
 
 	/* For each number of cpus, benchmark */
 	for (ncpus= 1; ncpus <= totcpus; ncpus++)
@@ -156,7 +160,7 @@ int main(int argc, char **argv)
 		if (ret == -ENODEV) return STARPU_TEST_SKIPPED;
 		STARPU_CHECK_RETURN_VALUE(ret, "starpu_init");
 
-		for (buffer = 0; buffer < nbuffers; buffer++)
+		for (buffer = 0; buffer < total_nbuffers; buffer++)
 			starpu_vector_data_register(&data_handles[buffer], STARPU_MAIN_RAM, (uintptr_t)buffers[buffer], 16, sizeof(float));
 
 		for (size = START; size <= STOP; size *= FACTOR)
@@ -165,6 +169,7 @@ int main(int argc, char **argv)
 			start = starpu_timing_now();
 			for (i = 0; i < ntasks; i++)
 			{
+				starpu_data_handle_t *handles;
 				starpu_task_init(&tasks[i]);
 				tasks[i].callback_func = NULL;
 				tasks[i].cl = &codelet;
@@ -174,16 +179,20 @@ int main(int argc, char **argv)
 				if (nbuffers > STARPU_NMAXBUFS)
 				{
 					tasks[i].dyn_handles = malloc(nbuffers * sizeof(*data_handles));
-					memcpy(tasks[i].dyn_handles, data_handles, nbuffers * sizeof(*data_handles));
+					handles = tasks[i].dyn_handles;
 					tasks[i].dyn_modes = malloc(nbuffers * sizeof(tasks[i].dyn_modes));
 					for (buffer = 0; buffer < nbuffers; buffer++)
 						tasks[i].dyn_modes[buffer] = STARPU_R;
 				}
 				else
+					handles = tasks[i].handles;
+
+				if (nbuffers >= total_nbuffers)
+					for (buffer = 0; buffer < nbuffers; buffer++)
+						handles[buffer] = data_handles[buffer%total_nbuffers];
+				else
 					for (buffer = 0; buffer < nbuffers; buffer++)
-					{
-						tasks[i].handles[buffer] = data_handles[buffer];
-					}
+						handles[buffer] = data_handles[starpu_lrand48()%total_nbuffers];
 
 				ret = starpu_task_submit(&tasks[i]);
 				if (ret == -ENODEV) goto enodev;
@@ -218,7 +227,7 @@ int main(int argc, char **argv)
 			}
 		}
 
-		for (buffer = 0; buffer < nbuffers; buffer++)
+		for (buffer = 0; buffer < total_nbuffers; buffer++)
 		{
 			starpu_data_unregister(data_handles[buffer]);
 		}