From aaf77c78f66fae093a684cb4a9e22b368399d8f6 Mon Sep 17 00:00:00 2001 From: Armin Friedl Date: Fri, 24 Jun 2016 03:45:10 +0200 Subject: [PATCH] added logging, added fastmath undermining for simple8 --- plot/plot.py | 1 + roofline/src/Makefile | 17 +++- roofline/src/aikern.c | 36 ++++++-- roofline/src/aikern.h | 49 +++++++++-- roofline/src/log/fma16 | 5 ++ roofline/src/log/fma8 | 5 ++ roofline/src/log/simple16 | 5 ++ roofline/src/log/simple8 | 5 ++ roofline/src/log/simple8fastmath | 5 ++ roofline/src/roofline | Bin 31088 -> 0 bytes roofline/src/roofline.c | 92 +++++++++++++++++++-- roofline/src/roofline_fma | Bin 18800 -> 0 bytes roofline/src/roofline_fma_fast_fastmath_o3 | Bin 22872 -> 0 bytes roofline/src/roofline_fma_fast_o3 | Bin 22872 -> 0 bytes roofline/src/roofline_fma_o3 | Bin 22872 -> 0 bytes roofline/src/roofline_o3 | Bin 26968 -> 0 bytes 16 files changed, 202 insertions(+), 18 deletions(-) create mode 100644 roofline/src/log/fma16 create mode 100644 roofline/src/log/fma8 create mode 100644 roofline/src/log/simple16 create mode 100644 roofline/src/log/simple8 create mode 100644 roofline/src/log/simple8fastmath delete mode 100755 roofline/src/roofline delete mode 100755 roofline/src/roofline_fma delete mode 100755 roofline/src/roofline_fma_fast_fastmath_o3 delete mode 100755 roofline/src/roofline_fma_fast_o3 delete mode 100755 roofline/src/roofline_fma_o3 delete mode 100755 roofline/src/roofline_o3 diff --git a/plot/plot.py b/plot/plot.py index 14a5fd8..198739c 100644 --- a/plot/plot.py +++ b/plot/plot.py @@ -21,6 +21,7 @@ while i<=64: xlbl.append(repr(i)) i *= 2 +print(xlbl) # memory values = [] bandwidth = 10.6 diff --git a/roofline/src/Makefile b/roofline/src/Makefile index adb4fb0..845fe45 100644 --- a/roofline/src/Makefile +++ b/roofline/src/Makefile @@ -1,7 +1,7 @@ -all: bin lib +all: clean bin lib # Roofline Binary -bin: roofline roofline_o3 roofline_fma roofline_fma_o3 roofline_fma_fast_o3 roofline_fma_fast_fastmath_o3 +bin: roofline roofline_o3 roofline_fma roofline_fma_o3 roofline_fma_fast_o3 roofline_fma_fast_o2 roofline_fma_fast_fastmath_o3 mkdir bin mv $^ bin @@ -20,12 +20,15 @@ roofline_fma_o3: roofline.c aikern_fma_o3.a roofline_fma_fast_o3: roofline.c aikern_fma_fast_o3.a gcc -Wall -Wextra -std=c99 -fopenmp $^ -o $@ +roofline_fma_fast_o2: roofline.c aikern_fma_fast_o2.a + gcc -Wall -Wextra -std=c99 -fopenmp $^ -o $@ + roofline_fma_fast_fastmath_o3: roofline.c aikern_fma_fast_fastmath_o3.a gcc -Wall -Wextra -std=c99 -fopenmp $^ -o $@ # Static Libraries -lib: aikern.a aikern_o3.a aikern_fma.a aikern_fma_o3.a aikern_fma_fast_o3.a aikern_fma_fast_fastmath_o3.a +lib: aikern.a aikern_o3.a aikern_fma.a aikern_fma_o3.a aikern_fma_fast_o2.a aikern_fma_fast_o3.a aikern_fma_fast_fastmath_o3.a mkdir lib mv $^ lib @@ -49,6 +52,11 @@ aikern_fma_o3.a: aikern.c aikern.h ar rcs $@ aikern_fma_o3.o rm aikern_fma_o3.o +aikern_fma_fast_o2.a: aikern.c aikern.h + gcc -Wall -Wextra -Wno-unused -O2 -mavx -mfma -fopenmp -Ofast -c -o aikern_fma_fast_o2.o $< + ar rcs $@ aikern_fma_fast_o2.o + rm aikern_fma_fast_o2.o + aikern_fma_fast_o3.a: aikern.c aikern.h gcc -Wall -Wextra -Wno-unused -O3 -mavx -mfma -fopenmp -Ofast -c -o aikern_fma_fast_o3.o $< ar rcs $@ aikern_fma_fast_o3.o @@ -61,6 +69,9 @@ aikern_fma_fast_fastmath_o3.a: aikern.c aikern.h # Cleanup clean: + rm -f *.a + rm -f *.o + rm -f roofline roofline_o3 roofline_fma roofline_fma_o3 roofline_fma_fast_o3 roofline_fma_fast_o2 roofline_fma_fast_fastmath_o3 rm -fR bin rm -fR lib diff --git a/roofline/src/aikern.c b/roofline/src/aikern.c index f043d01..1068a41 100644 --- a/roofline/src/aikern.c +++ b/roofline/src/aikern.c @@ -25,10 +25,11 @@ kern_result kernel_dispatch(kernel_t kernel, size_t size, size_t runs) { - kern_result result; + kern_result result = {0}; result.runs = runs; result.starts = malloc(sizeof(double)*(runs)); result.ends = malloc(sizeof(double)*(runs)); + result.size = size; if(result.starts==NULL || result.ends==NULL) { @@ -41,6 +42,7 @@ kern_result kernel_dispatch(kernel_t kernel, case SIMPLE_1_16: result.flops = 1; + result.kern_name = "Simple 1/16"; for(size_t r=0; rJE-dS|yvs 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 diff --git a/roofline/src/roofline.c b/roofline/src/roofline.c index aa91fdc..5f8bcd4 100644 --- a/roofline/src/roofline.c +++ b/roofline/src/roofline.c @@ -3,6 +3,7 @@ # include # include # include +# include # include # include # include @@ -67,7 +68,7 @@ static void testkern(double* a, double* b, double* c, size_t size); /** * @brief pretty prints a kern_result */ -static void print_kernresult(kern_result* result); +static void print_kernresult(kern_result* result, const char* logname); int main(int argc, char* argv[]) { prog_name = argv[0]; @@ -108,6 +109,7 @@ int main(int argc, char* argv[]) { size_t size = get_size(size_arg); int runs = get_int(runs_arg); + // Allocating arrays printf("Will run with array sizes of %zu elements\n", size); printf("Will calculate min, max, avg for %d runs\n", runs); double* a = malloc(sizeof(double)*(size)); @@ -119,7 +121,8 @@ int main(int argc, char* argv[]) { printf("Allocated 3 arrays (3*%.2f MB = %.2f GB)\n", (sizeof(double)*(size)/1024.0/1024.0), (sizeof(double)*(size)*3/1024.0/1024.0/1024)); printf("Filling arrays with dummy values. This will also warm the cache\n"); - + + // Filling arrays with arbitrary numbers #pragma omp parallel for for (size_t j=0; jkern_name); + } + } + + char logpath[20]; + snprintf(logpath, sizeof(logpath), "%s/%s", "log", logname); + FILE* log = fopen(logpath, "w"); + if(log == NULL) + bail_out("Couldn't open log file for %s", result->kern_name); + + if(fputs("run,start,end,delta,GFLOP/s\n", log) == EOF) + { + fclose(log); + bail_out("Couldn't write header to log file"); + } + + printf("=== %s ===\n", result->kern_name); + + double min; + double max; + double sum = 0.0; + double deltas[result->runs]; + + deltas[0] = result->ends[0] - result->starts[0]; + min=deltas[0]; + max=deltas[0]; + sum+=deltas[0]; + + for(size_t i=1; iruns; i++) + { + deltas[i] = result->ends[i] - result->starts[i]; + sum+=deltas[i]; + + if(deltas[i] < min) min=deltas[i]; + if(deltas[i] > max) max=deltas[i]; + + double gflops = ((result->flops * result->size) / deltas[i]) / 1.0E9; + + if(fprintf(log, "%zu,%.4f,%.4f,%.4f,%.4f\n", + i, result->starts[i], + result->ends[i], deltas[i], + gflops) == EOF) + { + fclose(log); + bail_out("Couldn't write to log file"); + } + } + + + printf("%d flop(s) per run\t %zu run(s)\n\n", result->flops, result->runs); + printf("Min: %.4f \t Max: %.4f \t Avg: %.4f\n", min, max, (sum/result->runs)); + + printf("\n\n\n"); + + + + if(fclose(log)) + { + bail_out("Couldn't close log file for %s", result->kern_name); + } } diff --git a/roofline/src/roofline_fma b/roofline/src/roofline_fma deleted file mode 100755 index 3d5832b7ec068b8c2c3da3fde7ba2a999d7e0cf1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18800 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 diff --git a/roofline/src/roofline_fma_fast_fastmath_o3 b/roofline/src/roofline_fma_fast_fastmath_o3 deleted file mode 100755 index 1bd004ae0e874182426b34a514f0e54f85afc5c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22872 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