瀏覽代碼

Support dyn_modes in tasks_size_overhead

Samuel Thibault 9 年之前
父節點
當前提交
543b9d7f97
共有 1 個文件被更改,包括 15 次插入14 次删除
  1. 15 14
      tests/microbenchs/tasks_size_overhead.c

+ 15 - 14
tests/microbenchs/tasks_size_overhead.c

@@ -37,9 +37,6 @@
 #define FACTOR 2
 #endif
 
-starpu_data_handle_t data_handles[8];
-float *buffers[8];
-
 #ifdef STARPU_QUICK_CHECK
 static unsigned ntasks = 10;
 #else
@@ -81,14 +78,6 @@ static void parse_args(int argc, char **argv)
 			break;
 		case 'b':
 			nbuffers = atoi(optarg);
-			if (nbuffers > STARPU_NMAXBUFS)
-			{
-#ifdef STARPU_DEVEL
-#warning FIXME: use dyn_handles
-#endif
-				fprintf(stderr,"%u buffers is not supported, please raise the maximum value (%u) with --enable-maxbuffers\n", nbuffers, STARPU_NMAXBUFS);
-				exit(EXIT_FAILURE);
-			}
 			codelet.nbuffers = nbuffers;
 			break;
 		case 'h':
@@ -127,6 +116,8 @@ int main(int argc, char **argv)
 
 	starpu_shutdown();
 
+	float *buffers[nbuffers];
+
 	/* Allocate data */
 	for (buffer = 0; buffer < nbuffers; buffer++)
 		buffers[buffer] = (float *) malloc(16*sizeof(float));
@@ -152,6 +143,8 @@ int main(int argc, char **argv)
 	FPRINTF(stdout, "\n");
 	fflush(stdout);
 
+	starpu_data_handle_t data_handles[nbuffers];
+
 	/* For each number of cpus, benchmark */
 	for (ncpus= 1; ncpus <= totcpus; ncpus++)
 	{
@@ -178,11 +171,19 @@ int main(int argc, char **argv)
 				tasks[i].cl_arg = (void*) (uintptr_t) size;
 				tasks[i].synchronous = 0;
 
-				/* we have 8 buffers at most */
-				for (buffer = 0; buffer < nbuffers; buffer++)
+				if (nbuffers > STARPU_NMAXBUFS)
 				{
-					tasks[i].handles[buffer] = data_handles[buffer];
+					tasks[i].dyn_handles = malloc(nbuffers * sizeof(*data_handles));
+					memcpy(tasks[i].dyn_handles, data_handles, nbuffers * sizeof(*data_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
+					for (buffer = 0; buffer < nbuffers; buffer++)
+					{
+						tasks[i].handles[buffer] = data_handles[buffer];
+					}
 
 				ret = starpu_task_submit(&tasks[i]);
 				if (ret == -ENODEV) goto enodev;