瀏覽代碼

When creating per-worker replicates, we don't create more replicates than there are workers

Cédric Augonnet 14 年之前
父節點
當前提交
5afb322c21
共有 3 個文件被更改,包括 17 次插入7 次删除
  1. 6 2
      src/datawizard/filters.c
  2. 4 2
      src/datawizard/interfaces/data_interface.c
  3. 7 3
      src/datawizard/reduction.c

+ 6 - 2
src/datawizard/filters.c

@@ -116,6 +116,8 @@ void starpu_data_partition(starpu_data_handle initial_handle, struct starpu_data
 	/* allocate the children */
 	starpu_data_create_children(initial_handle, nparts, f);
 
+	unsigned nworkers = starpu_worker_get_count();
+
 	for (i = 0; i < nparts; i++)
 	{
 		starpu_data_handle child =
@@ -169,7 +171,7 @@ void starpu_data_partition(starpu_data_handle initial_handle, struct starpu_data
 		}
 
 		unsigned worker;
-		for (worker = 0; worker < STARPU_NMAXWORKERS; worker++)
+		for (worker = 0; worker < nworkers; worker++)
 		{
 			struct starpu_data_replicate_s *child_replicate;
 			child_replicate = &child->per_worker[worker];
@@ -296,6 +298,8 @@ static void starpu_data_create_children(starpu_data_handle handle, unsigned nchi
 	unsigned worker;
 	unsigned child;
 
+	unsigned nworkers = starpu_worker_get_count();
+
 	for (child = 0; child < nchildren; child++)
 	{
 		starpu_data_handle handle_child = &handle->children[child];
@@ -320,7 +324,7 @@ static void starpu_data_create_children(starpu_data_handle handle, unsigned nchi
 			STARPU_ASSERT(handle_child->per_node[node].interface);
 		}
 
-		for (worker = 0; worker < STARPU_NMAXWORKERS; worker++)
+		for (worker = 0; worker < nworkers; worker++)
 		{
 			handle_child->per_worker[worker].handle = handle_child;
 			handle_child->per_worker[worker].interface = calloc(1, interfacesize);

+ 4 - 2
src/datawizard/interfaces/data_interface.c

@@ -101,7 +101,8 @@ static void _starpu_register_new_data(starpu_data_handle handle,
 	}
 
 	unsigned worker;
-	for (worker = 0; worker < STARPU_NMAXWORKERS; worker++)
+	unsigned nworkers = starpu_worker_get_count();
+	for (worker = 0; worker < nworkers; worker++)
 	{
 		struct starpu_data_replicate_s *replicate;
 		replicate = &handle->per_worker[worker];
@@ -149,7 +150,8 @@ static starpu_data_handle _starpu_data_handle_allocate(struct starpu_data_interf
 	}
 
 	unsigned worker;
-	for (worker = 0; worker < STARPU_NMAXWORKERS; worker++)
+	unsigned nworkers = starpu_worker_get_count();
+	for (worker = 0; worker < nworkers; worker++)
 	{
 		struct starpu_data_replicate_s *replicate;
 		replicate = &handle->per_worker[worker];

+ 7 - 3
src/datawizard/reduction.c

@@ -82,7 +82,8 @@ void starpu_data_start_reduction_mode(starpu_data_handle handle)
 
 	unsigned worker;
 
-	for (worker = 0; worker < STARPU_NMAXWORKERS; worker++)
+	unsigned nworkers = starpu_worker_get_count();
+	for (worker = 0; worker < nworkers; worker++)
 	{
 		struct starpu_data_replicate_s *replicate;
 		replicate = &handle->per_worker[worker];
@@ -102,7 +103,8 @@ void starpu_data_end_reduction_mode(starpu_data_handle handle)
 	starpu_data_handle replicate_array[STARPU_NMAXWORKERS];
 
 	/* Register all valid per-worker replicates */
-	for (worker = 0; worker < STARPU_NMAXWORKERS; worker++)
+	unsigned nworkers = starpu_worker_get_count();
+	for (worker = 0; worker < nworkers; worker++)
 	{
 		if (handle->per_worker[worker].initialized)
 		{
@@ -248,9 +250,11 @@ void starpu_data_end_reduction_mode(starpu_data_handle handle)
 
 void starpu_data_end_reduction_mode_terminate(starpu_data_handle handle)
 {
+	unsigned nworkers = starpu_worker_get_count();
+
 //	fprintf(stderr, "starpu_data_end_reduction_mode_terminate\n");
 	unsigned worker;
-	for (worker = 0; worker < STARPU_NMAXWORKERS; worker++)
+	for (worker = 0; worker < nworkers; worker++)
 	{
 		struct starpu_data_replicate_s *replicate;
 		replicate = &handle->per_worker[worker];