瀏覽代碼

tools/starpu_perfmodel_display.c: rename internal functions and make them independant (i.e they no longer use static global variables), that's the first step to move them to the StarPU public API

Nathalie Furmento 13 年之前
父節點
當前提交
68fe0ad42e
共有 1 個文件被更改,包括 52 次插入46 次删除
  1. 52 46
      tools/starpu_perfmodel_display.c

+ 52 - 46
tools/starpu_perfmodel_display.c

@@ -32,16 +32,16 @@
 #define PROGNAME "starpu_perfmodel_display"
 #define PROGNAME "starpu_perfmodel_display"
 
 
 /* display all available models */
 /* display all available models */
-static int list = 0;
+static int plist = 0;
 /* what kernel ? */
 /* what kernel ? */
-static char *symbol = NULL;
+static char *psymbol = NULL;
 /* what parameter should be displayed ? (NULL = all) */
 /* what parameter should be displayed ? (NULL = all) */
-static char *parameter = NULL;
+static char *pparameter = NULL;
 /* which architecture ? (NULL = all)*/
 /* which architecture ? (NULL = all)*/
-static char *arch = NULL;
+static char *parch = NULL;
 /* should we display a specific footprint ? */
 /* should we display a specific footprint ? */
-unsigned display_specific_footprint;
-uint32_t specific_footprint;
+static unsigned pdisplay_specific_footprint;
+static uint32_t pspecific_footprint;
 
 
 static void usage(char **argv)
 static void usage(char **argv)
 {
 {
@@ -85,28 +85,28 @@ static void parse_args(int argc, char **argv)
 		{
 		{
                 case 'l':
                 case 'l':
                         /* list all models */
                         /* list all models */
-                        list = 1;
+                        plist = 1;
                         break;
                         break;
 
 
 		case 's':
 		case 's':
 			/* symbol */
 			/* symbol */
-			symbol = optarg;
+			psymbol = optarg;
 			break;
 			break;
 
 
 		case 'p':
 		case 'p':
 			/* parameter (eg. a, b, c, mean, stddev) */
 			/* parameter (eg. a, b, c, mean, stddev) */
-			parameter = optarg;
+			pparameter = optarg;
 			break;
 			break;
 
 
 		case 'a':
 		case 'a':
 			/* architecture (cpu, cuda, gordon) */
 			/* architecture (cpu, cuda, gordon) */
-			arch = optarg;
+			parch = optarg;
 			break;
 			break;
 
 
 		case 'f':
 		case 'f':
 			/* footprint */
 			/* footprint */
-			display_specific_footprint = 1;
-			sscanf(optarg, "%08x", &specific_footprint);
+			pdisplay_specific_footprint = 1;
+			sscanf(optarg, "%08x", &pspecific_footprint);
 			break;
 			break;
 
 
 		case 'h':
 		case 'h':
@@ -125,7 +125,7 @@ static void parse_args(int argc, char **argv)
 		}
 		}
 	}
 	}
 
 
-	if (!symbol && !list)
+	if (!psymbol && !plist)
 	{
 	{
 		fprintf(stderr, "Incorrect usage, aborting\n");
 		fprintf(stderr, "Incorrect usage, aborting\n");
                 usage(argv);
                 usage(argv);
@@ -133,19 +133,20 @@ static void parse_args(int argc, char **argv)
 	}
 	}
 }
 }
 
 
