Browse Source

Add index field in _starpu_data_descr to save having to copy over all data fields

Samuel Thibault 7 years ago
parent
commit
68d4fe6d62
2 changed files with 7 additions and 2 deletions
  1. 2 0
      src/core/dependencies/data_concurrency.c
  2. 5 2
      src/core/jobs.h

+ 2 - 0
src/core/dependencies/data_concurrency.c

@@ -346,6 +346,8 @@ void _starpu_job_set_ordered_buffers(struct _starpu_job *j)
 
 	for (i=0 ; i<nbuffers; i++)
 	{
+		_STARPU_JOB_SET_ORDERED_BUFFER_INDEX(j, i, i);
+
 		starpu_data_handle_t handle = STARPU_TASK_GET_HANDLE(task, i);
 		_STARPU_JOB_SET_ORDERED_BUFFER_HANDLE(j, handle, i);
 

+ 5 - 2
src/core/jobs.h

@@ -62,6 +62,7 @@ struct _starpu_data_descr
 	starpu_data_handle_t handle;
 	enum starpu_data_access_mode mode;
 	int node;
+	int index;
 	unsigned sequential_consistency;
 };
 
@@ -267,15 +268,17 @@ struct starpu_task *_starpu_pop_local_task(struct _starpu_worker *worker);
  * enforce a FIFO ordering. */
 int _starpu_push_local_task(struct _starpu_worker *worker, struct starpu_task *task, int prio);
 
+#define _STARPU_JOB_GET_ORDERED_BUFFER_INDEX(job, i) ((job->dyn_ordered_buffers) ? job->dyn_ordered_buffers[i].index : job->ordered_buffers[i].index)
 #define _STARPU_JOB_GET_ORDERED_BUFFER_HANDLE(job, i) ((job->dyn_ordered_buffers) ? job->dyn_ordered_buffers[i].handle : job->ordered_buffers[i].handle)
 #define _STARPU_JOB_GET_ORDERED_BUFFER_MODE(job, i) ((job->dyn_ordered_buffers) ? job->dyn_ordered_buffers[i].mode : job->ordered_buffers[i].mode)
 #define _STARPU_JOB_GET_ORDERED_BUFFER_NODE(job, i) ((job->dyn_ordered_buffers) ? job->dyn_ordered_buffers[i].node : job->ordered_buffers[i].node)
 #define _STARPU_JOB_GET_ORDERED_BUFFER_SEQUENTIAL_CONSISTENCY(job, i) ((job->dyn_ordered_buffers) ? job->dyn_ordered_buffers[i].sequential_consistency : job->ordered_buffers[i].sequential_consistency)
 
-#define _STARPU_JOB_SET_ORDERED_BUFFER_HANDLE(job, handle, i) do { if (job->dyn_ordered_buffers) job->dyn_ordered_buffers[i].handle = (handle); else job->ordered_buffers[i].handle = (handle);} while(0)
+#define _STARPU_JOB_SET_ORDERED_BUFFER_INDEX(job, __index, i) do { if (job->dyn_ordered_buffers) job->dyn_ordered_buffers[i].index = (__index); else job->ordered_buffers[i].index = (__index);} while(0)
+#define _STARPU_JOB_SET_ORDERED_BUFFER_HANDLE(job, __handle, i) do { if (job->dyn_ordered_buffers) job->dyn_ordered_buffers[i].handle = (__handle); else job->ordered_buffers[i].handle = (__handle);} while(0)
 #define _STARPU_JOB_SET_ORDERED_BUFFER_MODE(job, __mode, i) do { if (job->dyn_ordered_buffers) job->dyn_ordered_buffers[i].mode = __mode; else job->ordered_buffers[i].mode = __mode;} while(0)
 #define _STARPU_JOB_SET_ORDERED_BUFFER_NODE(job, __node, i) do { if (job->dyn_ordered_buffers) job->dyn_ordered_buffers[i].node = __node; else job->ordered_buffers[i].node = __node;} while(0)
-#define _STARPU_JOB_SET_ORDERED_BUFFER_SEQUENTIAL_CONSISTENCY(job, sequential_consistency, i) do { if (job->dyn_ordered_buffers) job->dyn_ordered_buffers[i].sequential_consistency = (sequential_consistency); else job->ordered_buffers[i].sequential_consistency = (sequential_consistency);} while(0)
+#define _STARPU_JOB_SET_ORDERED_BUFFER_SEQUENTIAL_CONSISTENCY(job, __sequential_consistency, i) do { if (job->dyn_ordered_buffers) job->dyn_ordered_buffers[i].sequential_consistency = (__sequential_consistency); else job->ordered_buffers[i].sequential_consistency = (__sequential_consistency);} while(0)
 
 #define _STARPU_JOB_SET_ORDERED_BUFFER(job, buffer, i) do { if (job->dyn_ordered_buffers) job->dyn_ordered_buffers[i] = buffer; else job->ordered_buffers[i] = buffer;} while(0)
 #define _STARPU_JOB_GET_ORDERED_BUFFERS(job) (job->dyn_ordered_buffers) ? job->dyn_ordered_buffers : job->ordered_buffers