aboutsummaryrefslogtreecommitdiffhomepage
path: root/bench
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2019-01-29 11:53:47 +0100
committerGravatar Gael Guennebaud <g.gael@free.fr>2019-01-29 11:53:47 +0100
commitefe02292a6f45a664d2012ee208b41b28b65cb14 (patch)
tree4ed33c19abac69e8ad94f8eff3f412ee7f23b2ca /bench
parent8a06c699d0f8d47f4fc4f259a21574b4719792b2 (diff)
Add recent gemm related changesets and various cleanups in perf-monitoring
Diffstat (limited to 'bench')
-rw-r--r--bench/perf_monitoring/changesets.txt74
-rwxr-xr-xbench/perf_monitoring/make_plot.sh18
-rw-r--r--bench/perf_monitoring/resources/chart_footer.html14
-rwxr-xr-xbench/perf_monitoring/run.sh5
4 files changed, 68 insertions, 43 deletions
diff --git a/bench/perf_monitoring/changesets.txt b/bench/perf_monitoring/changesets.txt
index c970386c3..c6b364593 100644
--- a/bench/perf_monitoring/changesets.txt
+++ b/bench/perf_monitoring/changesets.txt
@@ -10,7 +10,7 @@
5908:f8ee3c721251 # improve packing with ptranspose
#5921:ca808bb456b0 # merge
#5927:8b1001f9e3ac
-5937:5a4ca1ad8c53 # New gebp kernel handling up to 3 packets x 4 register-level blocks
+5937:5a4ca1ad8c53 # New gebp kernel: up to 3 packets x 4 register-level blocks
#5949:f3488f4e45b2 # merge
#5969:e09031dccfd9 # Disable 3pX4 kernel on Altivec
#5992:4a429f5e0483 # merge
@@ -24,7 +24,7 @@ before-evaluators
#6726:ff2d2388e7b9 # merge default to tensors
#6742:0cbd6195e829 # merge default to tensors
#6747:853d2bafeb8f # Generalized the gebp apis
-6765:71584fd55762 # Made the blocking computation aware of the l3 cache; Also optimized the blocking parameters to take into account the number of threads used for a computation
+6765:71584fd55762 # Made the blocking computation aware of the l3 cache;<br/> Also optimized the blocking parameters to take<br/> into account the number of threads used for a computation.
6781:9cc5a931b2c6 # generalized gemv
6792:f6e1daab600a # ensured that contractions that can be reduced to a matrix vector product
#6844:039efd86b75c # merge tensor
@@ -38,50 +38,56 @@ before-evaluators
6933:52572e60b5d3 # blocking size strategy
6937:c8c042f286b2 # avoid redundant pack_rhs
6981:7e5d6f78da59 # dynamic loop swapping
-6984:45f26866c091 # rm dynamic loop swapping, adjust lhs's micro panel height to fully exploit L1 cache
-6986:a675d05b6f8f # blocking heuristic: block on the rhs in L1 if the lhs fit in L1.
-7013:f875e75f07e5 # organize a little our default cache sizes, and use a saner default L1 outside of x86 (10% faster on Nexus 5)
-7015:8aad8f35c955 # Refactor computeProductBlockingSizes to make room for the possibility of using lookup tables
+6984:45f26866c091 # rm dynamic loop swapping,<br/> adjust lhs's micro panel height to fully exploit L1 cache
+6986:a675d05b6f8f # blocking heuristic:<br/> block on the rhs in L1 if the lhs fit in L1.
+7013:f875e75f07e5 # organize a little our default cache sizes,<br/> and use a saner default L1 outside of x86 (10% faster on Nexus 5)
+7015:8aad8f35c955 # Refactor computeProductBlockingSizes to make room<br/> for the possibility of using lookup tables
7016:a58d253e8c91 # Polish lookup tables generation
-7018:9b27294a8186 # actual_panel_rows computation should always be resilient to parameters not consistent with the known L1 cache size, see comment
-7019:c758b1e2c073 # Provide a empirical lookup table for blocking sizes measured on a Nexus 5. Only for float, only for Android on ARM 32bit for now.
-7085:627e039fba68 # Bug 986: add support for coefficient-based product with 0 depth.
-7098:b6f1db9cf9ec # Bug 992: don't select a 3p GEMM path with non-vectorizable scalar types, this hits unsupported paths in symm/triangular products code
+7018:9b27294a8186 # actual_panel_rows computation should always be resilient<br/> to parameters not consistent with the known L1 cache size, see comment
+7019:c758b1e2c073 # Provide a empirical lookup table for blocking sizes measured on a Nexus 5.<br/> Only for float, only for Android on ARM 32bit for now.
+7085:627e039fba68 # Bug 986: add support for coefficient-based<br/> product with 0 depth.
+7098:b6f1db9cf9ec # Bug 992: don't select a 3p GEMM path with non-SIMD scalar types.
7591:09a8e2186610 # 3.3-alpha1
7650:b0f3c8f43025 # help clang inlining
-7708:dfc6ab9d9458 # Improve numerical accuracy in LLT and triangular solve by using true scalar divisions (instead of x * (1/y))
-#8744:74b789ada92a # Improved the matrix multiplication blocking in the case where mr is not a power of 2 (e.g on Haswell CPUs)
-8789:efcb912e4356 # Made the index type a template parameter to evaluateProductBlockingSizes. Use numext::mini and numext::maxi instead of std::min/std::max to compute blocking sizes
-8972:81d53c711775 # Don't optimize the processing of the last rows of a matrix matrix product in cases that violate the assumptions made by the optimized code path
+7708:dfc6ab9d9458 # Improve numerical accuracy in LLT and triangular solve<br/> by using true scalar divisions (instead of x * (1/y))
+#8744:74b789ada92a # Improved the matrix multiplication blocking in the case<br/> where mr is not a power of 2 (e.g on Haswell CPUs)
+8789:efcb912e4356 # Made the index type a template parameter to evaluateProductBlockingSizes.<br/> Use numext::mini and numext::maxi instead of <br/> std::min/std::max to compute blocking sizes.
+8972:81d53c711775 # Don't optimize the processing of the last rows of<br/> a matrix matrix product in cases that violate<br/> the assumptions made by the optimized code path.
8985:d935df21a082 # Remove the rotating kernel.
8988:6c2dc56e73b3 # Bug 256: enable vectorization with unaligned loads/stores.
-9148:b8b8c421e36c # Relax mixing-type constraints for binary coefficient-wise operators
+9148:b8b8c421e36c # Relax mixing-type constraints for binary coeff-wise operators
9174:d228bc282ac9 # merge
9175:abc7a3600098 # Include the cost of stores in unrolling
-9212:c90098affa7b # Fix performance regression introduced in changeset 8aad8f35c955
-9213:9f1c14e4694b # Fix performance regression in dgemm introduced by changeset 81d53c711775
+9212:c90098affa7b # Fix perf regression introduced in changeset 8aad8f35c955
+9213:9f1c14e4694b # Fix perf regression in dgemm introduced by changeset 81d53c711775
9361:69d418c06999 # 3.3-beta2
-9445:f27ff0ad77a3 # Optimize expression matching "d?=a-b*c" as "d?=a; d?=b*c;"
+9445:f27ff0ad77a3 # Optimize expression matching 'd?=a-b*c' as 'd?=a; d?=b*c;'
9583:bef509908b9d # 3.3-rc1
-9593:2f24280cf59a # Bug 1311: fix alignment logic in some cases of (scalar*small).lazyProduct(small)
-9722:040d861b88b5 # Disabled part of the matrix matrix peeling code that's incompatible with 512 bit registers
+9593:2f24280cf59a # Bug 1311: fix alignment logic in some cases<br/> of (scalar*small).lazyProduct(small)
+9722:040d861b88b5 # Disabled part of the matrix matrix peeling code<br/> that's incompatible with 512 bit registers
9792:26667be4f70b # 3.3.0
-9891:41260bdfc23b # Fix a performance regression in (mat*mat)*vec for which mat*mat was evaluated multiple times.
+9891:41260bdfc23b # Fix a performance regression in (mat*mat)*vec<br/> for which mat*mat was evaluated multiple times.
9942:b1d3eba60130 # Operators += and -= do not resize!
-9943:79bb9887afd4 # Ease compiler job to generate clean and efficient code in mat*vec
-9946:2213991340ea # Complete rewrite of column-major-matrix * vector product to deliver higher performance of modern CPU.
-9955:630471c3298c # Improve performance of row-major-dense-matrix * vector products for recent CPUs. (this is the next changeset fixing a typo)
+9943:79bb9887afd4 # Ease compiler generating clean and efficient code in mat*vec
+9946:2213991340ea # Complete rewrite of column-major-matrix * vector product<br/> to deliver higher performance of modern CPU.
+9955:630471c3298c # Improve performance of row-major-dense-matrix * vector products<br/> for recent CPUs.
9975:2eeed9de710c # Revert vec/y to vec*(1/y) in row-major TRSM
10442:e3f17da72a40 # Bug 1435: fix aliasing issue in exressions like: A = C - B*A;
-10735:6913f0cf7d06 # Adds missing EIGEN_STRONG_INLINE to support MSVC properly inlining small vector calculations
-10943:4db388d946bd # Bug 1562: optimize evaluation of small products of the form s*A*B by rewriting them as: s*(A.lazyProduct(B)) to save a costly temporary. Measured speedup from 2x to 5x.
-10961:5007ff66c9f6 # Introduce the macro ei_declare_local_nested_eval to help allocating on the stack local temporaries via alloca, and let outer-products makes a good use of it.
+10735:6913f0cf7d06 # Adds missing EIGEN_STRONG_INLINE to support MSVC<br/> properly inlining small vector calculations
+10943:4db388d946bd # Bug 1562: optimize evaluation of small products<br/> of the form s*A*B by rewriting them as: s*(A.lazyProduct(B))<br/> to save a costly temporary.<br/> Measured speedup from 2x to 5x.
+10961:5007ff66c9f6 # Introduce the macro ei_declare_local_nested_eval to<br/> help allocating on the stack local temporaries via alloca,<br/> and let outer-products makes a good use of it.
11083:30a528a984bb # Bug 1578: Improve prefetching in matrix multiplication on MIPS.
11533:71609c41e9f8 # PR 526: Speed up multiplication of small, dynamically sized matrices
-11535:6d348dc9b092 # Vectorize row-by-row gebp loop iterations on 16 packets as well
-11568:efda481cbd7a # Bug 1624: improve matrix-matrix product on ARM 64, 20% speedup
-11596:b8d3f548a9d9 # do not read buffers out of bounds
-11628:22f9cc0079bd # Implement AVX512 vectorization of std::complex<float/double>
-11638:81172653b67b # Bug 1515: disable gebp's 3pX4 micro kernel for MSVC<=19.14 because of register spilling.
-11659:b500fef42ced # Artificially increase l1-blocking size for AVX512. +10% speedup with current kernels.
-
+11545:6d348dc9b092 # Vectorize row-by-row gebp loop iterations on 16 packets as well
+11579:efda481cbd7a # Bug 1624: improve matrix-matrix product on ARM 64, 20% speedup
+11606:b8d3f548a9d9 # do not read buffers out of bounds
+11638:22f9cc0079bd # Implement AVX512 vectorization of std::complex<float/double>
+11642:9f52fde03483 # Bug 1636: fix gemm performance issue with gcc>=6 and no FMA
+11648:81172653b67b # Bug 1515: disable gebp's 3pX4 micro kernel<br/> for MSVC<=19.14 because of register spilling.
+11654:b81188e099f3 # fix EIGEN_GEBP_2PX4_SPILLING_WORKAROUND<br/> for non vectorized type, and non x86/64 target
+11664:71546f1a9f0c # enable spilling workaround on architectures with SSE/AVX
+11669:b500fef42ced # Artificially increase l1-blocking size for AVX512.<br/> +10% speedup with current kernels.
+11683:2ea2960f1c7f # Make code compile again for older compilers.
+11753:556fb4ceb654 # Bug: 1633: refactor gebp kernel and optimize for neon
+11761:cefc1ba05596 # Bug 1661: fix regression in GEBP and AVX512
+11763:1e41e70fe97b # GEBP: cleanup logic to choose between<br/> a 4 packets of 1 packet (=209bf81aa3f3+fix) \ No newline at end of file
diff --git a/bench/perf_monitoring/make_plot.sh b/bench/perf_monitoring/make_plot.sh
index ca9fa9662..65aaf66f9 100755
--- a/bench/perf_monitoring/make_plot.sh
+++ b/bench/perf_monitoring/make_plot.sh
@@ -64,8 +64,11 @@ do
i=0
while read line2
do
- if [ ! -z '$line2' ]; then
- echo '{"r":'$i',"v":'`echo $line2 | cut -f $col -d ' '`'},' >> $WHAT.html
+ if [ ! -z "$line2" ]; then
+ val=`echo $line2 | cut -s -f $col -d ' '`
+ if [ -n "$val" ]; then # skip build failures
+ echo '{"r":'$i',"v":'$val'},' >> $WHAT.html
+ fi
fi
((i++))
done < $WHAT.out
@@ -84,6 +87,17 @@ do
done < $WHAT.out
echo '];' >> $WHAT.html
+echo 'var changesets_details = [' >> $WHAT.html
+while read line2
+do
+ if [ ! -z '$line2' ]; then
+ num=`echo "$line2" | cut -f 1 -d ' '`
+ comment=`grep ":$num" changesets.txt | cut -f 2 -d '#'`
+ echo '"'"$comment"'",' >> $WHAT.html
+ fi
+done < $WHAT.out
+echo '];' >> $WHAT.html
+
echo 'var changesets_count = [' >> $WHAT.html
i=0
while read line2
diff --git a/bench/perf_monitoring/resources/chart_footer.html b/bench/perf_monitoring/resources/chart_footer.html
index 8acc69f14..e8ef0a270 100644
--- a/bench/perf_monitoring/resources/chart_footer.html
+++ b/bench/perf_monitoring/resources/chart_footer.html
@@ -14,12 +14,16 @@
.tickFormat(function(d){return changesets[d]})
.rotateLabels(-90);
- chart.y(function(datum){ return datum.v; })
- .yAxis.options({
- axisLabel: customSettings.YLABEL || 'GFlops'/*,
- tickFormat: function(val){ return d3.format('.0f')(val) + ' GFlops'; }*/
- });
+ chart.y(function(datum){ return datum.v; })
+ .yAxis.options({
+ axisLabel: customSettings.YLABEL || 'GFlops'/*,
+ tickFormat: function(val){ return d3.format('.0f')(val) + ' GFlops'; }*/
+ });
+ chart.tooltip.headerFormatter(function(d) { return changesets[d]
+ + ' <p style="font-weight:normal;text-align: left;">'
+ + changesets_details[d] + "</p>"; });
+
//chart.useInteractiveGuideline(true);
d3.select('#chart').datum(data).call(chart);
var plot = d3.select('#chart > g');
diff --git a/bench/perf_monitoring/run.sh b/bench/perf_monitoring/run.sh
index 4e8f73c7f..3022adfd1 100755
--- a/bench/perf_monitoring/run.sh
+++ b/bench/perf_monitoring/run.sh
@@ -148,9 +148,10 @@ make_backup $WORKING_DIR_PREFIX"c"$bench
cut -f1 -d"#" < changesets.txt | grep -E '[[:alnum:]]' | while read rev
do
if [ ! -z '$rev' ]; then
- echo "Testing rev $rev"
+ rev2=`echo $rev | cut -f 2 -d':'`
+ echo "Testing rev $rev, $rev2"
cd eigen_src
- hg up -C $rev > /dev/null
+ hg up -C $rev2 > /dev/null
actual_rev=`hg identify | cut -f1 -d' '`
cd ..