Просмотр исходного кода

Fix spuriously setting task->dyn_modes when using STARPU_DATA_ARRAY. Also avoid reallocating for each data

Samuel Thibault лет назад: 10
Родитель
Сommit
73932532c6
1 измененных файлов с 9 добавлено и 5 удалено
  1. 9 5
      src/util/starpu_task_insert_utils.c

+ 9 - 5
src/util/starpu_task_insert_utils.c

@@ -193,17 +193,21 @@ void _starpu_task_insert_check_nb_buffers(struct starpu_codelet *cl, struct star
 			{
 				(*task)->dyn_handles[i] = (*task)->handles[i];
 			}
-			(*task)->dyn_modes = malloc(*allocated_buffers * sizeof(enum starpu_data_access_mode));
-			for(i=0 ; i<nbuffers ; i++)
+			if ((*task)->cl->nbuffers == STARPU_VARIABLE_NBUFFERS)
 			{
-				(*task)->dyn_modes[i] = ((*task)->cl->nbuffers == STARPU_VARIABLE_NBUFFERS) ? (*task)->modes[i] : STARPU_CODELET_GET_MODE((*task)->cl, i);
+				(*task)->dyn_modes = malloc(*allocated_buffers * sizeof(enum starpu_data_access_mode));
+				for(i=0 ; i<nbuffers ; i++)
+				{
+					(*task)->dyn_modes[i] = (*task)->modes[i];
+				}
 			}
 		}
-		else
+		else if (nbuffers >= *allocated_buffers)
 		{
 			*allocated_buffers *= 2;
 			(*task)->dyn_handles = realloc((*task)->dyn_handles, *allocated_buffers * sizeof(starpu_data_handle_t));
-			(*task)->dyn_modes = realloc((*task)->dyn_modes, *allocated_buffers * sizeof(enum starpu_data_access_mode));
+			if (nbuffers == STARPU_VARIABLE_NBUFFERS)
+				(*task)->dyn_modes = realloc((*task)->dyn_modes, *allocated_buffers * sizeof(enum starpu_data_access_mode));
 		}
 	}
 }