-static void display_history_based_perf_model(struct starpu_per_arch_perfmodel *per_arch_model)
+static
+void starpu_perfmodel_print_history_based(struct starpu_per_arch_perfmodel *per_arch_model, char *parameter, uint32_t *footprint, FILE *f)
 {
 {
 	struct starpu_history_list *ptr;
 	struct starpu_history_list *ptr;
 
 
 	ptr = per_arch_model->list;
 	ptr = per_arch_model->list;
 
 
 	if (!parameter && ptr)
 	if (!parameter && ptr)
-		fprintf(stderr, "# hash\t\tsize\t\tmean\t\tdev\t\tn\n");
+		fprintf(f, "# hash\t\tsize\t\tmean\t\tdev\t\tn\n");
 
 
 	while (ptr)
 	while (ptr)
 	{
 	{
 		struct starpu_history_entry *entry = ptr->entry;
 		struct starpu_history_entry *entry = ptr->entry;
-		if (!display_specific_footprint || (entry->footprint == specific_footprint))
+		if (!footprint || entry->footprint == *footprint)
 		{
 		{
 			if (!parameter)
 			if (!parameter)
 			{
 			{
@@ -173,7 +174,7 @@ static void display_history_based_perf_model(struct starpu_per_arch_perfmodel *p
 	}
 	}
 }
 }
 
 
-static void display_perf_model(struct starpu_perfmodel *model, enum starpu_perf_archtype arch, unsigned nimpl)
+static void starpu_perfmodel_print(struct starpu_perfmodel *model, enum starpu_perf_archtype arch, unsigned nimpl, char *parameter, uint32_t *footprint, FILE *f)
 {
 {
 	struct starpu_per_arch_perfmodel *arch_model = &model->per_arch[arch][nimpl];
 	struct starpu_per_arch_perfmodel *arch_model = &model->per_arch[arch][nimpl];
 	char archname[32];
 	char archname[32];
@@ -181,7 +182,7 @@ static void display_perf_model(struct starpu_perfmodel *model, enum starpu_perf_
 	if (arch_model->regression.nsample || arch_model->regression.valid || arch_model->regression.nl_valid || arch_model->list)
 	if (arch_model->regression.nsample || arch_model->regression.valid || arch_model->regression.nl_valid || arch_model->list)
 	{
 	{
 		starpu_perfmodel_get_arch_name(arch, archname, 32, nimpl);
 		starpu_perfmodel_get_arch_name(arch, archname, 32, nimpl);
-		fprintf(stderr, "performance model for %s\n", archname);
+		fprintf(f, "performance model for %s\n", archname);
 	}
 	}
 
 
 	if (parameter == NULL)
 	if (parameter == NULL)
@@ -189,34 +190,34 @@ static void display_perf_model(struct starpu_perfmodel *model, enum starpu_perf_
 		/* no specific parameter was requested, so we display everything */
 		/* no specific parameter was requested, so we display everything */
 		if (arch_model->regression.nsample)
 		if (arch_model->regression.nsample)
 		{
 		{
-			fprintf(stderr, "\tRegression : #sample = %d\n", arch_model->regression.nsample);
+			fprintf(f, "\tRegression : #sample = %d\n", arch_model->regression.nsample);
 		}
 		}
 
 
 		/* Only display the regression model if we could actually build a model */
 		/* Only display the regression model if we could actually build a model */
 		if (arch_model->regression.valid)
 		if (arch_model->regression.valid)
 		{
 		{
-			fprintf(stderr, "\tLinear: y = alpha size ^ beta\n");
-			fprintf(stderr, "\t\talpha = %e\n", arch_model->regression.alpha);
-			fprintf(stderr, "\t\tbeta = %e\n", arch_model->regression.beta);
+			fprintf(f, "\tLinear: y = alpha size ^ beta\n");
+			fprintf(f, "\t\talpha = %e\n", arch_model->regression.alpha);
+			fprintf(f, "\t\tbeta = %e\n", arch_model->regression.beta);
 		}
 		}
 		else
 		else
 		{
 		{
-			//fprintf(stderr, "\tLinear model is INVALID\n");
+			//fprintf(f, "\tLinear model is INVALID\n");
 		}
 		}
 
 
 		if (arch_model->regression.nl_valid)
 		if (arch_model->regression.nl_valid)
 		{
 		{
-			fprintf(stderr, "\tNon-Linear: y = a size ^b + c\n");
-			fprintf(stderr, "\t\ta = %e\n", arch_model->regression.a);
-			fprintf(stderr, "\t\tb = %e\n", arch_model->regression.b);
-			fprintf(stderr, "\t\tc = %e\n", arch_model->regression.c);
+			fprintf(f, "\tNon-Linear: y = a size ^b + c\n");
+			fprintf(f, "\t\ta = %e\n", arch_model->regression.a);
+			fprintf(f, "\t\tb = %e\n", arch_model->regression.b);
+			fprintf(f, "\t\tc = %e\n", arch_model->regression.c);
 		}
 		}
 		else
 		else
 		{
 		{
-			//fprintf(stderr, "\tNon-Linear model is INVALID\n");
+			//fprintf(f, "\tNon-Linear model is INVALID\n");
 		}
 		}
 
 
-		display_history_based_perf_model(arch_model);
+		starpu_perfmodel_print_history_based(arch_model, parameter, footprint, f);
 
 
 #if 0
 #if 0
 		char debugname[1024];
 		char debugname[1024];
@@ -267,18 +268,18 @@ static void display_perf_model(struct starpu_perfmodel *model, enum starpu_perf_
 
 
 		if ((strcmp(parameter, "mean") == 0) || (strcmp(parameter, "stddev")))
 		if ((strcmp(parameter, "mean") == 0) || (strcmp(parameter, "stddev")))
 		{
 		{
-			display_history_based_perf_model(arch_model);
+			starpu_perfmodel_print_history_based(arch_model, parameter, footprint, f);
 			return;
 			return;
 		}
 		}
 
 
 		/* TODO display if it's valid ? */
 		/* TODO display if it's valid ? */
 
 
-		fprintf(stderr, "Unknown parameter requested, aborting.\n");
+		fprintf(f, "Unknown parameter requested, aborting.\n");
 		exit(-1);
 		exit(-1);
 	}
 	}
 }
 }
 
 
-static void display_all_perf_models(struct starpu_perfmodel *model)
+static void starpu_perfmodel_print_all(struct starpu_perfmodel *model, char *arch, char *parameter, uint32_t *footprint, FILE *f)
 {
 {
 	if (arch == NULL)
 	if (arch == NULL)
 	{
 	{
@@ -289,7 +290,7 @@ static void display_all_perf_models(struct starpu_perfmodel *model)
 		{
 		{
 			for (implid = 0; implid < STARPU_MAXIMPLEMENTATIONS; implid++)
 			for (implid = 0; implid < STARPU_MAXIMPLEMENTATIONS; implid++)
 			{ /* Display all codelets on each arch */
 			{ /* Display all codelets on each arch */
-				display_perf_model(model, (enum starpu_perf_archtype) archid, implid);
+				starpu_perfmodel_print(model, (enum starpu_perf_archtype) archid, implid, parameter, footprint, f);
 			}
 			}
 		}
 		}
 	}
 	}
@@ -299,7 +300,7 @@ static void display_all_perf_models(struct starpu_perfmodel *model)
 		{
 		{
 			unsigned implid;
 			unsigned implid;
 			for (implid = 0; implid < STARPU_MAXIMPLEMENTATIONS; implid++)
 			for (implid = 0; implid < STARPU_MAXIMPLEMENTATIONS; implid++)
-				display_perf_model(model, STARPU_CPU_DEFAULT,implid); /* Display all codelets on cpu */
+				starpu_perfmodel_print(model, STARPU_CPU_DEFAULT,implid, parameter, footprint, f); /* Display all codelets on cpu */
 			return;
 			return;
 		}
 		}
 
 
@@ -309,13 +310,13 @@ static void display_all_perf_models(struct starpu_perfmodel *model)
 			/* For combined CPU workers */
 			/* For combined CPU workers */
 			if ((k < 1) || (k > STARPU_MAXCPUS))
 			if ((k < 1) || (k > STARPU_MAXCPUS))
 			{
 			{
-				fprintf(stderr, "Invalid CPU size\n");
+				fprintf(f, "Invalid CPU size\n");
 				exit(-1);
 				exit(-1);
 			}
 			}
 
 
 			unsigned implid;
 			unsigned implid;
 			for (implid = 0; implid < STARPU_MAXIMPLEMENTATIONS; implid++)
 			for (implid = 0; implid < STARPU_MAXIMPLEMENTATIONS; implid++)
-				display_perf_model(model, (enum starpu_perf_archtype) (STARPU_CPU_DEFAULT + k - 1), implid);
+				starpu_perfmodel_print(model, (enum starpu_perf_archtype) (STARPU_CPU_DEFAULT + k - 1), implid, parameter, footprint, f);
 			return;
 			return;
 		}
 		}
 
 
@@ -329,8 +330,8 @@ static void display_all_perf_models(struct starpu_perfmodel *model)
 				{
 				{
 					char archname[32];
 					char archname[32];
 					starpu_perfmodel_get_arch_name((enum starpu_perf_archtype) archid, archname, 32, implid);
 					starpu_perfmodel_get_arch_name((enum starpu_perf_archtype) archid, archname, 32, implid);
-					fprintf(stderr, "performance model for %s\n", archname);
-					display_perf_model(model, (enum starpu_perf_archtype) archid, implid);
+					fprintf(f, "performance model for %s\n", archname);
+					starpu_perfmodel_print(model, (enum starpu_perf_archtype) archid, implid, parameter, footprint, f);
 				}
 				}
 			}
 			}
 			return;
 			return;
@@ -345,20 +346,20 @@ static void display_all_perf_models(struct starpu_perfmodel *model)
 			unsigned archid = STARPU_CUDA_DEFAULT+ gpuid;
 			unsigned archid = STARPU_CUDA_DEFAULT+ gpuid;
 			unsigned implid;
 			unsigned implid;
 			for (implid = 0; implid < STARPU_MAXIMPLEMENTATIONS; implid++)
 			for (implid = 0; implid < STARPU_MAXIMPLEMENTATIONS; implid++)
-				display_perf_model(model, (enum starpu_perf_archtype) archid, implid);
+				starpu_perfmodel_print(model, (enum starpu_perf_archtype) archid, implid, parameter, footprint, f);
 			return;
 			return;
 		}
 		}
 
 
 		if (strcmp(arch, "gordon") == 0)
 		if (strcmp(arch, "gordon") == 0)
 		{
 		{
-			fprintf(stderr, "performance model for gordon\n");
+			fprintf(f, "performance model for gordon\n");
 			unsigned implid;
 			unsigned implid;
 			for (implid = 0; implid < STARPU_MAXIMPLEMENTATIONS; implid++)
 			for (implid = 0; implid < STARPU_MAXIMPLEMENTATIONS; implid++)
-				display_perf_model(model, STARPU_GORDON_DEFAULT, implid);
+				starpu_perfmodel_print(model, STARPU_GORDON_DEFAULT, implid, parameter, footprint, f);
 			return;
 			return;
 		}
 		}
 
 
-		fprintf(stderr, "Unknown architecture requested, aborting.\n");
+		fprintf(f, "Unknown architecture requested, aborting.\n");
 		exit(-1);
 		exit(-1);
 	}
 	}
 }
 }
