diff --git a/Makefile b/Makefile index a1fa393..4f8dc70 100644 --- a/Makefile +++ b/Makefile @@ -3,8 +3,10 @@ BENCH_BLASFEO = build/bin/bench-blasfeo BENCH_BLAZE = build/bin/bench-blaze BENCH_EIGEN = build/bin/bench-eigen BENCH_BLAST = build/bin/bench-blast +BENCH_BLAST_OUTPUT_DIR = $(shell git rev-parse --short HEAD) +BENCH_BLAST_CPU_CORE = 11 BENCH_LIBXSMM = build/bin/bench-libxsmm -BENCHMARK_OPTIONS = --benchmark_repetitions=10 --benchmark_counters_tabular=true --benchmark_out_format=json +BENCHMARK_OPTIONS = --benchmark_repetitions=30 --benchmark_counters_tabular=true --benchmark_out_format=json --benchmark_enable_random_interleaving=true --benchmark_min_warmup_time=10 --benchmark_min_time=1000000x RUN_MATLAB = matlab -nodisplay -nosplash -nodesktop -r BENCH_DATA = bench_result/data BENCH_IMAGE = bench_result/image @@ -61,29 +63,29 @@ ${BENCH_DATA}/sgemm-blaze-static.json: $(BENCH_BLAZE) $(BENCH_BLAZE) --benchmark_filter="BM_gemm_static*" $(BENCHMARK_OPTIONS) \ --benchmark_out=${BENCH_DATA}/sgemm-blaze-static.json -${BENCH_DATA}/dgemm-blast-static-panel.json: $(BENCH_BLAST) - $(BENCH_BLAST) --benchmark_filter="BM_gemm_static_panel" $(BENCHMARK_OPTIONS) \ - --benchmark_out=${BENCH_DATA}/dgemm-blast-static-panel.json +${BENCH_DATA}/${BENCH_BLAST_OUTPUT_DIR}/dgemm-blast-static-panel.json: $(BENCH_BLAST) + taskset -c ${BENCH_BLAST_CPU_CORE} $(BENCH_BLAST) --benchmark_filter="BM_gemm_static_panel" $(BENCHMARK_OPTIONS) \ + --benchmark_out=${BENCH_DATA}/${BENCH_BLAST_OUTPUT_DIR}/dgemm-blast-static-panel.json -${BENCH_DATA}/dgemm-blast-dynamic-panel.json: $(BENCH_BLAST) - $(BENCH_BLAST) --benchmark_filter="BM_gemm_dynamic_panel" $(BENCHMARK_OPTIONS) \ - --benchmark_out=${BENCH_DATA}/dgemm-blast-dynamic-panel.json +${BENCH_DATA}/${BENCH_BLAST_OUTPUT_DIR}/dgemm-blast-dynamic-panel.json: $(BENCH_BLAST) + taskset -c ${BENCH_BLAST_CPU_CORE} $(BENCH_BLAST) --benchmark_filter="BM_gemm_dynamic_panel" $(BENCHMARK_OPTIONS) \ + --benchmark_out=${BENCH_DATA}/${BENCH_BLAST_OUTPUT_DIR}/dgemm-blast-dynamic-panel.json -${BENCH_DATA}/dgemm-blast-static-plain.json: $(BENCH_BLAST) - $(BENCH_BLAST) --benchmark_filter="BM_gemm_static_plain" $(BENCHMARK_OPTIONS) \ - --benchmark_out=${BENCH_DATA}/dgemm-blast-static-plain.json +${BENCH_DATA}/${BENCH_BLAST_OUTPUT_DIR}/dgemm-blast-static-plain.json: $(BENCH_BLAST) + taskset -c ${BENCH_BLAST_CPU_CORE} $(BENCH_BLAST) --benchmark_filter="BM_gemm_static_plain" $(BENCHMARK_OPTIONS) \ + --benchmark_out=${BENCH_DATA}/${BENCH_BLAST_OUTPUT_DIR}/dgemm-blast-static-plain.json -${BENCH_DATA}/dgemm-blast-dynamic-plain.json: $(BENCH_BLAST) - $(BENCH_BLAST) --benchmark_filter="BM_gemm_dynamic_plain" $(BENCHMARK_OPTIONS) \ - --benchmark_out=${BENCH_DATA}/dgemm-blast-dynamic-plain.json +${BENCH_DATA}/${BENCH_BLAST_OUTPUT_DIR}/dgemm-blast-dynamic-plain.json: $(BENCH_BLAST) + taskset -c ${BENCH_BLAST_CPU_CORE} $(BENCH_BLAST) --benchmark_filter="BM_gemm_dynamic_plain" $(BENCHMARK_OPTIONS) \ + --benchmark_out=${BENCH_DATA}/${BENCH_BLAST_OUTPUT_DIR}/dgemm-blast-dynamic-plain.json ${BENCH_DATA}/sgemm-blast-static-panel.json: $(BENCH_BLAST) - $(BENCH_BLAST) --benchmark_filter="BM_gemm_static_panel" $(BENCHMARK_OPTIONS) \ - --benchmark_out=${BENCH_DATA}/sgemm-blast-static-panel.json + taskset -c ${BENCH_BLAST_CPU_CORE} $(BENCH_BLAST) --benchmark_filter="BM_gemm_static_panel" $(BENCHMARK_OPTIONS) \ + --benchmark_out=${BENCH_DATA}/${BENCH_BLAST_OUTPUT_DIR}/sgemm-blast-static-panel.json ${BENCH_DATA}/sgemm-blast-dynamic-panel.json: $(BENCH_BLAST) - $(BENCH_BLAST) --benchmark_filter="BM_gemm_dynamic_panel" $(BENCHMARK_OPTIONS) \ - --benchmark_out=${BENCH_DATA}/sgemm-blast-dynamic-panel.json + taskset -c ${BENCH_BLAST_CPU_CORE} $(BENCH_BLAST) --benchmark_filter="BM_gemm_dynamic_panel" $(BENCHMARK_OPTIONS) \ + --benchmark_out=${BENCH_DATA}/${BENCH_BLAST_OUTPUT_DIR}/sgemm-blast-dynamic-panel.json ${BENCH_DATA}/dgemm-libxsmm.json: $(BENCH_LIBXSMM) $(BENCH_LIBXSMM) --benchmark_filter="BM_gemm_nt" $(BENCHMARK_OPTIONS) \ @@ -94,16 +96,17 @@ ${BENCH_DATA}/sgemm-libxsmm.json: $(BENCH_LIBXSMM) --benchmark_out=${BENCH_DATA}/sgemm-libxsmm.json dgemm-benchmarks: \ + $(shell mkdir -p ${BENCH_DATA}/${BENCH_BLAST_OUTPUT_DIR}) \ ${BENCH_DATA}/dgemm-openblas.json \ ${BENCH_DATA}/dgemm-mkl.json \ ${BENCH_DATA}/dgemm-libxsmm.json \ ${BENCH_DATA}/dgemm-blasfeo.json \ ${BENCH_DATA}/dgemm-blaze-static.json \ ${BENCH_DATA}/dgemm-eigen-static.json \ - ${BENCH_DATA}/dgemm-blast-static-panel.json \ - ${BENCH_DATA}/dgemm-blast-dynamic-panel.json \ - ${BENCH_DATA}/dgemm-blast-static-plain.json \ - ${BENCH_DATA}/dgemm-blast-dynamic-plain.json + ${BENCH_DATA}/${BENCH_BLAST_OUTPUT_DIR}/dgemm-blast-static-panel.json \ + ${BENCH_DATA}/${BENCH_BLAST_OUTPUT_DIR}/dgemm-blast-dynamic-panel.json \ + ${BENCH_DATA}/${BENCH_BLAST_OUTPUT_DIR}/dgemm-blast-static-plain.json \ + ${BENCH_DATA}/${BENCH_BLAST_OUTPUT_DIR}/dgemm-blast-dynamic-plain.json # @@ -238,4 +241,4 @@ ${BENCH_IMAGE}/mpc_software.pdf_tex: ${BENCH_IMAGE}/mpc_software.svg /usr/bin/inkscape --without-gui --file=${BENCH_IMAGE}/mpc_software.svg --export-pdf=${BENCH_IMAGE}/mpc_software.pdf --export-latex --export-area-drawing ${BENCH_IMAGE}/mpc_software.pdf: ${BENCH_IMAGE}/mpc_software.svg - /usr/bin/inkscape --without-gui --file=${BENCH_IMAGE}/mpc_software.svg --export-pdf=${BENCH_IMAGE}/mpc_software.pdf --export-area-drawing \ No newline at end of file + /usr/bin/inkscape --without-gui --file=${BENCH_IMAGE}/mpc_software.svg --export-pdf=${BENCH_IMAGE}/mpc_software.pdf --export-area-drawing diff --git a/bench/analysis/dgemm_performance.py b/bench/analysis/dgemm_performance.py index 5bd02de..e64e914 100644 --- a/bench/analysis/dgemm_performance.py +++ b/bench/analysis/dgemm_performance.py @@ -2,7 +2,8 @@ matplotlib.use("Agg") import matplotlib.pyplot as plt import json - +import glob +import pathlib def filter_aggregate(benchmarks, name): result = [] @@ -24,20 +25,21 @@ def filter_aggregate(benchmarks, name): plots = [ # {'data_file': 'dgemm-openblas.json', 'label': 'OpenBLAS'}, - {'data_file': 'dgemm-mkl.json', 'label': 'MKL'}, + # {'data_file': 'dgemm-mkl.json', 'label': 'MKL'}, {'data_file': 'dgemm-blasfeo.json', 'label': 'BLASFEO'}, # {'data_file': 'dgemm-blasfeo-blas.json', 'label': 'BLASFEO*'}, - {'data_file': 'dgemm-libxsmm.json', 'label': 'LIBXSMM'}, + # {'data_file': 'dgemm-libxsmm.json', 'label': 'LIBXSMM'}, # {'data_file': 'dgemm-eigen-dynamic.json', 'label': 'Eigen (D)'}, # {'data_file': 'dgemm-eigen-static.json', 'label': 'Eigen (S)'}, # {'data_file': 'dgemm-blaze-dynamic.json', 'label': 'Blaze (D)'}, - {'data_file': 'dgemm-blaze-static.json', 'label': 'Blaze (S)'}, - {'data_file': 'dgemm-blast-static-panel.json', 'label': 'BLAST (SP)'}, - {'data_file': 'dgemm-blast-static-plain.json', 'label': 'BLAST (SD)'}, - {'data_file': 'dgemm-blast-dynamic-panel.json', 'label': 'BLAST (DP)'}, - {'data_file': 'dgemm-blast-dynamic-plain.json', 'label': 'BLAST (DD)'}, + # {'data_file': 'dgemm-blaze-static.json', 'label': 'Blaze (S)'}, ] +for benchmark_file, benchmark_label in [('dgemm-blast-static-panel.json', 'SP'), ('dgemm-blast-static-plain.json', 'SD'), ('dgemm-blast-dynamic-panel.json', 'DP'), ('dgemm-blast-dynamic-plain.json', 'DD')]: + files = glob.glob('./**/' + benchmark_file, recursive=True, root_dir='bench_result/data') + for file in files: + plots.append({'data_file': file, 'label': f'BLAST ({benchmark_label}) {pathlib.Path(file).parent.stem}'}) + fig = plt.figure(figsize=[10, 6]) ax = fig.subplots() diff --git a/include/blast/math/dense/DynamicMatrixPointer.hpp b/include/blast/math/dense/DynamicMatrixPointer.hpp index b765137..486441b 100644 --- a/include/blast/math/dense/DynamicMatrixPointer.hpp +++ b/include/blast/math/dense/DynamicMatrixPointer.hpp @@ -11,7 +11,6 @@ #include #include - namespace blast { template