|
@@ -322,17 +322,34 @@ int _starpu_task_data_get_node_on_node(struct starpu_task *task, unsigned index,
|
|
|
node = local_node;
|
|
|
break;
|
|
|
case STARPU_SPECIFIC_NODE_LOCAL_OR_CPU:
|
|
|
- if (task->handles[index]->per_node[local_node].state != STARPU_INVALID)
|
|
|
{
|
|
|
-
|
|
|
- node = local_node;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
-
|
|
|
- node = STARPU_MAIN_RAM;
|
|
|
+ enum starpu_data_access_mode mode = STARPU_TASK_GET_MODE(task, index);
|
|
|
+ if (mode & STARPU_R)
|
|
|
+ {
|
|
|
+ if (mode & STARPU_R && task->handles[index]->per_node[local_node].state != STARPU_INVALID)
|
|
|
+ {
|
|
|
+
|
|
|
+ node = local_node;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+
|
|
|
+ node = STARPU_MAIN_RAM;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+
|
|
|
+ starpu_data_handle_t handle = STARPU_TASK_GET_HANDLE(task, index);
|
|
|
+ if (handle->wt_mask & (1 << STARPU_MAIN_RAM))
|
|
|
+
|
|
|
+ node = STARPU_MAIN_RAM;
|
|
|
+ else
|
|
|
+
|
|
|
+ node = local_node;
|
|
|
+ }
|
|
|
+ break;
|
|
|
}
|
|
|
- break;
|
|
|
}
|
|
|
return node;
|
|
|
}
|
|
@@ -359,17 +376,34 @@ int _starpu_task_data_get_node_on_worker(struct starpu_task *task, unsigned inde
|
|
|
node = local_node;
|
|
|
break;
|
|
|
case STARPU_SPECIFIC_NODE_LOCAL_OR_CPU:
|
|
|
- if (task->handles[index]->per_node[local_node].state != STARPU_INVALID)
|
|
|
{
|
|
|
-
|
|
|
- node = local_node;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
-
|
|
|
- node = STARPU_MAIN_RAM;
|
|
|
+ enum starpu_data_access_mode mode = STARPU_TASK_GET_MODE(task, index);
|
|
|
+ if (mode & STARPU_R)
|
|
|
+ {
|
|
|
+ if (task->handles[index]->per_node[local_node].state != STARPU_INVALID)
|
|
|
+ {
|
|
|
+
|
|
|
+ node = local_node;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+
|
|
|
+ node = STARPU_MAIN_RAM;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+
|
|
|
+ starpu_data_handle_t handle = STARPU_TASK_GET_HANDLE(task, index);
|
|
|
+ if (handle->wt_mask & (1 << STARPU_MAIN_RAM))
|
|
|
+
|
|
|
+ node = STARPU_MAIN_RAM;
|
|
|
+ else
|
|
|
+
|
|
|
+ node = local_node;
|
|
|
+ }
|
|
|
+ break;
|
|
|
}
|
|
|
- break;
|
|
|
}
|
|
|
return node;
|
|
|
}
|