|
@@ -150,7 +150,7 @@ void _starpu_update_data_state(starpu_data_handle_t handle,
|
|
|
|
|
|
/* the data is present now */
|
|
|
unsigned requesting_node = requesting_replicate->memory_node;
|
|
|
- requesting_replicate->requested[requesting_node] = 0;
|
|
|
+ requesting_replicate->requested &= ~(1UL << requesting_node);
|
|
|
|
|
|
if (mode & STARPU_W)
|
|
|
{
|
|
@@ -655,18 +655,25 @@ void _starpu_release_data_on_node(starpu_data_handle_t handle, uint32_t default_
|
|
|
_starpu_spin_unlock(&handle->header_lock);
|
|
|
}
|
|
|
|
|
|
-static void _starpu_set_data_requested_flag_if_needed(struct _starpu_data_replicate *replicate)
|
|
|
+static void _starpu_set_data_requested_flag_if_needed(starpu_data_handle_t handle, struct _starpu_data_replicate *replicate)
|
|
|
{
|
|
|
-// XXX : this is just a hint, so we don't take the lock ...
|
|
|
-// _starpu_spin_lock(&handle->header_lock);
|
|
|
+ unsigned local_node = _starpu_memory_node_get_local_key();
|
|
|
+ int cpt = 0;
|
|
|
+ while (cpt < STARPU_SPIN_MAXTRY && _starpu_spin_trylock(&handle->header_lock))
|
|
|
+ {
|
|
|
+ cpt++;
|
|
|
+ _starpu_datawizard_progress(local_node, 1);
|
|
|
+ }
|
|
|
+ if (cpt == STARPU_SPIN_MAXTRY)
|
|
|
+ _starpu_spin_lock(&handle->header_lock);
|
|
|
|
|
|
if (replicate->state == STARPU_INVALID)
|
|
|
{
|
|
|
unsigned dst_node = replicate->memory_node;
|
|
|
- replicate->requested[dst_node] = 1;
|
|
|
+ replicate->requested |= 1UL << dst_node;
|
|
|
}
|
|
|
|
|
|
-// _starpu_spin_unlock(&handle->header_lock);
|
|
|
+ _starpu_spin_unlock(&handle->header_lock);
|
|
|
}
|
|
|
|
|
|
int starpu_prefetch_task_input_on_node(struct starpu_task *task, unsigned node)
|
|
@@ -685,7 +692,7 @@ int starpu_prefetch_task_input_on_node(struct starpu_task *task, unsigned node)
|
|
|
struct _starpu_data_replicate *replicate = &handle->per_node[node];
|
|
|
prefetch_data_on_node(handle, replicate, mode);
|
|
|
|
|
|
- _starpu_set_data_requested_flag_if_needed(replicate);
|
|
|
+ _starpu_set_data_requested_flag_if_needed(handle, replicate);
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
@@ -876,7 +883,7 @@ unsigned _starpu_is_data_present_or_requested(starpu_data_handle_t handle, unsig
|
|
|
|
|
|
for (i = 0; i < nnodes; i++)
|
|
|
{
|
|
|
- if (handle->per_node[node].requested[i] || handle->per_node[node].request[i])
|
|
|
+ if ((handle->per_node[node].requested & (1UL << i)) || handle->per_node[node].request[i])
|
|
|
ret = 1;
|
|
|
}
|
|
|
|