/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
/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
--- /dev/null
+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}
#include <papi.h>
#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)
#include <papi.h>
#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)
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}"
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}"
${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}"
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 $@'
done
${ECHO} "ALL_EXECUTABLES = ${PROGRAMS}"
-${ECHO} "CLEAN_FILES=${CLEAN_FILES}"
-${ECHO} "INTERMEDIATES=${INTERMEDIATES}"
+${ECHO} "CLEAN_FILES = ${CLEAN_FILES}"
+${ECHO} "INTERMEDIATES = ${INTERMEDIATES}"
AC_TYPE_SIZE_T
AC_TYPE_UINT32_T
-AC_CONFIG_FILES([mass_matrix_2d/Makefile])
+AC_CONFIG_FILES([benchmark.mk])
AC_OUTPUT
-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 \
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}
--- /dev/null
+element = FiniteElement("Lagrange", "triangle", Q_VALUE)
+
+v = TestFunction(element)
+u = TrialFunction(element)
+
+a = dot(grad(v), grad(u))*dx
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
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"
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|'
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
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}
echo '\end{tabularx}' | tee -a ${TIME_FILE}
echo "}"
-echo "\newcommand{\massmatrixtwodresults${COMPILER}times}{"
+echo "\newcommand{\\${NAME}results${COMPILER}times}{"
cat ${TIME_FILE}
echo "}"