浏览代码

use newly introduced functions starpu_perfmodel_set_per_arch_cost_function and starpu_perfmodel_get_per_arch functions

Nathalie Furmento 11 年之前
父节点
当前提交
817bb27398
共有 2 个文件被更改,包括 16 次插入77 次删除
  1. 10 37
      examples/cholesky/cholesky_models.c
  2. 6 40
      examples/heat/lu_kernels_model.c

+ 10 - 37
examples/cholesky/cholesky_models.c

@@ -128,52 +128,25 @@ double cuda_chol_task_22_cost(struct starpu_task *task, struct starpu_perfmodel_
 }
 
 void initialize_chol_model(struct starpu_perfmodel* model, char * symbol,
-		double (*cpu_cost_function)(struct starpu_task *, struct starpu_perfmodel_arch*, unsigned),
-		double (*cuda_cost_function)(struct starpu_task *, struct starpu_perfmodel_arch*, unsigned))
+			   double (*cpu_cost_function)(struct starpu_task *, struct starpu_perfmodel_arch*, unsigned),
+			   double (*cuda_cost_function)(struct starpu_task *, struct starpu_perfmodel_arch*, unsigned))
 {
+	struct starpu_perfmodel_per_arch *per_arch;
+
 	model->symbol = symbol;
 	model->type = STARPU_HISTORY_BASED;
 
 	starpu_perfmodel_init(NULL, model);
 
-	struct starpu_perfmodel_arch arch_cpu;
-	arch_cpu.ndevices = 1;
-        arch_cpu.devices = (struct starpu_perfmodel_device*)malloc(sizeof(struct starpu_perfmodel_device));
-        arch_cpu.devices[0].type = STARPU_CPU_WORKER;
-        arch_cpu.devices[0].devid = 0;
-        arch_cpu.devices[0].ncores = 1;
-
-        int comb_cpu = starpu_perfmodel_arch_comb_get(arch_cpu.ndevices, arch_cpu.devices);
-        if(comb_cpu == -1)
-                comb_cpu = starpu_perfmodel_arch_comb_add(arch_cpu.ndevices, arch_cpu.devices);
-
-
-        model->per_arch[comb_cpu] = (struct starpu_perfmodel_per_arch*)malloc(sizeof(struct starpu_perfmodel_per_arch));
-	memset(&model->per_arch[comb_cpu][0], 0, sizeof(struct starpu_perfmodel_per_arch));
-//        model->nimpls[comb_cpu] = 1;
-        model->per_arch[comb_cpu][0].cost_function = cpu_cost_function;
+	per_arch = starpu_perfmodel_get_per_arch(model, 0, STARPU_CPU_WORKER, 0, 1, -1);
+        per_arch->cost_function = cpu_cost_function;
+	// We could also call directly:
+	// starpu_perfmodel_set_per_arch_cost_function(model, 0, cpu_cost_function, STARPU_CPU_WORKER, 0, 1, -1);
 
 	if(starpu_worker_get_count_by_type(STARPU_CUDA_WORKER) != 0)
 	{
-		struct starpu_perfmodel_arch arch_cuda;
-		arch_cuda.ndevices = 1;
-		arch_cuda.devices = (struct starpu_perfmodel_device*)malloc(sizeof(struct starpu_perfmodel_device));
-		arch_cuda.devices[0].type = STARPU_CUDA_WORKER;
-		arch_cuda.devices[0].devid = 0;
-		arch_cuda.devices[0].ncores = 1;
-
-		int comb_cuda = starpu_perfmodel_arch_comb_get(arch_cuda.ndevices, arch_cuda.devices);
-		if(comb_cuda == -1)
-			comb_cuda = starpu_perfmodel_arch_comb_add(arch_cuda.ndevices, arch_cuda.devices);
-
-		model->per_arch[comb_cuda] = (struct starpu_perfmodel_per_arch*)malloc(sizeof(struct starpu_perfmodel_per_arch));
-		memset(&model->per_arch[comb_cuda][0], 0, sizeof(struct starpu_perfmodel_per_arch));
-//		model->nimpls[comb_cuda] = 1;
-		model->per_arch[comb_cuda][0].cost_function = cuda_cost_function;
+	     	per_arch = starpu_perfmodel_get_per_arch(model, 0, STARPU_CUDA_WORKER, 0, 1, -1);
+		per_arch->cost_function = cuda_cost_function;
 
 	}
-
-/* 	model->per_arch[STARPU_CPU_WORKER][0][0][0].cost_function = cpu_cost_function; */
-/* 	if(starpu_worker_get_count_by_type(STARPU_CUDA_WORKER) != 0) */
-/* 		model->per_arch[STARPU_CUDA_WORKER][0][0][0].cost_function = cuda_cost_function; */
 }