@@ -372,7 +373,7 @@ int main(int argc, char **argv)
 
 
 	parse_args(argc, argv);
 	parse_args(argc, argv);
 
 
-        if (list)
+        if (plist)
 	{
 	{
                 int ret = starpu_perfmodel_list(stdout);
                 int ret = starpu_perfmodel_list(stdout);
                 if (ret)
                 if (ret)
@@ -384,13 +385,18 @@ int main(int argc, char **argv)
         else
         else
 	{
 	{
 		struct starpu_perfmodel model;
 		struct starpu_perfmodel model;
-                int ret = starpu_perfmodel_load_symbol(symbol, &model);
+                int ret = starpu_perfmodel_load_symbol(psymbol, &model);
                 if (ret == 1)
                 if (ret == 1)
 		{
 		{
-			fprintf(stderr, "The performance model for the symbol <%s> could not be loaded\n", symbol);
+			fprintf(stderr, "The performance model for the symbol <%s> could not be loaded\n", psymbol);
 			return 1;
 			return 1;
 		}
 		}
-                display_all_perf_models(&model);
+		uint32_t *footprint = NULL;
+		if (pdisplay_specific_footprint == 1)
+		{
+			footprint = &pspecific_footprint;
+		}
+		starpu_perfmodel_print_all(&model, parch, pparameter, footprint, stdout);
         }
         }
 
 
 	return 0;
 	return 0;