Bladeren bron

mic (perfmodel): Correction compilation fxt

Thibaud Lambert 11 jaren geleden
bovenliggende
commit
9d01d7bdef

+ 1 - 0
include/starpu_perfmodel.h

@@ -132,6 +132,7 @@ struct starpu_perfmodel
 };
 
 void initialize_model(struct starpu_perfmodel *model);
+void initialize_model_with_file(FILE*f, struct starpu_perfmodel *model);
 
 struct starpu_perfmodel_arch* starpu_worker_get_perf_archtype(int workerid);
 

+ 51 - 2
src/core/perfmodel/perfmodel_history.c

@@ -338,7 +338,7 @@ static void parse_device(FILE *f, struct starpu_perfmodel *model, unsigned scan_
 	if(ncore < maxncore)
 		for(i=ncore; i<maxncore; i++)
 		{
-			arch.ncore = ncore;
+			arch.ncore = i;
 			skip_parse_arch(f,&arch);
 		}
 }
@@ -399,6 +399,7 @@ static void parse_model_file(FILE *f, struct starpu_perfmodel *model, unsigned s
 		parse_archtype(f, model, scan_history, archtype);
 }
 
+
 static void dump_per_arch_model_file(FILE *f, struct starpu_perfmodel *model, struct starpu_perfmodel_arch * arch, unsigned nimpl)
 {
 	struct starpu_perfmodel_per_arch *per_arch_model;
@@ -618,6 +619,45 @@ void initialize_model(struct starpu_perfmodel *model)
 			conf->topology.nsccdevices,NULL); 
 }
 
