Browse Source

also show temporal locality in locality test

Samuel Thibault 9 years ago
parent
commit
38c48a2420
1 changed files with 28 additions and 4 deletions
  1. 28 4
      tests/datawizard/locality.c

+ 28 - 4
tests/datawizard/locality.c

@@ -34,12 +34,15 @@
 #define ITER 50
 
 int task_worker[N][ITER];
+int worker_task[STARPU_NMAXWORKERS][N*ITER];
+unsigned worker_ntask[STARPU_NMAXWORKERS];
 
 void cpu_f(void *descr[] STARPU_ATTRIBUTE_UNUSED, void *_args)
 {
-	unsigned i, loop;
+	unsigned i, loop, worker = starpu_worker_get_id();
 	starpu_codelet_unpack_args(_args, &loop, &i);
-	task_worker[i][loop] = starpu_worker_get_id();
+	task_worker[i][loop] = worker;
+	worker_task[worker][worker_ntask[worker]++] = i;
 	starpu_sleep(0.001);
 }
 
@@ -47,9 +50,10 @@ static struct starpu_codelet cl =
 {
 	.cpu_funcs = { cpu_f },
 	.cpu_funcs_name = { "cpu_f" },
-	.nbuffers = 3,
+	.nbuffers = 4,
 	.modes =
 	{
+		STARPU_RW,
 		STARPU_RW | STARPU_COMMUTE | STARPU_LOCALITY,
 		STARPU_RW | STARPU_COMMUTE | STARPU_LOCALITY,
 		STARPU_RW | STARPU_COMMUTE | STARPU_LOCALITY,
@@ -60,7 +64,8 @@ int main(int argc, char *argv[])
 {
 	int ret;
 	starpu_data_handle_t A[N];
-	unsigned i, loop;
+	starpu_data_handle_t B[N];
+	unsigned i, loop, finished;
 
 	ret = starpu_initialize(NULL, &argc, &argv);
 	if (ret == -ENODEV) return STARPU_TEST_SKIPPED;
@@ -71,6 +76,7 @@ int main(int argc, char *argv[])
 	for (i = 0; i < N; i++)
 	{
 		starpu_void_data_register(&A[i]);
+		starpu_void_data_register(&B[i]);
 		starpu_data_assign_arbiter(A[i], arbiter);
 	}
 
@@ -79,6 +85,7 @@ int main(int argc, char *argv[])
 		for (i = 1; i < N-1; i++)
 		{
 			starpu_task_insert(&cl,
+					STARPU_RW, B[i],
 					STARPU_RW | STARPU_COMMUTE | STARPU_LOCALITY, A[i-1],
 					STARPU_RW | STARPU_COMMUTE | STARPU_LOCALITY, A[i],
 					STARPU_RW | STARPU_COMMUTE | STARPU_LOCALITY, A[i+1],
@@ -99,6 +106,23 @@ int main(int argc, char *argv[])
 		printf("\n");
 	}
 
+	loop = 0;
+	do {
+		finished = 1;
+		for (i = 0; i < starpu_worker_get_count(); i++)
+		{
+			if (loop < worker_ntask[i])
+			{
+				printf("%02d ", worker_task[i][loop]);
+				finished = 0;
+			}
+			else
+				printf("   ");
+		}
+		loop++;
+		printf("\n");
+	} while (!finished && loop < 100);
+
 	starpu_shutdown();
 	return EXIT_SUCCESS;
 }