From 9c74a42b59fc764bca76dac9b38d8a33045a8129 Mon Sep 17 00:00:00 2001 From: Francis Russell Date: Sun, 24 Jun 2012 17:32:30 +0100 Subject: [PATCH] Refactor for benchmarking Laplacian. --- .gitignore | 12 ++++++++- benchmark.mk.in | 23 +++++++++++++++++ {mass_matrix_2d => common}/benchmark.cpp.tmpl | 2 +- .../benchmark.cpp.tmpl.old | 2 +- .../generate_ufl_rules.sh | 21 ++++++++-------- configure.ac | 2 +- .../Makefile.in => laplacian_2d/Makefile | 25 ++----------------- laplacian_2d/laplacian_f0.tmpl | 6 +++++ laplacian_2d/laplacian_f1.tmpl | 9 +++++++ laplacian_2d/laplacian_f2.tmpl | 10 ++++++++ laplacian_2d/laplacian_f3.tmpl | 11 ++++++++ laplacian_2d/laplacian_f4.tmpl | 12 +++++++++ mass_matrix_2d/Makefile | 16 ++++++++++++ .../count_instructions | 0 {mass_matrix_2d => scripts}/make_table_norms | 3 ++- .../make_table_performance | 5 ++-- {mass_matrix_2d => scripts}/run_benchmarks | 0 {mass_matrix_2d => scripts}/set_scaling_mode | 0 18 files changed, 119 insertions(+), 40 deletions(-) create mode 100644 benchmark.mk.in rename {mass_matrix_2d => common}/benchmark.cpp.tmpl (99%) rename {mass_matrix_2d => common}/benchmark.cpp.tmpl.old (98%) rename {mass_matrix_2d => common}/generate_ufl_rules.sh (76%) rename mass_matrix_2d/Makefile.in => laplacian_2d/Makefile (58%) create mode 100644 laplacian_2d/laplacian_f0.tmpl create mode 100644 laplacian_2d/laplacian_f1.tmpl create mode 100644 laplacian_2d/laplacian_f2.tmpl create mode 100644 laplacian_2d/laplacian_f3.tmpl create mode 100644 laplacian_2d/laplacian_f4.tmpl create mode 100644 mass_matrix_2d/Makefile rename {mass_matrix_2d => scripts}/count_instructions (100%) rename {mass_matrix_2d => scripts}/make_table_norms (93%) rename {mass_matrix_2d => scripts}/make_table_performance (94%) rename {mass_matrix_2d => scripts}/run_benchmarks (100%) rename {mass_matrix_2d => scripts}/set_scaling_mode (100%) diff --git a/.gitignore b/.gitignore index 586dec5..f0fb820 100644 --- a/.gitignore +++ b/.gitignore @@ -2,8 +2,8 @@ /config.log /config.status /configure +/benchmark.mk /autom4te.cache/ -/mass_matrix_2d/Makefile /mass_matrix_2d/ufl_rules.mk /mass_matrix_2d/benchmark_f?_p?_q? /mass_matrix_2d/benchmark_f?_p?_q?.cpp @@ -14,3 +14,13 @@ /mass_matrix_2d/mass_matrix_f?_p?_q?_tensor.h /mass_matrix_2d/mass_matrix_f?_p?_q?_quadrature.h /mass_matrix_2d/mass_matrix_f?_p?_q?_excafe.h +/laplacian_2d/ufl_rules.mk +/laplacian_2d/benchmark_f?_p?_q? +/laplacian_2d/benchmark_f?_p?_q?.cpp +/laplacian_2d/laplacian_f?_p?_q?.cpp +/laplacian_2d/laplacian_f?_p?_q?.ufl +/laplacian_2d/laplacian_f?_p?_q?_tensor.ufl +/laplacian_2d/laplacian_f?_p?_q?_quadrature.ufl +/laplacian_2d/laplacian_f?_p?_q?_tensor.h +/laplacian_2d/laplacian_f?_p?_q?_quadrature.h +/laplacian_2d/laplacian_f?_p?_q?_excafe.h diff --git a/benchmark.mk.in b/benchmark.mk.in new file mode 100644 index 0000000..81eb6bf --- /dev/null +++ b/benchmark.mk.in @@ -0,0 +1,23 @@ +default: tractable-benchmarks + +include ./ufl_rules.mk + +ufl_rules.mk: ../common/generate_ufl_rules.sh + ./$^ ${MAT_TYPE} > $@ + +EXCAFE_LOCATION=${HOME}/excafe +MASS_MATRIX_2D_GENERATOR=${EXCAFE_LOCATION}/mass_matrix_generator_2d/generator + +CXXFLAGS=@CXXFLAGS@ +LDFLAGS=@LDFLAGS@ + +CXXFLAGS+= @BOOST_CPPFLAGS@ -I../ufc -O3 +LDFLAGS+= @BOOST_LDFLAGS@ @BOOST_SERIALIZATION_LIB@ @APR1_LIBS@ -lm -lpapi + +all-benchmarks: ${ALL_EXECUTABLES} + +clean: + rm -f *.py ${CLEAN_FILES} + +.PHONY: default tractable-benchmarks all-benchmarks clean +.SECONDARY: ${INTERMEDIATES} diff --git a/mass_matrix_2d/benchmark.cpp.tmpl b/common/benchmark.cpp.tmpl similarity index 99% rename from mass_matrix_2d/benchmark.cpp.tmpl rename to common/benchmark.cpp.tmpl index e8e5f16..87a5d72 100644 --- a/mass_matrix_2d/benchmark.cpp.tmpl +++ b/common/benchmark.cpp.tmpl @@ -27,7 +27,7 @@ #include #define COMMON_NAME(nf, p, q, rep) X_COMMON_NAME(nf, p, q, rep) -#define X_COMMON_NAME(nf, p, q, rep) mass_matrix_f ## nf ## _p ## p ## _q ## q ## _ ## rep +`#'define X_COMMON_NAME(nf, p, q, rep) MAT_TYPE ## _f ## nf ## _p ## p ## _q ## q ## _ ## rep `#'define COMMON_NAME_TENSOR COMMON_NAME(NF_VALUE, P_VALUE, Q_VALUE, tensor) `#'define COMMON_NAME_QUADRATURE COMMON_NAME(NF_VALUE, P_VALUE, Q_VALUE, quadrature) diff --git a/mass_matrix_2d/benchmark.cpp.tmpl.old b/common/benchmark.cpp.tmpl.old similarity index 98% rename from mass_matrix_2d/benchmark.cpp.tmpl.old rename to common/benchmark.cpp.tmpl.old index edc3ef8..150c5f8 100644 --- a/mass_matrix_2d/benchmark.cpp.tmpl.old +++ b/common/benchmark.cpp.tmpl.old @@ -21,7 +21,7 @@ #include #define COMMON_NAME(nf, p, q, rep) X_COMMON_NAME(nf, p, q, rep) -#define X_COMMON_NAME(nf, p, q, rep) mass_matrix_f ## nf ## _p ## p ## _q ## q ## _ ## rep +`#'define X_COMMON_NAME(nf, p, q, rep) MAT_TYPE ## _f ## nf ## _p ## p ## _q ## q ## _ ## rep `#'define COMMON_NAME_TENSOR COMMON_NAME(NF_VALUE, P_VALUE, Q_VALUE, tensor) `#'define COMMON_NAME_QUADRATURE COMMON_NAME(NF_VALUE, P_VALUE, Q_VALUE, quadrature) diff --git a/mass_matrix_2d/generate_ufl_rules.sh b/common/generate_ufl_rules.sh similarity index 76% rename from mass_matrix_2d/generate_ufl_rules.sh rename to common/generate_ufl_rules.sh index aa32fa1..b89cdb9 100755 --- a/mass_matrix_2d/generate_ufl_rules.sh +++ b/common/generate_ufl_rules.sh @@ -4,21 +4,22 @@ PROGRAMS="" CLEAN_FILES="" INTERMEDIATES="" ECHO="/bin/echo" +MAT_TYPE=${1:?} for NF in 1 2 3 4; do for P in 1 2 3; do for Q in 1 2 3 4; do OPTIONS="f${NF}_p${P}_q${Q}" - BENCHMARK_TEMPLATE="benchmark.cpp.tmpl" + BENCHMARK_TEMPLATE="../common/benchmark.cpp.tmpl" BENCHMARK_EXECUTABLE="benchmark_${OPTIONS}" BENCHMARK_SOURCE="benchmark_${OPTIONS}.cpp" PROGRAMS="${BENCHMARK_EXECUTABLE} ${PROGRAMS}" # Generate UFL headers - TEMPLATE_FILE="mass_matrix_f${NF}.tmpl" - UFL_FILE="mass_matrix_${OPTIONS}.ufl" + TEMPLATE_FILE="${MAT_TYPE}_f${NF}.tmpl" + UFL_FILE="${MAT_TYPE}_${OPTIONS}.ufl" INTERMEDIATES="${INTERMEDIATES} ${UFL_FILE}" TEMPLATE_GENERATED="${UFL_FILE} ${BENCHMARK_SOURCE}" @@ -29,7 +30,7 @@ for NF in 1 2 3 4; do FFC_BUILT_SOURCES="" for REPRESENTATION in tensor quadrature; do REP_SPECIFIC_OPTIONS="${OPTIONS}_${REPRESENTATION}" - REP_SPECIFIC_UFL_FILE="mass_matrix_${REP_SPECIFIC_OPTIONS}.ufl" + REP_SPECIFIC_UFL_FILE="${MAT_TYPE}_${REP_SPECIFIC_OPTIONS}.ufl" TEMPLATE_GENERATED="${TEMPLATE_GENERATED} ${REP_SPECIFIC_UFL_FILE}" INTERMEDIATES="${INTERMEDIATES} ${REP_SPECIFIC_UFL_FILE}" @@ -37,7 +38,7 @@ for NF in 1 2 3 4; do ${ECHO} "${REP_SPECIFIC_UFL_FILE}: ${UFL_FILE}" ${ECHO} -e "\tcp \$^ \$@" - FFC_HEADER="mass_matrix_${REP_SPECIFIC_OPTIONS}.h" + FFC_HEADER="${MAT_TYPE}_${REP_SPECIFIC_OPTIONS}.h" FFC_BUILT_SOURCES="${FFC_HEADER} ${FFC_BUILT_SOURCES}" ${ECHO} "${FFC_HEADER}: ${REP_SPECIFIC_UFL_FILE}" @@ -45,14 +46,14 @@ for NF in 1 2 3 4; do done # Generate Excafe headers - EXCAFE_HEADER="mass_matrix_${OPTIONS}_excafe.h" + EXCAFE_HEADER="${MAT_TYPE}_${OPTIONS}_excafe.h" EXCAFE_BUILT_SOURCES="${EXCAFE_HEADER}" ${ECHO} "${EXCAFE_HEADER}:" - ${ECHO} -e "\t\${MASS_MATRIX_2D_GENERATOR} mass_matrix ${NF} ${P} ${Q} ${EXCAFE_HEADER}" + ${ECHO} -e "\t\${MASS_MATRIX_2D_GENERATOR} ${MAT_TYPE} ${NF} ${P} ${Q} ${EXCAFE_HEADER}" # Generate dependencies for benchmark executable ${ECHO} "${BENCHMARK_SOURCE}: ${BENCHMARK_TEMPLATE}" - ${ECHO} -e "\tm4 -DNF_VALUE=${NF} -DP_VALUE=${P} -DQ_VALUE=${Q} \$^ > \$@" + ${ECHO} -e "\tm4 -DMAT_TYPE=${MAT_TYPE} -DNF_VALUE=${NF} -DP_VALUE=${P} -DQ_VALUE=${Q} \$^ > \$@" ${ECHO} "${BENCHMARK_EXECUTABLE}: ${BENCHMARK_SOURCE} ${FFC_BUILT_SOURCES} ${EXCAFE_BUILT_SOURCES}" ${ECHO} -e '\t${CXX} ${CXXFLAGS} ${LDFLAGS} $< -o $@' @@ -65,5 +66,5 @@ for NF in 1 2 3 4; do done ${ECHO} "ALL_EXECUTABLES = ${PROGRAMS}" -${ECHO} "CLEAN_FILES=${CLEAN_FILES}" -${ECHO} "INTERMEDIATES=${INTERMEDIATES}" +${ECHO} "CLEAN_FILES = ${CLEAN_FILES}" +${ECHO} "INTERMEDIATES = ${INTERMEDIATES}" diff --git a/configure.ac b/configure.ac index c36d89a..4ec4213 100644 --- a/configure.ac +++ b/configure.ac @@ -46,5 +46,5 @@ AC_HEADER_STDBOOL AC_TYPE_SIZE_T AC_TYPE_UINT32_T -AC_CONFIG_FILES([mass_matrix_2d/Makefile]) +AC_CONFIG_FILES([benchmark.mk]) AC_OUTPUT diff --git a/mass_matrix_2d/Makefile.in b/laplacian_2d/Makefile similarity index 58% rename from mass_matrix_2d/Makefile.in rename to laplacian_2d/Makefile index 8e1473a..0cb63a1 100644 --- a/mass_matrix_2d/Makefile.in +++ b/laplacian_2d/Makefile @@ -1,18 +1,5 @@ -default: tractable-benchmarks - -include ./ufl_rules.mk - -ufl_rules.mk: generate_ufl_rules.sh - ./$^ > $@ - -EXCAFE_LOCATION=${HOME}/excafe -MASS_MATRIX_2D_GENERATOR=${EXCAFE_LOCATION}/mass_matrix_generator_2d/generator - -CXXFLAGS=@CXXFLAGS@ -LDFLAGS=@LDFLAGS@ - -CXXFLAGS+= @BOOST_CPPFLAGS@ -I../ufc -O3 -LDFLAGS+= @BOOST_LDFLAGS@ @BOOST_SERIALIZATION_LIB@ @APR1_LIBS@ -lm -lpapi +MAT_TYPE="laplacian" +include ../benchmark.mk tractable-benchmarks: benchmark_f1_p1_q1 benchmark_f1_p2_q3 \ benchmark_f2_p1_q1 benchmark_f2_p2_q3 benchmark_f3_p1_q1 \ @@ -27,11 +14,3 @@ benchmark_f2_p2_q1 benchmark_f2_p3_q3 benchmark_f3_p2_q1 \ benchmark_f4_p1_q4 benchmark_f1_p2_q2 benchmark_f1_p3_q4 \ benchmark_f2_p2_q2 benchmark_f2_p3_q4 benchmark_f3_p2_q2 \ benchmark_f4_p2_q1 - -all-benchmarks: ${ALL_EXECUTABLES} - -clean: - rm -f *.py ${CLEAN_FILES} - -.PHONY: default tractable-benchmarks all-benchmarks clean -.SECONDARY: ${INTERMEDIATES} diff --git a/laplacian_2d/laplacian_f0.tmpl b/laplacian_2d/laplacian_f0.tmpl new file mode 100644 index 0000000..6365e0a --- /dev/null +++ b/laplacian_2d/laplacian_f0.tmpl @@ -0,0 +1,6 @@ +element = FiniteElement("Lagrange", "triangle", Q_VALUE) + +v = TestFunction(element) +u = TrialFunction(element) + +a = dot(grad(v), grad(u))*dx diff --git a/laplacian_2d/laplacian_f1.tmpl b/laplacian_2d/laplacian_f1.tmpl new file mode 100644 index 0000000..2430eae --- /dev/null +++ b/laplacian_2d/laplacian_f1.tmpl @@ -0,0 +1,9 @@ +element = FiniteElement("Lagrange", "triangle", Q_VALUE) +element_f = FiniteElement("Lagrange", "triangle", P_VALUE) + +v = TestFunction(element) +u = TrialFunction(element) + +f = Coefficient(element_f) + +a = f*dot(grad(v), grad(u))*dx diff --git a/laplacian_2d/laplacian_f2.tmpl b/laplacian_2d/laplacian_f2.tmpl new file mode 100644 index 0000000..3daaa36 --- /dev/null +++ b/laplacian_2d/laplacian_f2.tmpl @@ -0,0 +1,10 @@ +element = FiniteElement("Lagrange", "triangle", Q_VALUE) +element_f = FiniteElement("Lagrange", "triangle", P_VALUE) + +v = TestFunction(element) +u = TrialFunction(element) + +f = Coefficient(element_f) +g = Coefficient(element_f) + +a = f*g*dot(grad(v), grad(u))*dx diff --git a/laplacian_2d/laplacian_f3.tmpl b/laplacian_2d/laplacian_f3.tmpl new file mode 100644 index 0000000..f376aaa --- /dev/null +++ b/laplacian_2d/laplacian_f3.tmpl @@ -0,0 +1,11 @@ +element = FiniteElement("Lagrange", "triangle", Q_VALUE) +element_f = FiniteElement("Lagrange", "triangle", P_VALUE) + +v = TestFunction(element) +u = TrialFunction(element) + +f = Coefficient(element_f) +g = Coefficient(element_f) +h = Coefficient(element_f) + +a = f*g*h*dot(grad(v), grad(u))*dx diff --git a/laplacian_2d/laplacian_f4.tmpl b/laplacian_2d/laplacian_f4.tmpl new file mode 100644 index 0000000..f5994eb --- /dev/null +++ b/laplacian_2d/laplacian_f4.tmpl @@ -0,0 +1,12 @@ +element = FiniteElement("Lagrange", "triangle", Q_VALUE) +element_f = FiniteElement("Lagrange", "triangle", P_VALUE) + +v = TestFunction(element) +u = TrialFunction(element) + +f = Coefficient(element_f) +g = Coefficient(element_f) +h = Coefficient(element_f) +i = Coefficient(element_f) + +a = f*g*h*i*dot(grad(v), grad(u))*dx diff --git a/mass_matrix_2d/Makefile b/mass_matrix_2d/Makefile new file mode 100644 index 0000000..98901c7 --- /dev/null +++ b/mass_matrix_2d/Makefile @@ -0,0 +1,16 @@ +MAT_TYPE="mass_matrix" +include ../benchmark.mk + +tractable-benchmarks: benchmark_f1_p1_q1 benchmark_f1_p2_q3 \ +benchmark_f2_p1_q1 benchmark_f2_p2_q3 benchmark_f3_p1_q1 \ +benchmark_f3_p2_q3 benchmark_f1_p1_q2 benchmark_f1_p2_q4 \ +benchmark_f2_p1_q2 benchmark_f2_p2_q4 benchmark_f3_p1_q2 \ +benchmark_f4_p1_q1 benchmark_f1_p1_q3 benchmark_f1_p3_q1 \ +benchmark_f2_p1_q3 benchmark_f2_p3_q1 benchmark_f3_p1_q3 \ +benchmark_f4_p1_q2 benchmark_f1_p1_q4 benchmark_f1_p3_q2 \ +benchmark_f2_p1_q4 benchmark_f2_p3_q2 benchmark_f3_p1_q4 \ +benchmark_f4_p1_q3 benchmark_f1_p2_q1 benchmark_f1_p3_q3 \ +benchmark_f2_p2_q1 benchmark_f2_p3_q3 benchmark_f3_p2_q1 \ +benchmark_f4_p1_q4 benchmark_f1_p2_q2 benchmark_f1_p3_q4 \ +benchmark_f2_p2_q2 benchmark_f2_p3_q4 benchmark_f3_p2_q2 \ +benchmark_f4_p2_q1 diff --git a/mass_matrix_2d/count_instructions b/scripts/count_instructions similarity index 100% rename from mass_matrix_2d/count_instructions rename to scripts/count_instructions diff --git a/mass_matrix_2d/make_table_norms b/scripts/make_table_norms similarity index 93% rename from mass_matrix_2d/make_table_norms rename to scripts/make_table_norms index 7ce3325..f51e975 100755 --- a/mass_matrix_2d/make_table_norms +++ b/scripts/make_table_norms @@ -2,6 +2,7 @@ set -e BENCHMARK_NAME="benchmark" +NAME="$(basename $(pwd) | sed s/_//g | sed s/2/two/g)" trap "rm -f ${TIME_FILE}" EXIT HUP INT QUIT TERM NORM_PREFIX="L2-norm between quadrature and" @@ -10,7 +11,7 @@ NP=3 NQ=4 NF=4 -echo '\newcommand{\massmatrixtwodresultsnorms}{' +echo "\\newcommand{\\${NAME}resultsnorms}{" echo -n '\begin{tabularx}{1.1\textwidth}{c|' for F in $(seq 1 ${NF}); do echo -n 'XX|' diff --git a/mass_matrix_2d/make_table_performance b/scripts/make_table_performance similarity index 94% rename from mass_matrix_2d/make_table_performance rename to scripts/make_table_performance index 5fcfb30..0ff8659 100755 --- a/mass_matrix_2d/make_table_performance +++ b/scripts/make_table_performance @@ -2,6 +2,7 @@ set -e BENCHMARK_NAME="benchmark" +NAME="$(basename $(pwd) | sed s/_//g | sed s/2/two/g)" TIME_FILE="$(mktemp)" trap "rm -f ${TIME_FILE}" EXIT HUP INT QUIT TERM @@ -21,7 +22,7 @@ else COMPILER="unknown" fi -echo "\newcommand{\massmatrixtwodresults${COMPILER}flops}{" +echo "\newcommand{\\${NAME}results${COMPILER}flops}{" echo -n '\begin{tabularx}{1.1\textwidth}{c|' | tee -a ${TIME_FILE} for F in $(seq 1 ${NF}); do echo -n 'XXXX|' | tee -a ${TIME_FILE} @@ -84,6 +85,6 @@ done echo '\end{tabularx}' | tee -a ${TIME_FILE} echo "}" -echo "\newcommand{\massmatrixtwodresults${COMPILER}times}{" +echo "\newcommand{\\${NAME}results${COMPILER}times}{" cat ${TIME_FILE} echo "}" diff --git a/mass_matrix_2d/run_benchmarks b/scripts/run_benchmarks similarity index 100% rename from mass_matrix_2d/run_benchmarks rename to scripts/run_benchmarks diff --git a/mass_matrix_2d/set_scaling_mode b/scripts/set_scaling_mode similarity index 100% rename from mass_matrix_2d/set_scaling_mode rename to scripts/set_scaling_mode -- 2.47.3