瀏覽代碼

add SCHED_CTX attribute to insert_task

Andra Hugo 12 年之前
父節點
當前提交
72cd994a31
共有 2 個文件被更改,包括 16 次插入5 次删除
  1. 3 2
      include/starpu_task_util.h
  2. 13 3
      src/util/starpu_insert_task_utils.c

+ 3 - 2
include/starpu_task_util.h

@@ -43,9 +43,10 @@ void starpu_create_sync_task(starpu_tag_t sync_tag, unsigned ndeps, starpu_tag_t
 #define STARPU_EXECUTE_ON_NODE	(1<<9)	/* Used by MPI to define which task is going to execute the codelet */
 #define STARPU_EXECUTE_ON_DATA	(1<<10)	/* Used by MPI to define which task is going to execute the codelet */
 #define STARPU_DATA_ARRAY       (1<<11) /* Array of data handles */
-#define STARPU_TAG       (1<<12) /* Tag */
+#define STARPU_TAG              (1<<12) /* Tag */
 #define STARPU_HYPERVISOR_TAG	(1<<13)	/* Used to tag a task after whose execution we'll execute  a code */
-#define STARPU_FLOPS	(1<<14)	/* Used to specify the number of flops needed to be executed by a task */
+#define STARPU_FLOPS	        (1<<14)	/* Used to specify the number of flops needed to be executed by a task */
+#define STARPU_SCHED_CTX	(1<<15)	/* Used to specify the sched_ctx to which the task will be submitted */
 
 /* Wrapper to create a task. */
 int starpu_insert_task(struct starpu_codelet *cl, ...);

+ 13 - 3
src/util/starpu_insert_task_utils.c

@@ -97,6 +97,10 @@ size_t _starpu_insert_task_get_arg_size(va_list varg_list)
 		{
 			(void)va_arg(varg_list, starpu_data_handle_t);
 		}
+		else if (arg_type==STARPU_SCHED_CTX)
+		{
+			(void)va_arg(varg_list, unsigned);
+		}
 		else if (arg_type==STARPU_HYPERVISOR_TAG)
 		{
 			(void)va_arg(varg_list, int);
@@ -180,6 +184,10 @@ int _starpu_codelet_pack_args(size_t arg_buffer_size, char **arg_buffer, va_list
 		{
 			(void)va_arg(varg_list, starpu_data_handle_t);
 		}
+		else if (arg_type==STARPU_SCHED_CTX)
+		{
+			(void)va_arg(varg_list, unsigned);
+		}
 		else if (arg_type==STARPU_HYPERVISOR_TAG)
 		{
 			(void)va_arg(varg_list, int);
@@ -300,7 +308,11 @@ int _starpu_insert_task_create_and_submit(char *arg_buffer, size_t arg_buffer_si
 		{
 			(void)va_arg(varg_list, starpu_data_handle_t);
 		}
-
+		else if (arg_type==STARPU_SCHED_CTX)
+		{
+			unsigned sched_ctx = va_arg(varg_list, unsigned);
+			(*task)->sched_ctx = sched_ctx;
+		}
 		else if (arg_type==STARPU_HYPERVISOR_TAG)
 		{
 			int hypervisor_tag = va_arg(varg_list, int);
@@ -311,8 +323,6 @@ int _starpu_insert_task_create_and_submit(char *arg_buffer, size_t arg_buffer_si
 			double flops = va_arg(varg_list, double);
 			(*task)->flops = flops;
 		}
-
-
 		else if (arg_type==STARPU_TAG)
 		{
 			starpu_tag_t tag = va_arg(varg_list, starpu_tag_t);