+void initialize_model_with_file(FILE*f, struct starpu_perfmodel *model)
+{
+	unsigned ret, archtype, devid, i, ndevice, * maxncore;
+	struct starpu_perfmodel_arch arch;
+
+	for(archtype=0; archtype<STARPU_NARCH; archtype++)
+	{
+		arch.type = archtype;
+
+		_starpu_drop_comments(f);
+		ret = fscanf(f, "%u\n", &ndevice);
+		STARPU_ASSERT_MSG(ret == 1, "Incorrect performance model file");
+
+		if(ndevice != 0)
+			maxncore = malloc(sizeof((*maxncore)*ndevice));
+		else 
+			maxncore = NULL;
+
+		for(devid=0; devid < ndevice; devid++)
+		{
+			arch.devid = devid;
+
+			_starpu_drop_comments(f);
+			ret = fscanf(f, "%u\n", &maxncore[devid]);
+			STARPU_ASSERT_MSG(ret == 1, "Incorrect performance model file");
+
+			for(i=0; i<maxncore[devid]; i++)
+			{
+				arch.ncore = i;
+		
+				skip_parse_arch(f,&arch);
+			}
+		}
+
+		model->per_arch[archtype] = initialize_arch_model(ndevice,maxncore); 
+		if(maxncore != NULL)
+			free(maxncore);
+	}
+}
 static void get_model_debug_path(struct starpu_perfmodel *model, const char *arch, char *path, size_t maxlen)
 {
 	STARPU_ASSERT(path);
@@ -1023,7 +1063,6 @@ int starpu_perfmodel_list(FILE *output)
 int starpu_perfmodel_load_symbol(const char *symbol, struct starpu_perfmodel *model)
 {
 	model->symbol = strdup(symbol);
-	initialize_model(model);
 
 	/* where is the file if it exists ? */
 	char path[256];
@@ -1054,6 +1093,16 @@ int starpu_perfmodel_load_symbol(const char *symbol, struct starpu_perfmodel *mo
 	FILE *f = fopen(path, "r");
 	STARPU_ASSERT(f);
 
+	if(_starpu_is_initialized())
+	{
+		initialize_model(model);
+	}
+	else
+	{
+		initialize_model_with_file(f, model);	
+		rewind(f);
+	}
+
 	parse_model_file(f, model, 1);
 
 	STARPU_ASSERT(fclose(f) == 0);

+ 1 - 1
src/debug/traces/starpu_fxt.c

@@ -617,7 +617,7 @@ static void handle_end_codelet_body(struct fxt_ev_64 *ev, struct starpu_fxt_opti
 
 		snprintf(dumped_codelets[dumped_codelets_count - 1].symbol, 256, "%s", last_codelet_symbol[worker]);
 		dumped_codelets[dumped_codelets_count - 1].workerid = worker;
-		dumped_codelets[dumped_codelets_count - 1].arch = arch;
+		dumped_codelets[dumped_codelets_count - 1].arch = *arch;
 
 		dumped_codelets[dumped_codelets_count - 1].size = codelet_size;
 		dumped_codelets[dumped_codelets_count - 1].hash = codelet_hash;

+ 17 - 9
tests/sched_policies/simple_cpu_gpu_sched.c

@@ -101,24 +101,32 @@ init_perfmodels(void)
 {
 	unsigned devid, ncore;
 
-	for(devid=0; model_cpu_task.per_arch[STARPU_CPU_WORKER][devid] != NULL; devid++)
+	initialize_model(&model_cpu_task);
+	initialize_model(&model_gpu_task);
+	
+	if(model_cpu_task.per_arch[STARPU_CPU_WORKER] != NULL)
 	{
-		for(ncore=0; model_cpu_task.per_arch[STARPU_CPU_WORKER][devid][ncore] != NULL; ncore++)
+		for(devid=0; model_cpu_task.per_arch[STARPU_CPU_WORKER][devid] != NULL; devid++)
 		{
-			model_cpu_task.per_arch[STARPU_CPU_WORKER][devid][ncore][0].cost_function = cpu_task_cpu;
-			model_gpu_task.per_arch[STARPU_CPU_WORKER][devid][ncore][0].cost_function = gpu_task_cpu;
+			for(ncore=0; model_cpu_task.per_arch[STARPU_CPU_WORKER][devid][ncore] != NULL; ncore++)
+			{
+				model_cpu_task.per_arch[STARPU_CPU_WORKER][devid][ncore][0].cost_function = cpu_task_cpu;
+				model_gpu_task.per_arch[STARPU_CPU_WORKER][devid][ncore][0].cost_function = gpu_task_cpu;
+			}
 		}
 	}
 
-	for(devid=0; model_cpu_task.per_arch[STARPU_CUDA_WORKER][devid] != NULL; devid++)
+	if(model_cpu_task.per_arch[STARPU_CUDA_WORKER] != NULL)
 	{
-		for(ncore=0; model_cpu_task.per_arch[STARPU_CUDA_WORKER][devid][ncore] != NULL; ncore++)
+		for(devid=0; model_cpu_task.per_arch[STARPU_CUDA_WORKER][devid] != NULL; devid++)
 		{
-			model_cpu_task.per_arch[STARPU_CUDA_WORKER][devid][ncore][0].cost_function = cpu_task_cpu;
-			model_gpu_task.per_arch[STARPU_CUDA_WORKER][devid][ncore][0].cost_function = gpu_task_cpu;
+			for(ncore=0; model_cpu_task.per_arch[STARPU_CUDA_WORKER][devid][ncore] != NULL; ncore++)
+			{
+				model_cpu_task.per_arch[STARPU_CUDA_WORKER][devid][ncore][0].cost_function = cpu_task_cpu;
+				model_gpu_task.per_arch[STARPU_CUDA_WORKER][devid][ncore][0].cost_function = gpu_task_cpu;
+			}
 		}
 	}
-
 }
 
 /*

+ 0 - 4
tools/starpu_perfmodel_display.c

@@ -138,10 +138,6 @@ int main(int argc, char **argv)
 #endif
 	int ret;
 
-	ret = starpu_init(NULL);
-	if (ret == -ENODEV) return 1;
-	STARPU_CHECK_RETURN_VALUE(ret, "starpu_init");
-
 	parse_args(argc, argv);
 
         if (plist)

+ 31 - 18
tools/starpu_perfmodel_plot.c

@@ -434,7 +434,7 @@ static int ** init_archtype_is_found_per_arch(int maxdevid, unsigned* maxncore_t
 			maxncore = 1;
 		
 		archtype_is_found_per_arch[devid] = malloc(sizeof(*archtype_is_found_per_arch[devid])*(maxncore+1));
-		archtype_is_found_per_arch[devid][maxncore] = NULL;
+		archtype_is_found_per_arch[devid][maxncore] = 0;
 		for(ncore=0; ncore<maxncore; ncore++)
 			archtype_is_found_per_arch[devid][ncore] = 0;
 	}
@@ -443,21 +443,40 @@ static int ** init_archtype_is_found_per_arch(int maxdevid, unsigned* maxncore_t
 }
 
 
-static void init_achrtype_is_found()
+static void init_archtype_is_found(struct starpu_perfmodel *model)
 {
-	struct _starpu_machine_config *conf = _starpu_get_machine_config();
+	unsigned archtype, devid, ndevice, ncore, *maxncore;
 
-	archtype_is_found[STARPU_CPU_WORKER] = init_archtype_is_found_per_arch(1,&conf->topology.ncpus);
-	archtype_is_found[STARPU_CUDA_WORKER] = init_archtype_is_found_per_arch(conf->topology.ncudagpus,NULL); 
-	archtype_is_found[STARPU_OPENCL_WORKER] = init_archtype_is_found_per_arch(conf->topology.nopenclgpus,NULL); 
-	archtype_is_found[STARPU_MIC_WORKER] = init_archtype_is_found_per_arch(conf->topology.nmicdevices,conf->topology.nmiccores); 
-	archtype_is_found[STARPU_SCC_WORKER] = init_archtype_is_found_per_arch(conf->topology.nsccdevices,NULL); 
+	for(archtype = 0; archtype < STARPU_NARCH; archtype++)
+	{
+	
+		for(devid=0; model->per_arch[archtype][devid] != NULL; devid++);
+		ndevice = devid;
+		if(ndevice != 0)
+		{
+			maxncore = malloc(sizeof(*maxncore)*ndevice);
+			for(devid=0; devid < ndevice; devid++);
+			{
+			
+				for(ncore=0; model->per_arch[archtype][devid][ncore] != NULL; ncore++);
+				maxncore[devid] = ncore;
+			}
+		}
+		else
+		{
+			maxncore = NULL;
+		}
+
+		archtype_is_found[archtype] = init_archtype_is_found_per_arch(ndevice,maxncore);
+		if(maxncore != NULL)
+			free(maxncore);
+	}
 }
 
 
-static void dump_data_file(FILE *data_file)
+static void dump_data_file(FILE *data_file, struct starpu_perfmodel *model)
 {
-	memset(archtype_is_found, 0, STARPU_NARCH_VARIATIONS*sizeof(int));
+	init_archtype_is_found(model);
 
 	int i;
 	for (i = 0; i < options.dumped_codelets_count; i++)
@@ -465,7 +484,7 @@ static void dump_data_file(FILE *data_file)
 		/* Dump only if the symbol matches user's request */
 		if (strncmp(dumped_codelets[i].symbol, symbol, (FXT_MAX_PARAMS - 4)*sizeof(unsigned long)-1) == 0)
 		{
-			struct starpu_perfmodel_arch* arch = dumped_codelets[i].arch;
+			struct starpu_perfmodel_arch* arch = &dumped_codelets[i].arch;
 			archtype_is_found[arch->type][arch->devid][arch->ncore] = 1;
 
 			size_t size = dumped_codelets[i].size;
@@ -617,10 +636,6 @@ int main(int argc, char **argv)
 	int ret;
 	struct starpu_perfmodel model;
 
-	ret = starpu_init(NULL);
-	if (ret == -ENODEV) return 1;
-	STARPU_CHECK_RETURN_VALUE(ret, "starpu_init");
-
 #ifdef __MINGW32__
 	WSADATA wsadata;
 	WSAStartup(MAKEWORD(1,0), &wsadata);
@@ -657,7 +672,7 @@ int main(int argc, char **argv)
 
 		FILE *data_file = fopen(data_file_name, "w+");
 		STARPU_ASSERT(data_file);
-		dump_data_file(data_file);
+		dump_data_file(data_file, &model);
 		fclose(data_file);
 	}
 #endif
@@ -690,7 +705,5 @@ int main(int argc, char **argv)
 
 	_STARPU_DISP("Gnuplot file <%s> generated\n", gnuplot_file_name);
 
-	starpu_shutdown();
-
 	return 0;
 }