+ 6 - 40
examples/heat/lu_kernels_model.c

@@ -215,53 +215,19 @@ double task_22_cost_cpu(struct starpu_task *task, struct starpu_perfmodel_arch*
 }
 
 void initialize_lu_kernels_model(struct starpu_perfmodel* model, char * symbol,
-		double (*cost_function)(struct starpu_task *, unsigned),
-		double (*cpu_cost_function)(struct starpu_task *, struct starpu_perfmodel_arch*, unsigned),
-		double (*cuda_cost_function)(struct starpu_task *, struct starpu_perfmodel_arch*, unsigned))
+				 double (*cost_function)(struct starpu_task *, unsigned),
+				 double (*cpu_cost_function)(struct starpu_task *, struct starpu_perfmodel_arch*, unsigned),
+				 double (*cuda_cost_function)(struct starpu_task *, struct starpu_perfmodel_arch*, unsigned))
 {
 	model->symbol = symbol;
 	model->type = STARPU_HISTORY_BASED;
-	starpu_perfmodel_init(NULL, model);
-
-	struct starpu_perfmodel_arch arch_cpu;
-	arch_cpu.ndevices = 1;
-	arch_cpu.devices = (struct starpu_perfmodel_device*)malloc(sizeof(struct starpu_perfmodel_device));
-	arch_cpu.devices[0].type = STARPU_CPU_WORKER;
-	arch_cpu.devices[0].devid = 0;
-	arch_cpu.devices[0].ncores = 1;
-
-	int comb_cpu = starpu_perfmodel_arch_comb_get(arch_cpu.ndevices, arch_cpu.devices);
-	if(comb_cpu == -1)
-		comb_cpu = starpu_perfmodel_arch_comb_add(arch_cpu.ndevices, arch_cpu.devices);
 
+	starpu_perfmodel_init(NULL, model);
 
-	model->per_arch[comb_cpu] = (struct starpu_perfmodel_per_arch*)malloc(sizeof(struct starpu_perfmodel_per_arch));
-	memset(&model->per_arch[comb_cpu][0], 0, sizeof(struct starpu_perfmodel_per_arch));
-//	model->nimpls[comb_cpu] = 1;
-	model->per_arch[comb_cpu][0].cost_function = cpu_cost_function;
+	starpu_perfmodel_set_per_arch_cost_function(model, 0, cpu_cost_function, STARPU_CPU_WORKER, 0, 1, -1);
 
 	if(starpu_worker_get_count_by_type(STARPU_CUDA_WORKER) != 0)
 	{
-		struct starpu_perfmodel_arch arch_cuda;
-		arch_cuda.ndevices = 1;
-		arch_cuda.devices = (struct starpu_perfmodel_device*)malloc(sizeof(struct starpu_perfmodel_device));
-		arch_cuda.devices[0].type = STARPU_CUDA_WORKER;
-		arch_cuda.devices[0].devid = 0;
-		arch_cuda.devices[0].ncores = 1;
-
-		int comb_cuda = starpu_perfmodel_arch_comb_get(arch_cuda.ndevices, arch_cuda.devices);
-		if(comb_cuda == -1)
-			comb_cuda = starpu_perfmodel_arch_comb_add(arch_cuda.ndevices, arch_cuda.devices);
-
-		model->per_arch[comb_cuda] = (struct starpu_perfmodel_per_arch*)malloc(sizeof(struct starpu_perfmodel_per_arch));
-		memset(&model->per_arch[comb_cuda][0], 0, sizeof(struct starpu_perfmodel_per_arch));
-//		model->nimpls[comb_cuda] = 1;
-		model->per_arch[comb_cuda][0].cost_function = cuda_cost_function;
-
+		starpu_perfmodel_set_per_arch_cost_function(model, 0, cuda_cost_function, STARPU_CUDA_WORKER, 0, 1, -1);
 	}
-
-/* 	model->cost_function = cost_function; */
-/* 	model->per_arch[STARPU_CPU_WORKER][0][0][0].cost_function = cpu_cost_function; */
-/* 	if(starpu_worker_get_count_by_type(STARPU_CUDA_WORKER) != 0) */
-/* 		model->per_arch[STARPU_CUDA_WORKER][0][0][0].cost_function = cuda_cost_function; */
 }