瀏覽代碼

Fix dumping performance models: the holes within an arch type *have* to be expressed

Samuel Thibault 13 年之前
父節點
當前提交
0eea00d984
共有 1 個文件被更改,包括 14 次插入9 次删除
  1. 14 9
      src/core/perfmodel/perfmodel_history.c

+ 14 - 9
src/core/perfmodel/perfmodel_history.c

@@ -398,8 +398,8 @@ static unsigned get_n_entries(struct starpu_perfmodel *model, unsigned arch, uns
 
 static void dump_model_file(FILE *f, struct starpu_perfmodel *model)
 {
-	unsigned number_of_archs[4] = { 0, 0, 0, 0};
-	unsigned arch;
+	unsigned narch[4] = { 0, 0, 0, 0};
+	unsigned arch, arch_base = 0, my_narch = 0;
 	unsigned nimpl;
 	unsigned idx = 0;
 
@@ -411,6 +411,7 @@ static void dump_model_file(FILE *f, struct starpu_perfmodel *model)
 			case STARPU_CUDA_DEFAULT:
 			case STARPU_OPENCL_DEFAULT:
 			case STARPU_GORDON_DEFAULT:
+				arch_base = arch;
 				idx++;
 				break;
 			default:
@@ -422,7 +423,7 @@ static void dump_model_file(FILE *f, struct starpu_perfmodel *model)
 			for (nimpl = 0; nimpl < STARPU_MAXIMPLEMENTATIONS; nimpl++)
 				if (get_n_entries(model, arch, nimpl))
 				{
-					number_of_archs[idx]++;
+					narch[idx]=arch-arch_base+1;
 					break;
 				}
 		}
@@ -431,7 +432,7 @@ static void dump_model_file(FILE *f, struct starpu_perfmodel *model)
 			for (nimpl = 0; nimpl < STARPU_MAXIMPLEMENTATIONS; nimpl++)
 				if (model->per_arch[arch][nimpl].regression.nsample)
 				{
-					number_of_archs[idx]++;
+					narch[idx]=arch-arch_base+1;
 					break;
 				}
 		}
@@ -447,35 +448,39 @@ static void dump_model_file(FILE *f, struct starpu_perfmodel *model)
 		switch (arch)
 		{
 			case STARPU_CPU_DEFAULT:
+				arch_base = arch;
 				name = "CPU";
 				fprintf(f, "##################\n");
 				fprintf(f, "# %ss\n", name);
 				fprintf(f, "# maximum number of %ss\n", name);
-				fprintf(f, "%u\n", number_of_archs[0]);
+				fprintf(f, "%u\n", my_narch = narch[0]);
 				break;
 			case STARPU_CUDA_DEFAULT:
+				arch_base = arch;
 				name = "CUDA";
 				substract_to_arch = STARPU_MAXCPUS;
 				fprintf(f, "##################\n");
 				fprintf(f, "# %ss\n", name);
 				fprintf(f, "# number of %s architectures\n", name);
-				fprintf(f, "%u\n", number_of_archs[1]);
+				fprintf(f, "%u\n", my_narch = narch[1]);
 				break;
 			case STARPU_OPENCL_DEFAULT:
+				arch_base = arch;
 				name = "OPENCL";
 				substract_to_arch += STARPU_MAXCUDADEVS;
 				fprintf(f, "##################\n");
 				fprintf(f, "# %ss\n", name);
 				fprintf(f, "# number of %s architectures\n", name);
-				fprintf(f, "%u\n", number_of_archs[2]);
+				fprintf(f, "%u\n", my_narch = narch[2]);
 				break;
 			case STARPU_GORDON_DEFAULT:
+				arch_base = arch;
 				name = "GORDON";
 				substract_to_arch += STARPU_MAXOPENCLDEVS;
 				fprintf(f, "##################\n");
 				fprintf(f, "# %ss\n", name);
 				fprintf(f, "# number of %s architectures\n", name);
-				fprintf(f, "%u\n", number_of_archs[3]);
+				fprintf(f, "%u\n", my_narch = narch[3]);
 				break;
 			default:
 				break;
@@ -497,7 +502,7 @@ static void dump_model_file(FILE *f, struct starpu_perfmodel *model)
 		else
 			STARPU_ASSERT_MSG(0, "Unknown history-based performance model");
 
-		if (max_impl == 0)
+		if (arch >= my_narch + arch_base)
 			continue;
 
 		fprintf(f, "###########\n");