Commit Graph

13 Commits

Author SHA1 Message Date
yangfan 81f413b720 Optimization for custom small blas multiplication with dynamic
template parameters in C level.

- unroll for loops
- matrix access more cache coherent
- platform independant

Briefly, this commit brings 1~50% performance improvments for
most cases in small_blas_gem(m/v)_benchmark, but a small drop
for corner cases with small dimensions especially 1,2,3. Here
we list the results partially, which show decrease percentage
of executing time, compared to unoptimized version.

Platform: desktop PC (i7-7700 CPU MP8@3.60GHz + ubuntu 17.10)
(Lenovo Research Device+ Lab, <yangfan34@lenovo.com>)

Benchmark                                   Time        CPU
-----------------------------------------------------------
BM_MatrixMatrixMultiplyDynamic/1/1/1     -0.0850    -0.0851
BM_MatrixMatrixMultiplyDynamic/1/1/2     -0.1444    -0.1446
BM_MatrixMatrixMultiplyDynamic/1/1/3     -0.1934    -0.1935
BM_MatrixMatrixMultiplyDynamic/1/1/4     -0.2933    -0.2934
BM_MatrixMatrixMultiplyDynamic/1/1/8     -0.1579    -0.1580
BM_MatrixMatrixMultiplyDynamic/1/1/12    -0.1556    -0.1558
BM_MatrixMatrixMultiplyDynamic/1/1/15    -0.1598    -0.1599
BM_MatrixMatrixMultiplyDynamic/1/2/1     -0.0797    -0.0799
BM_MatrixMatrixMultiplyDynamic/1/2/2     -0.2950    -0.2951
BM_MatrixMatrixMultiplyDynamic/1/2/3     -0.1363    -0.1364
BM_MatrixMatrixMultiplyDynamic/1/2/4     -0.2435    -0.2437
BM_MatrixMatrixMultiplyDynamic/1/2/8     -0.2299    -0.2300
BM_MatrixMatrixMultiplyDynamic/1/2/12    -0.2441    -0.2442
BM_MatrixMatrixMultiplyDynamic/1/2/15    -0.1671    -0.1673
BM_MatrixMatrixMultiplyDynamic/1/3/1     -0.0774    -0.0775
BM_MatrixMatrixMultiplyDynamic/1/3/2     -0.2761    -0.2762
BM_MatrixMatrixMultiplyDynamic/1/3/3     -0.0840    -0.0841
BM_MatrixMatrixMultiplyDynamic/1/3/4     -0.2027    -0.2028
BM_MatrixMatrixMultiplyDynamic/1/3/8     -0.2481    -0.2482
BM_MatrixMatrixMultiplyDynamic/1/3/12    -0.2629    -0.2630
BM_MatrixMatrixMultiplyDynamic/1/3/15    -0.1958    -0.1959
BM_MatrixMatrixMultiplyDynamic/1/4/1     -0.1260    -0.1261
BM_MatrixMatrixMultiplyDynamic/1/4/2     -0.1834    -0.1835
BM_MatrixMatrixMultiplyDynamic/1/4/3     -0.1379    -0.1380
BM_MatrixMatrixMultiplyDynamic/1/4/4     -0.2636    -0.2637
BM_MatrixMatrixMultiplyDynamic/1/4/8     -0.2838    -0.2839
BM_MatrixMatrixMultiplyDynamic/1/4/12    -0.3320    -0.3321
BM_MatrixMatrixMultiplyDynamic/1/4/15    -0.2464    -0.2465
BM_MatrixMatrixMultiplyDynamic/1/8/1     -0.0766    -0.0767
BM_MatrixMatrixMultiplyDynamic/1/8/2     -0.1713    -0.1714
BM_MatrixMatrixMultiplyDynamic/1/8/3     -0.1158    -0.1159
BM_MatrixMatrixMultiplyDynamic/1/8/4     -0.3205    -0.3206
BM_MatrixMatrixMultiplyDynamic/1/8/8     -0.3514    -0.3515
BM_MatrixMatrixMultiplyDynamic/1/8/12    -0.3658    -0.3658
BM_MatrixMatrixMultiplyDynamic/1/8/15    -0.3187    -0.3188
BM_MatrixMatrixMultiplyDynamic/1/12/1    -0.0424    -0.0425
BM_MatrixMatrixMultiplyDynamic/1/12/2    -0.1800    -0.1800
BM_MatrixMatrixMultiplyDynamic/1/12/3    -0.1457    -0.1457
BM_MatrixMatrixMultiplyDynamic/1/12/4    -0.3768    -0.3769
BM_MatrixMatrixMultiplyDynamic/1/12/8    -0.4072    -0.4073
BM_MatrixMatrixMultiplyDynamic/1/12/12   -0.4391    -0.4392
BM_MatrixMatrixMultiplyDynamic/1/12/15   -0.3383    -0.3383
BM_MatrixMatrixMultiplyDynamic/1/15/1    -0.0442    -0.0443
BM_MatrixMatrixMultiplyDynamic/1/15/2    -0.2378    -0.2379
BM_MatrixMatrixMultiplyDynamic/1/15/3    -0.1553    -0.1554
BM_MatrixMatrixMultiplyDynamic/1/15/4    -0.3954    -0.3955
BM_MatrixMatrixMultiplyDynamic/1/15/8    -0.4334    -0.4335
BM_MatrixMatrixMultiplyDynamic/1/15/12   -0.4175    -0.4175
BM_MatrixMatrixMultiplyDynamic/1/15/15   -0.3242    -0.3243

BM_MatrixVectorMultiply/1/1              +0.1613    +0.1613
BM_MatrixVectorMultiply/1/2              +0.1715    +0.1715
BM_MatrixVectorMultiply/1/3              +0.1051    +0.1051
BM_MatrixVectorMultiply/1/4              +0.1369    +0.1369
BM_MatrixVectorMultiply/1/8              +0.1180    +0.1180
BM_MatrixVectorMultiply/1/12             +0.0869    +0.0869
BM_MatrixVectorMultiply/1/15             +0.1887    +0.1886
BM_MatrixVectorMultiply/2/1              +0.1152    +0.1152
BM_MatrixVectorMultiply/2/2              +0.1520    +0.1520
BM_MatrixVectorMultiply/2/3              +0.1867    +0.1867
BM_MatrixVectorMultiply/2/4              +0.0173    +0.0173
BM_MatrixVectorMultiply/2/8              -0.0528    -0.0528
BM_MatrixVectorMultiply/2/12             -0.0176    -0.0176
BM_MatrixVectorMultiply/2/15             -0.0753    -0.0753
BM_MatrixVectorMultiply/3/1              +0.0844    +0.0844
BM_MatrixVectorMultiply/3/2              +0.0750    +0.0750
BM_MatrixVectorMultiply/3/3              -0.0153    -0.0153
BM_MatrixVectorMultiply/3/4              +0.0060    +0.0060
BM_MatrixVectorMultiply/3/8              +0.0152    +0.0152
BM_MatrixVectorMultiply/3/12             +0.0101    +0.0101
BM_MatrixVectorMultiply/3/15             -0.0795    -0.0795
BM_MatrixVectorMultiply/4/1              -0.1425    -0.1425
BM_MatrixVectorMultiply/4/2              -0.0869    -0.0869
BM_MatrixVectorMultiply/4/3              -0.1371    -0.1371
BM_MatrixVectorMultiply/4/4              -0.0088    -0.0088
BM_MatrixVectorMultiply/4/8              -0.1049    -0.1049
BM_MatrixVectorMultiply/4/12             -0.2566    -0.2566
BM_MatrixVectorMultiply/4/15             -0.2940    -0.2940
BM_MatrixVectorMultiply/6/1              -0.1798    -0.1798
BM_MatrixVectorMultiply/6/2              -0.0627    -0.0627
BM_MatrixVectorMultiply/6/3              -0.0389    -0.0389
BM_MatrixVectorMultiply/6/4              -0.1088    -0.1088
BM_MatrixVectorMultiply/6/8              -0.1815    -0.1815
BM_MatrixVectorMultiply/6/12             -0.1650    -0.1650
BM_MatrixVectorMultiply/6/15             -0.1855    -0.1855
BM_MatrixVectorMultiply/8/1              -0.1630    -0.1630
BM_MatrixVectorMultiply/8/2              -0.1248    -0.1248
BM_MatrixVectorMultiply/8/3              -0.1911    -0.1911
BM_MatrixVectorMultiply/8/4              -0.1996    -0.1996
BM_MatrixVectorMultiply/8/8              -0.2590    -0.2590
BM_MatrixVectorMultiply/8/12             -0.3266    -0.3266
BM_MatrixVectorMultiply/8/15             -0.3999    -0.3999
BM_MatrixTransposeVectorMultiply/1/1     -0.0234    -0.0234
BM_MatrixTransposeVectorMultiply/1/2     -0.0243    -0.0243
BM_MatrixTransposeVectorMultiply/1/3     -0.1324    -0.1324
BM_MatrixTransposeVectorMultiply/1/4     -0.2635    -0.2635
BM_MatrixTransposeVectorMultiply/1/8     -0.2461    -0.2461
BM_MatrixTransposeVectorMultiply/1/12    -0.2702    -0.2702
BM_MatrixTransposeVectorMultiply/1/15    -0.2538    -0.2538
BM_MatrixTransposeVectorMultiply/2/1     -0.0170    -0.0170
BM_MatrixTransposeVectorMultiply/2/2     -0.1475    -0.1475
BM_MatrixTransposeVectorMultiply/2/3     -0.1082    -0.1082
BM_MatrixTransposeVectorMultiply/2/4     -0.2594    -0.2595
BM_MatrixTransposeVectorMultiply/2/8     -0.2710    -0.2710
BM_MatrixTransposeVectorMultiply/2/12    -0.3053    -0.3053
BM_MatrixTransposeVectorMultiply/2/15    -0.2706    -0.2706
BM_MatrixTransposeVectorMultiply/3/1     -0.0096    -0.0096
BM_MatrixTransposeVectorMultiply/3/2     -0.2885    -0.2886
BM_MatrixTransposeVectorMultiply/3/3     -0.0790    -0.0790
BM_MatrixTransposeVectorMultiply/3/4     -0.2329    -0.2330
BM_MatrixTransposeVectorMultiply/3/8     -0.2742    -0.2742
BM_MatrixTransposeVectorMultiply/3/12    -0.3177    -0.3177
BM_MatrixTransposeVectorMultiply/3/15    -0.2610    -0.2610
BM_MatrixTransposeVectorMultiply/4/1     -0.0024    -0.0024
BM_MatrixTransposeVectorMultiply/4/2     -0.1578    -0.1578
BM_MatrixTransposeVectorMultiply/4/3     -0.0918    -0.0918
BM_MatrixTransposeVectorMultiply/4/4     -0.2570    -0.2570
BM_MatrixTransposeVectorMultiply/4/8     -0.3064    -0.3064
BM_MatrixTransposeVectorMultiply/4/12    -0.3316    -0.3316
BM_MatrixTransposeVectorMultiply/4/15    -0.2794    -0.2794
BM_MatrixTransposeVectorMultiply/6/1     -0.0484    -0.0484
BM_MatrixTransposeVectorMultiply/6/2     -0.1102    -0.1102
BM_MatrixTransposeVectorMultiply/6/3     -0.1188    -0.1188
BM_MatrixTransposeVectorMultiply/6/4     -0.2967    -0.2967
BM_MatrixTransposeVectorMultiply/6/8     -0.3190    -0.3190
BM_MatrixTransposeVectorMultiply/6/12    -0.3441    -0.3441
BM_MatrixTransposeVectorMultiply/6/15    -0.2723    -0.2723
BM_MatrixTransposeVectorMultiply/8/1     -0.0397    -0.0397
BM_MatrixTransposeVectorMultiply/8/2     -0.1453    -0.1453
BM_MatrixTransposeVectorMultiply/8/3     -0.1337    -0.1337
BM_MatrixTransposeVectorMultiply/8/4     -0.3084    -0.3084
BM_MatrixTransposeVectorMultiply/8/8     -0.3444    -0.3444
BM_MatrixTransposeVectorMultiply/8/12    -0.3717    -0.3717
BM_MatrixTransposeVectorMultiply/8/15    -0.3440    -0.3440

Change-Id: I17de05bf94699a07eea880b92a6d08daf1f038bb
2018-04-10 14:42:23 +08:00
Sameer Agarwal df4de10ace Revert "Optimization for custom small blas multiplication with dynamic"
This reverts commit 68cc71ce5d.

Reason for revert: Breaks a number of tests.

Change-Id: I543eaf2103e9903e9026a1fcc2c0bf517d971190
2018-04-08 17:56:16 +00:00
yangfan 68cc71ce5d Optimization for custom small blas multiplication with dynamic
template parameters in C level.

- unroll for loops
- matrix access more cache coherent
- platform independant

Briefly, this commit brings 1~50% performance improvments for
most cases in small_blas_gem(m/v)_benchmark, but a small drop
for corner cases with small dimensions especially 1,2,3. Here
we list the results partially, which show decrease percentage
of executing time, compared to unoptimized version.

Platform: desktop PC (i7-7700 CPU MP8@3.60GHz + ubuntu 17.10)
(Lenovo Research Device+ Lab, <yangfan34@lenovo.com>)

Benchmark                                   Time        CPU
-----------------------------------------------------------
BM_MatrixMatrixMultiplyDynamic/2/2/2     -0.1082    -0.1083
BM_MatrixMatrixMultiplyDynamic/2/2/15    -0.1270    -0.1270
BM_MatrixMatrixMultiplyDynamic/2/4/2     -0.1433    -0.1433
BM_MatrixMatrixMultiplyDynamic/2/4/15    -0.2069    -0.2068
BM_MatrixMatrixMultiplyDynamic/2/6/2     -0.1446    -0.1446
BM_MatrixMatrixMultiplyDynamic/2/6/15    -0.2156    -0.2156
BM_MatrixMatrixMultiplyDynamic/2/8/2     -0.1788    -0.1788
BM_MatrixMatrixMultiplyDynamic/2/8/15    -0.3316    -0.3316
BM_MatrixMatrixMultiplyDynamic/2/10/2    -0.2025    -0.2025
BM_MatrixMatrixMultiplyDynamic/2/10/15   -0.3444    -0.3444
BM_MatrixMatrixMultiplyDynamic/2/12/2    -0.0515    -0.0515
BM_MatrixMatrixMultiplyDynamic/2/12/15   -0.3733    -0.3733
BM_MatrixMatrixMultiplyDynamic/2/15/2    -0.2784    -0.2784
BM_MatrixMatrixMultiplyDynamic/2/15/15   -0.3704    -0.3704
BM_MatrixMatrixMultiplyDynamic/4/2/2     -0.1839    -0.1839
BM_MatrixMatrixMultiplyDynamic/4/2/15    -0.1922    -0.1922
BM_MatrixMatrixMultiplyDynamic/4/4/2     -0.2248    -0.2248
BM_MatrixMatrixMultiplyDynamic/4/4/15    -0.3132    -0.3132
BM_MatrixMatrixMultiplyDynamic/4/6/2     -0.2311    -0.2311
BM_MatrixMatrixMultiplyDynamic/4/6/15    -0.3239    -0.3239
BM_MatrixMatrixMultiplyDynamic/4/8/2     -0.0574    -0.0574
BM_MatrixMatrixMultiplyDynamic/4/8/15    -0.4173    -0.4173
BM_MatrixMatrixMultiplyDynamic/4/10/2    -0.2861    -0.2861
BM_MatrixMatrixMultiplyDynamic/4/10/15   -0.4065    -0.4064
BM_MatrixMatrixMultiplyDynamic/4/12/2    -0.2976    -0.2975
BM_MatrixMatrixMultiplyDynamic/4/12/15   -0.4218    -0.4218
BM_MatrixMatrixMultiplyDynamic/4/15/2    -0.3116    -0.3116
BM_MatrixMatrixMultiplyDynamic/4/15/15   -0.4242    -0.4241
BM_MatrixMatrixMultiplyDynamic/8/12/2    -0.3675    -0.3674
BM_MatrixMatrixMultiplyDynamic/8/12/4    -0.5055    -0.5055
BM_MatrixMatrixMultiplyDynamic/8/12/6    -0.4302    -0.4302
BM_MatrixMatrixMultiplyDynamic/8/12/8    -0.4854    -0.4854
BM_MatrixMatrixMultiplyDynamic/8/12/10   -0.4882    -0.4882
BM_MatrixMatrixMultiplyDynamic/8/12/12   -0.5209    -0.5209
BM_MatrixMatrixMultiplyDynamic/8/12/15   -0.4558    -0.4558
BM_MatrixMatrixMultiplyDynamic/8/15/2    -0.2319    -0.2319
BM_MatrixMatrixMultiplyDynamic/8/15/4    -0.5105    -0.5105
BM_MatrixMatrixMultiplyDynamic/8/15/6    -0.4477    -0.4477
BM_MatrixMatrixMultiplyDynamic/8/15/8    -0.5479    -0.5479
BM_MatrixMatrixMultiplyDynamic/8/15/10   -0.4843    -0.4843
BM_MatrixMatrixMultiplyDynamic/8/15/12   -0.5212    -0.5212
BM_MatrixMatrixMultiplyDynamic/8/15/15   -0.4459    -0.4459

BM_MatrixVectorMultiply/1/1              +0.0978    +0.0978
BM_MatrixVectorMultiply/1/2              +0.0551    +0.0551
BM_MatrixVectorMultiply/1/3              -0.0019    -0.0020
BM_MatrixVectorMultiply/1/4              +0.0563    +0.0562
BM_MatrixVectorMultiply/1/6              +0.1379    +0.1379
BM_MatrixVectorMultiply/1/7              +0.1090    +0.1090
BM_MatrixVectorMultiply/1/12             +0.0901    +0.0901
BM_MatrixVectorMultiply/1/16             +0.0493    +0.0493
BM_MatrixVectorMultiply/1/20             +0.2255    +0.2255
BM_MatrixVectorMultiply/2/1              +0.1261    +0.1261
BM_MatrixVectorMultiply/2/2              +0.2328    +0.2328
BM_MatrixVectorMultiply/2/3              +0.1404    +0.1403
BM_MatrixVectorMultiply/2/4              +0.0257    +0.0256
BM_MatrixVectorMultiply/2/6              -0.1691    -0.1691
BM_MatrixVectorMultiply/2/7              -0.2619    -0.2619
BM_MatrixVectorMultiply/2/12             -0.4261    -0.4261
BM_MatrixVectorMultiply/2/16             -0.5387    -0.5387
BM_MatrixVectorMultiply/2/20             -0.6171    -0.6171
BM_MatrixVectorMultiply/3/1              +0.1664    +0.1664
BM_MatrixVectorMultiply/3/2              +0.0848    +0.0848
BM_MatrixVectorMultiply/3/3              -0.0044    -0.0044
BM_MatrixVectorMultiply/3/4              -0.0683    -0.0684
BM_MatrixVectorMultiply/3/6              -0.1652    -0.1652
BM_MatrixVectorMultiply/3/7              -0.1633    -0.1633
BM_MatrixVectorMultiply/3/12             -0.1921    -0.1921
BM_MatrixVectorMultiply/3/16             -0.3659    -0.3659
BM_MatrixVectorMultiply/3/20             -0.4137    -0.4137
BM_MatrixVectorMultiply/4/1              -0.0577    -0.0577
BM_MatrixVectorMultiply/4/2              -0.1337    -0.1338
BM_MatrixVectorMultiply/4/3              -0.1443    -0.1443
BM_MatrixVectorMultiply/4/4              +0.0013    +0.0013
BM_MatrixVectorMultiply/4/6              -0.1071    -0.1071
BM_MatrixVectorMultiply/4/7              -0.1396    -0.1397
BM_MatrixVectorMultiply/4/12             -0.2792    -0.2792
BM_MatrixVectorMultiply/4/16             -0.4485    -0.4486
BM_MatrixVectorMultiply/4/20             -0.3588    -0.3588

Change-Id: I64a8cf11391e3d06341a2b8764cd1b4f1b8a23f1
2018-04-08 14:23:10 +00:00
Sameer Agarwal 8c81149e4d Revert changes to MatrixTransposeMatrixMultiply.
This change while algebraically equivalent was causing non-trivial
changes in the numbers being reported by ceres and in some cases
they got worse.

Also fix a small header include in parallel_for_test.cc which
was discovered as part of testing this patch.

Change-Id: I8c8d61538819f0b25af6059fa75ad068fc22f5e4
2018-02-28 19:47:52 -08:00
Sameer Agarwal 973d30dffa Revert "Improve the performance of MatrixTransposeVector Multiply."
This reverts commit 6c835f81a7.

This CL introduced a subtle cancellation error which is causing
some application tests to fail, and is therefore being reverted.

Change-Id: Iaaa8f13a18f0a805b0e70a25ccd1e97efb21f330
2018-02-27 14:40:45 +00:00
Sameer Agarwal f217ccfb69 Use MatrixTransposeMatrix multiply from small_blas.h
Prior to this Cheng Wang had to work the MatrixTransposeMatrixMultiply
function in inner_product_computer because of its lagging performance.

Now that the implementation of MatrixTransposeMatrixMultiply
has been updated to match the implementation in inner_product_computer
this CL removes the redundancy.

This CL also includes a fix to MatrixTransposeMatrixMultiply
which was missed in the earlier refactoring, because the test
coverage for small_blas is broken. The tests for InnerProductComputer
caught the problem.

Change-Id: Ia8890010da058c2d9fe738dc77f0be34af5618ab
2018-02-25 20:53:10 -08:00
Sameer Agarwal 656f9efbd3 Improve the performance of MatrixTransposeMatrix multiply.
Compute A'B as rank-1 sums of outer products of the rows of
A and B. This is more cache coherent.

Benchmark                                                 Time             CPU      Time Old      Time New       CPU Old       CPU New
--------------------------------------------------------------------------------------------------------------------------------------
BM_MatrixMatrixMultiplyDynamic/2/2/2                   +0.0031         +0.0033            27            27            27            27
BM_MatrixMatrixMultiplyDynamic/2/2/4                   +0.0383         +0.0380            41            42            41            42
BM_MatrixMatrixMultiplyDynamic/2/2/6                   +0.0001         +0.0019            58            58            57            58
BM_MatrixMatrixMultiplyDynamic/2/2/8                   +0.0169         +0.0169            70            71            70            71
BM_MatrixMatrixMultiplyDynamic/2/2/10                  +0.0162         +0.0161            83            85            83            85
BM_MatrixMatrixMultiplyDynamic/2/2/12                  -0.0049         -0.0048            93            93            93            93
BM_MatrixMatrixMultiplyDynamic/2/2/15                  +0.0131         +0.0129           114           115           114           115
BM_MatrixMatrixMultiplyDynamic/2/4/2                   +0.0494         +0.0489            32            34            32            34
BM_MatrixMatrixMultiplyDynamic/2/4/4                   +0.0121         +0.0121            51            52            51            52
BM_MatrixMatrixMultiplyDynamic/2/4/6                   +0.0134         +0.0138            70            71            70            71
BM_MatrixMatrixMultiplyDynamic/2/4/8                   +0.0006         +0.0005            90            90            90            90
BM_MatrixMatrixMultiplyDynamic/2/4/10                  +0.0248         +0.0248           107           110           107           110
BM_MatrixMatrixMultiplyDynamic/2/4/12                  -0.0239         -0.0234           125           122           125           122
BM_MatrixMatrixMultiplyDynamic/2/4/15                  +0.0611         +0.0605           155           164           155           164
BM_MatrixMatrixMultiplyDynamic/2/6/2                   -0.0017         -0.0017            39            39            39            39
BM_MatrixMatrixMultiplyDynamic/2/6/4                   +0.0139         +0.0147            59            60            59            60
BM_MatrixMatrixMultiplyDynamic/2/6/6                   -0.1062         -0.1003            89            80            89            80
BM_MatrixMatrixMultiplyDynamic/2/6/8                   -0.0339         -0.0344           116           112           115           111
BM_MatrixMatrixMultiplyDynamic/2/6/10                  +0.0568         +0.0455           142           150           141           148
BM_MatrixMatrixMultiplyDynamic/2/6/12                  -0.0073         -0.0062           155           154           155           154
BM_MatrixMatrixMultiplyDynamic/2/6/15                  +0.0219         +0.0215           187           191           187           191
BM_MatrixMatrixMultiplyDynamic/2/8/2                   -0.0165         -0.0160            43            42            43            42
BM_MatrixMatrixMultiplyDynamic/2/8/4                   -0.0247         -0.0245            71            69            70            69
BM_MatrixMatrixMultiplyDynamic/2/8/6                   -0.0642         -0.0614           104            98           104            98
BM_MatrixMatrixMultiplyDynamic/2/8/8                   -0.0607         -0.0599           133           125           133           125
BM_MatrixMatrixMultiplyDynamic/2/8/10                  -0.0523         -0.0510           166           157           166           157
BM_MatrixMatrixMultiplyDynamic/2/8/12                  -0.0381         -0.0376           189           182           189           182
BM_MatrixMatrixMultiplyDynamic/2/8/15                  -0.0725         -0.0716           243           226           243           225
BM_MatrixMatrixMultiplyDynamic/2/10/2                  -0.0421         -0.0416            50            48            50            48
BM_MatrixMatrixMultiplyDynamic/2/10/4                  -0.0558         -0.0549            83            78            83            78
BM_MatrixMatrixMultiplyDynamic/2/10/6                  -0.0527         -0.0518           115           109           115           109
BM_MatrixMatrixMultiplyDynamic/2/10/8                  -0.0421         -0.0413           150           144           150           144
BM_MatrixMatrixMultiplyDynamic/2/10/10                 -0.0606         -0.0601           202           190           202           190
BM_MatrixMatrixMultiplyDynamic/2/10/12                 -0.0409         -0.0406           224           215           224           215
BM_MatrixMatrixMultiplyDynamic/2/10/15                 -0.0308         -0.0302           277           268           277           268
BM_MatrixMatrixMultiplyDynamic/2/12/2                  -0.0059         -0.0058            53            52            53            52
BM_MatrixMatrixMultiplyDynamic/2/12/4                  +0.0019         +0.0023            87            87            87            87
BM_MatrixMatrixMultiplyDynamic/2/12/6                  -0.0032         -0.0025           126           125           126           125
BM_MatrixMatrixMultiplyDynamic/2/12/8                  -0.0039         -0.0038           159           158           159           158
BM_MatrixMatrixMultiplyDynamic/2/12/10                 -0.0175         -0.0171           205           201           205           201
BM_MatrixMatrixMultiplyDynamic/2/12/12                 -0.0643         -0.0633           295           276           294           276
BM_MatrixMatrixMultiplyDynamic/2/12/15                 -0.0215         -0.0201           328           321           328           321
BM_MatrixMatrixMultiplyDynamic/2/15/2                  +0.0092         +0.0103            58            58            58            58
BM_MatrixMatrixMultiplyDynamic/2/15/4                  +0.0762         +0.0765            98           105            98           105
BM_MatrixMatrixMultiplyDynamic/2/15/6                  -0.0155         -0.0172           138           136           138           136
BM_MatrixMatrixMultiplyDynamic/2/15/8                  +0.0674         +0.0658           180           192           180           191
BM_MatrixMatrixMultiplyDynamic/2/15/10                 +0.0254         +0.0255           236           242           236           242
BM_MatrixMatrixMultiplyDynamic/2/15/12                 -0.0383         -0.0378           289           278           289           278
BM_MatrixMatrixMultiplyDynamic/2/15/15                 -0.0313         -0.0308           407           394           406           394
BM_MatrixMatrixMultiplyDynamic/4/2/2                   +0.0286         +0.0286            42            43            42            43
BM_MatrixMatrixMultiplyDynamic/4/2/4                   -0.0455         -0.0439            71            68            71            68
BM_MatrixMatrixMultiplyDynamic/4/2/6                   +0.0221         +0.0229            93            95            93            95
BM_MatrixMatrixMultiplyDynamic/4/2/8                   -0.0226         -0.0225           120           118           120           118
BM_MatrixMatrixMultiplyDynamic/4/2/10                  -0.1153         -0.1130           158           140           158           140
BM_MatrixMatrixMultiplyDynamic/4/2/12                  -0.0145         -0.0143           164           162           164           162
BM_MatrixMatrixMultiplyDynamic/4/2/15                  -0.0396         -0.0393           205           197           205           197
BM_MatrixMatrixMultiplyDynamic/4/4/2                   -0.0696         -0.0682            57            53            57            53
BM_MatrixMatrixMultiplyDynamic/4/4/4                   -0.0233         -0.0231            91            89            91            89
BM_MatrixMatrixMultiplyDynamic/4/4/6                   -0.0711         -0.0702           130           121           130           121
BM_MatrixMatrixMultiplyDynamic/4/4/8                   -0.1180         -0.1113           178           157           176           157
BM_MatrixMatrixMultiplyDynamic/4/4/10                  -0.0301         -0.0282           194           188           194           188
BM_MatrixMatrixMultiplyDynamic/4/4/12                  -0.1156         -0.1137           251           222           251           222
BM_MatrixMatrixMultiplyDynamic/4/4/15                  -0.0182         -0.0179           307           302           307           301
BM_MatrixMatrixMultiplyDynamic/4/6/2                   -0.0228         -0.0220            64            63            64            63
BM_MatrixMatrixMultiplyDynamic/4/6/4                   +0.0048         +0.0045           106           107           106           107
BM_MatrixMatrixMultiplyDynamic/4/6/6                   -0.0131         -0.0126           155           153           155           153
BM_MatrixMatrixMultiplyDynamic/4/6/8                   -0.0526         -0.0502           211           200           210           200
BM_MatrixMatrixMultiplyDynamic/4/6/10                  -0.0995         -0.0975           274           247           274           247
BM_MatrixMatrixMultiplyDynamic/4/6/12                  -0.0436         -0.0430           297           284           297           284
BM_MatrixMatrixMultiplyDynamic/4/6/15                  +0.0042         +0.0050           344           345           343           345
BM_MatrixMatrixMultiplyDynamic/4/8/2                   -0.0283         -0.0279            74            72            74            72
BM_MatrixMatrixMultiplyDynamic/4/8/4                   -0.0282         -0.0277           125           122           125           122
BM_MatrixMatrixMultiplyDynamic/4/8/6                   -0.0756         -0.0693           185           171           184           171
BM_MatrixMatrixMultiplyDynamic/4/8/8                   -0.0510         -0.0444           267           253           265           253
BM_MatrixMatrixMultiplyDynamic/4/8/10                  -0.0512         -0.0460           301           285           299           285
BM_MatrixMatrixMultiplyDynamic/4/8/12                  -0.0046         -0.0006           351           349           349           349
BM_MatrixMatrixMultiplyDynamic/4/8/15                  -0.0795         -0.0785           452           416           451           416
BM_MatrixMatrixMultiplyDynamic/4/10/2                  -0.0415         -0.0406            85            81            85            81
BM_MatrixMatrixMultiplyDynamic/4/10/4                  -0.0118         -0.0118           143           141           143           141
BM_MatrixMatrixMultiplyDynamic/4/10/6                  -0.0484         -0.0478           217           206           216           206
BM_MatrixMatrixMultiplyDynamic/4/10/8                  -0.0373         -0.0372           280           269           280           269
BM_MatrixMatrixMultiplyDynamic/4/10/10                 +0.0083         +0.0083           350           353           350           353
BM_MatrixMatrixMultiplyDynamic/4/10/12                 -0.0364         -0.0365           436           420           436           420
BM_MatrixMatrixMultiplyDynamic/4/10/15                 -0.0221         -0.0210           513           502           512           502
BM_MatrixMatrixMultiplyDynamic/4/12/2                  -0.0569         -0.0565            94            89            94            89
BM_MatrixMatrixMultiplyDynamic/4/12/4                  -0.0343         -0.0338           162           157           162           157
BM_MatrixMatrixMultiplyDynamic/4/12/6                  +0.0197         +0.0198           227           232           227           231
BM_MatrixMatrixMultiplyDynamic/4/12/8                  -0.0390         -0.0388           310           298           310           298
BM_MatrixMatrixMultiplyDynamic/4/12/10                 -0.0088         -0.0085           389           386           389           386
BM_MatrixMatrixMultiplyDynamic/4/12/12                 +0.0524         +0.0505           545           574           545           572
BM_MatrixMatrixMultiplyDynamic/4/12/15                 +0.0801         +0.0764           597           645           597           642
BM_MatrixMatrixMultiplyDynamic/4/15/2                  -0.0024         -0.0026            99            99            99            99
BM_MatrixMatrixMultiplyDynamic/4/15/4                  -0.0289         -0.0270           187           181           186           181
BM_MatrixMatrixMultiplyDynamic/4/15/6                  -0.0264         -0.0261           263           256           263           256
BM_MatrixMatrixMultiplyDynamic/4/15/8                  -0.0344         -0.0334           349           337           348           337
BM_MatrixMatrixMultiplyDynamic/4/15/10                 -0.0189         -0.0191           454           446           454           445
BM_MatrixMatrixMultiplyDynamic/4/15/12                 -0.0483         -0.0470           524           499           523           498
BM_MatrixMatrixMultiplyDynamic/4/15/15                 -0.1084         -0.1070           840           749           838           748
BM_MatrixMatrixMultiplyDynamic/6/2/2                   -0.0574         -0.0561            59            56            59            56
BM_MatrixMatrixMultiplyDynamic/6/2/4                   -0.0727         -0.0721            98            91            98            91
BM_MatrixMatrixMultiplyDynamic/6/2/6                   -0.0292         -0.0283           133           129           133           129
BM_MatrixMatrixMultiplyDynamic/6/2/8                   -0.0283         -0.0278           167           162           167           162
BM_MatrixMatrixMultiplyDynamic/6/2/10                  -0.0482         -0.0476           216           206           216           206
BM_MatrixMatrixMultiplyDynamic/6/2/12                  -0.0117         -0.0115           243           240           243           240
BM_MatrixMatrixMultiplyDynamic/6/2/15                  -0.0234         -0.0225           299           292           299           292
BM_MatrixMatrixMultiplyDynamic/6/4/2                   -0.0950         -0.0898            79            72            79            72
BM_MatrixMatrixMultiplyDynamic/6/4/4                   -0.0300         -0.0298           130           127           130           127
BM_MatrixMatrixMultiplyDynamic/6/4/6                   -0.0379         -0.0376           175           169           175           169
BM_MatrixMatrixMultiplyDynamic/6/4/8                   -0.0340         -0.0319           236           228           236           228
BM_MatrixMatrixMultiplyDynamic/6/4/10                  -0.0498         -0.0490           289           275           289           275
BM_MatrixMatrixMultiplyDynamic/6/4/12                  +0.0134         +0.0134           325           330           325           330
BM_MatrixMatrixMultiplyDynamic/6/4/15                  -0.0836         -0.0794           469           429           466           429
BM_MatrixMatrixMultiplyDynamic/6/6/2                   -0.0614         -0.0563            91            86            91            86
BM_MatrixMatrixMultiplyDynamic/6/6/4                   -0.0249         -0.0239           153           149           152           149
BM_MatrixMatrixMultiplyDynamic/6/6/6                   -0.0442         -0.0438           235           224           234           224
BM_MatrixMatrixMultiplyDynamic/6/6/8                   -0.0127         -0.0083           296           292           295           292
BM_MatrixMatrixMultiplyDynamic/6/6/10                  +0.0305         +0.0302           360           371           360           371
BM_MatrixMatrixMultiplyDynamic/6/6/12                  -0.0479         -0.0463           434           413           433           413
BM_MatrixMatrixMultiplyDynamic/6/6/15                  -0.0774         -0.0742           542           500           540           500
BM_MatrixMatrixMultiplyDynamic/6/8/2                   -0.0617         -0.0611           106            99           106            99
BM_MatrixMatrixMultiplyDynamic/6/8/4                   -0.1153         -0.1147           202           179           202           179
BM_MatrixMatrixMultiplyDynamic/6/8/6                   -0.0591         -0.0589           270           254           270           254
BM_MatrixMatrixMultiplyDynamic/6/8/8                   -0.0677         -0.0671           381           355           381           355
BM_MatrixMatrixMultiplyDynamic/6/8/10                  -0.0771         -0.0757           451           416           450           416
BM_MatrixMatrixMultiplyDynamic/6/8/12                  -0.0520         -0.0519           522           495           522           495
BM_MatrixMatrixMultiplyDynamic/6/8/15                  -0.0386         -0.0386           639           614           638           614
BM_MatrixMatrixMultiplyDynamic/6/10/2                  -0.0764         -0.0756           121           111           120           111
BM_MatrixMatrixMultiplyDynamic/6/10/4                  -0.0847         -0.0777           224           205           222           205
BM_MatrixMatrixMultiplyDynamic/6/10/6                  -0.0762         -0.0748           320           295           319           295
BM_MatrixMatrixMultiplyDynamic/6/10/8                  -0.0160         -0.0164           413           407           413           406
BM_MatrixMatrixMultiplyDynamic/6/10/10                 +0.0438         +0.0429           526           549           525           548
BM_MatrixMatrixMultiplyDynamic/6/10/12                 +0.0641         +0.0615           606           645           605           643
BM_MatrixMatrixMultiplyDynamic/6/10/15                 +0.0983         +0.0965           741           814           740           812
BM_MatrixMatrixMultiplyDynamic/6/12/2                  +0.0697         +0.0663           135           144           135           144
BM_MatrixMatrixMultiplyDynamic/6/12/4                  -0.0230         -0.0240           251           245           250           244
BM_MatrixMatrixMultiplyDynamic/6/12/6                  -0.0728         -0.0703           365           338           364           338
BM_MatrixMatrixMultiplyDynamic/6/12/8                  -0.1444         -0.1402           514           440           511           440
BM_MatrixMatrixMultiplyDynamic/6/12/10                 -0.1268         -0.1216           628           548           624           548
BM_MatrixMatrixMultiplyDynamic/6/12/12                 -0.1323         -0.1250           883           766           875           766
BM_MatrixMatrixMultiplyDynamic/6/12/15                 -0.1337         -0.1304           995           862           991           862
BM_MatrixMatrixMultiplyDynamic/6/15/2                  -0.1163         -0.1140           158           140           158           140
BM_MatrixMatrixMultiplyDynamic/6/15/4                  -0.0721         -0.0689           285           265           284           265
BM_MatrixMatrixMultiplyDynamic/6/15/6                  -0.0597         -0.0582           414           389           413           389
BM_MatrixMatrixMultiplyDynamic/6/15/8                  -0.1189         -0.1173           563           496           562           496
BM_MatrixMatrixMultiplyDynamic/6/15/10                 -0.0754         -0.0737           749           693           747           692
BM_MatrixMatrixMultiplyDynamic/6/15/12                 +0.0141         +0.0153           871           883           866           879
BM_MatrixMatrixMultiplyDynamic/6/15/15                 -0.1184         -0.1152          1398          1233          1387          1228
BM_MatrixMatrixMultiplyDynamic/8/2/2                   -0.0232         -0.0242            77            75            77            75
BM_MatrixMatrixMultiplyDynamic/8/2/4                   +0.1114         +0.1085           120           133           119           132
BM_MatrixMatrixMultiplyDynamic/8/2/6                   +0.0794         +0.0760           169           183           169           182
BM_MatrixMatrixMultiplyDynamic/8/2/8                   +0.0833         +0.0780           221           239           221           238
BM_MatrixMatrixMultiplyDynamic/8/2/10                  +0.0037         +0.0037           264           265           264           265
BM_MatrixMatrixMultiplyDynamic/8/2/12                  +0.0114         +0.0115           301           304           301           304
BM_MatrixMatrixMultiplyDynamic/8/2/15                  +0.0034         +0.0030           378           380           378           380
BM_MatrixMatrixMultiplyDynamic/8/4/2                   +0.0197         +0.0198            90            91            90            91
BM_MatrixMatrixMultiplyDynamic/8/4/4                   +0.0231         +0.0230           156           160           156           160
BM_MatrixMatrixMultiplyDynamic/8/4/6                   +0.0233         +0.0235           225           230           225           230
BM_MatrixMatrixMultiplyDynamic/8/4/8                   +0.0352         +0.0349           286           296           286           296
BM_MatrixMatrixMultiplyDynamic/8/4/10                  +0.0569         +0.0551           362           382           362           382
BM_MatrixMatrixMultiplyDynamic/8/4/12                  -0.0180         -0.0181           424           416           424           416
BM_MatrixMatrixMultiplyDynamic/8/4/15                  -0.0807         -0.0763           627           576           623           576
BM_MatrixMatrixMultiplyDynamic/8/6/2                   -0.0030         -0.0029           111           111           111           111
BM_MatrixMatrixMultiplyDynamic/8/6/4                   +0.0053         +0.0051           198           199           198           199
BM_MatrixMatrixMultiplyDynamic/8/6/6                   -0.1261         -0.1233           330           288           329           288
BM_MatrixMatrixMultiplyDynamic/8/6/8                   -0.0760         -0.0755           398           368           398           368
BM_MatrixMatrixMultiplyDynamic/8/6/10                  -0.0497         -0.0487           505           480           505           480
BM_MatrixMatrixMultiplyDynamic/8/6/12                  +0.0090         +0.0091           529           534           529           534
BM_MatrixMatrixMultiplyDynamic/8/6/15                  -0.0778         -0.0757           704           649           702           649
BM_MatrixMatrixMultiplyDynamic/8/8/2                   -0.1332         -0.1305           150           130           149           130
BM_MatrixMatrixMultiplyDynamic/8/8/4                   -0.0903         -0.0878           257           234           257           234
BM_MatrixMatrixMultiplyDynamic/8/8/6                   -0.1177         -0.1165           380           335           379           335
BM_MatrixMatrixMultiplyDynamic/8/8/8                   -0.0799         -0.0786           509           468           508           468
BM_MatrixMatrixMultiplyDynamic/8/8/10                  -0.1098         -0.1057           604           538           601           537
BM_MatrixMatrixMultiplyDynamic/8/8/12                  -0.0676         -0.0662           697           650           696           650
BM_MatrixMatrixMultiplyDynamic/8/8/15                  -0.0707         -0.0696           856           796           855           796
BM_MatrixMatrixMultiplyDynamic/8/10/2                  -0.0429         -0.0417           149           142           149           142
BM_MatrixMatrixMultiplyDynamic/8/10/4                  -0.0652         -0.0640           286           267           286           267
BM_MatrixMatrixMultiplyDynamic/8/10/6                  -0.0259         -0.0253           402           392           402           392
BM_MatrixMatrixMultiplyDynamic/8/10/8                  -0.0131         -0.0129           526           520           526           519
BM_MatrixMatrixMultiplyDynamic/8/10/10                 -0.0873         -0.0865           697           636           696           636
BM_MatrixMatrixMultiplyDynamic/8/10/12                 -0.0130         -0.0127           799           788           798           788
BM_MatrixMatrixMultiplyDynamic/8/10/15                 -0.0441         -0.0438          1018           973          1018           973
BM_MatrixMatrixMultiplyDynamic/8/12/2                  -0.0384         -0.0379           172           166           172           165
BM_MatrixMatrixMultiplyDynamic/8/12/4                  -0.0321         -0.0307           307           297           307           297
BM_MatrixMatrixMultiplyDynamic/8/12/6                  -0.0394         -0.0380           458           440           458           440
BM_MatrixMatrixMultiplyDynamic/8/12/8                  -0.0529         -0.0522           608           576           607           576
BM_MatrixMatrixMultiplyDynamic/8/12/10                 -0.0566         -0.0560           747           705           747           705
BM_MatrixMatrixMultiplyDynamic/8/12/12                 -0.0007         -0.0006          1024          1024          1024          1023
BM_MatrixMatrixMultiplyDynamic/8/12/15                 -0.0422         -0.0420          1163          1114          1162          1113
BM_MatrixMatrixMultiplyDynamic/8/15/2                  -0.0241         -0.0241           197           192           197           192
BM_MatrixMatrixMultiplyDynamic/8/15/4                  -0.0515         -0.0514           352           334           352           333
BM_MatrixMatrixMultiplyDynamic/8/15/6                  -0.0192         -0.0194           506           496           506           496
BM_MatrixMatrixMultiplyDynamic/8/15/8                  -0.0338         -0.0334           674           651           674           651
BM_MatrixMatrixMultiplyDynamic/8/15/10                 -0.0556         -0.0545           922           871           921           871
BM_MatrixMatrixMultiplyDynamic/8/15/12                 -0.0473         -0.0462          1052          1002          1050          1001
BM_MatrixMatrixMultiplyDynamic/8/15/15                 -0.0522         -0.0521          1484          1406          1483          1406
BM_MatrixTransposeMatrixMultiplyDynamic/2/2/2          -0.1216         -0.1203            31            27            31            27
BM_MatrixTransposeMatrixMultiplyDynamic/2/2/4          -0.3827         -0.3818            49            30            49            30
BM_MatrixTransposeMatrixMultiplyDynamic/2/2/6          -0.3901         -0.3888            67            41            67            41
BM_MatrixTransposeMatrixMultiplyDynamic/2/2/8          -0.5469         -0.5458            86            39            86            39
BM_MatrixTransposeMatrixMultiplyDynamic/2/4/2          -0.2362         -0.2365            47            36            47            36
BM_MatrixTransposeMatrixMultiplyDynamic/2/4/4          -0.4470         -0.4469            77            43            77            43
BM_MatrixTransposeMatrixMultiplyDynamic/2/4/6          -0.4545         -0.4546           111            61           111            61
BM_MatrixTransposeMatrixMultiplyDynamic/2/4/8          -0.6093         -0.6093           142            56           142            56
BM_MatrixTransposeMatrixMultiplyDynamic/2/5/2          -0.2345         -0.2348            54            41            54            41
BM_MatrixTransposeMatrixMultiplyDynamic/2/5/4          -0.5111         -0.5107            99            48            99            48
BM_MatrixTransposeMatrixMultiplyDynamic/2/5/6          -0.4944         -0.4946           136            69           136            69
BM_MatrixTransposeMatrixMultiplyDynamic/2/5/8          -0.6354         -0.6354           171            62           171            62
BM_MatrixTransposeMatrixMultiplyDynamic/2/8/2          -0.3370         -0.3369            82            55            82            55
BM_MatrixTransposeMatrixMultiplyDynamic/2/8/4          -0.5062         -0.5064           139            69           139            69
BM_MatrixTransposeMatrixMultiplyDynamic/2/8/6          -0.5422         -0.5421           208            95           208            95
BM_MatrixTransposeMatrixMultiplyDynamic/2/8/8          -0.6903         -0.6896           294            91           294            91
BM_MatrixTransposeMatrixMultiplyDynamic/2/10/2         -0.1791         -0.1811            99            82            99            81
BM_MatrixTransposeMatrixMultiplyDynamic/2/10/4         -0.5062         -0.5061           177            88           177            88
BM_MatrixTransposeMatrixMultiplyDynamic/2/10/6         -0.5110         -0.5110           256           125           256           125
BM_MatrixTransposeMatrixMultiplyDynamic/2/10/8         -0.6632         -0.6632           334           112           333           112
BM_MatrixTransposeMatrixMultiplyDynamic/2/12/2         -0.3272         -0.3269           120            81           120            81
BM_MatrixTransposeMatrixMultiplyDynamic/2/12/4         -0.5019         -0.5019           212           105           212           105
BM_MatrixTransposeMatrixMultiplyDynamic/2/12/6         -0.5365         -0.5365           303           140           303           140
BM_MatrixTransposeMatrixMultiplyDynamic/2/12/8         -0.6856         -0.6856           398           125           398           125
BM_MatrixTransposeMatrixMultiplyDynamic/2/15/2         -0.2425         -0.2425           143           109           143           109
BM_MatrixTransposeMatrixMultiplyDynamic/2/15/4         -0.5891         -0.5871           298           122           296           122
BM_MatrixTransposeMatrixMultiplyDynamic/2/15/6         -0.5790         -0.5782           414           174           413           174
BM_MatrixTransposeMatrixMultiplyDynamic/2/15/8         -0.7173         -0.7173           509           144           509           144
BM_MatrixTransposeMatrixMultiplyDynamic/4/2/2          +0.0482         +0.0489            37            39            37            39
BM_MatrixTransposeMatrixMultiplyDynamic/4/2/4          -0.2428         -0.2433            60            45            60            45
BM_MatrixTransposeMatrixMultiplyDynamic/4/2/6          -0.2921         -0.2917            84            59            84            59
BM_MatrixTransposeMatrixMultiplyDynamic/4/2/8          -0.4632         -0.4630           105            56           105            56
BM_MatrixTransposeMatrixMultiplyDynamic/4/4/2          -0.0305         -0.0301            60            58            60            58
BM_MatrixTransposeMatrixMultiplyDynamic/4/4/4          -0.3008         -0.3007           101            70           101            70
BM_MatrixTransposeMatrixMultiplyDynamic/4/4/6          -0.3708         -0.3700           149            94           149            94
BM_MatrixTransposeMatrixMultiplyDynamic/4/4/8          -0.5160         -0.5159           190            92           189            92
BM_MatrixTransposeMatrixMultiplyDynamic/4/5/2          -0.0187         -0.0185            71            70            71            70
BM_MatrixTransposeMatrixMultiplyDynamic/4/5/4          -0.3064         -0.3054           130            90           130            90
BM_MatrixTransposeMatrixMultiplyDynamic/4/5/6          -0.3762         -0.3753           184           115           184           115
BM_MatrixTransposeMatrixMultiplyDynamic/4/5/8          -0.5845         -0.5838           240           100           240           100
BM_MatrixTransposeMatrixMultiplyDynamic/4/8/2          +0.0517         +0.0521           109           115           109           115
BM_MatrixTransposeMatrixMultiplyDynamic/4/8/4          -0.2895         -0.2889           194           138           194           138
BM_MatrixTransposeMatrixMultiplyDynamic/4/8/6          -0.3138         -0.3136           279           191           279           191
BM_MatrixTransposeMatrixMultiplyDynamic/4/8/8          -0.5429         -0.5421           381           174           380           174
BM_MatrixTransposeMatrixMultiplyDynamic/4/10/2         +0.0612         +0.0620           135           143           135           143
BM_MatrixTransposeMatrixMultiplyDynamic/4/10/4         -0.3269         -0.3263           259           174           258           174
BM_MatrixTransposeMatrixMultiplyDynamic/4/10/6         -0.2955         -0.2961           343           242           343           241
BM_MatrixTransposeMatrixMultiplyDynamic/4/10/8         -0.5484         -0.5475           466           210           465           210
BM_MatrixTransposeMatrixMultiplyDynamic/4/12/2         +0.1234         +0.1239           157           177           157           177
BM_MatrixTransposeMatrixMultiplyDynamic/4/12/4         -0.3002         -0.2997           291           204           291           204
BM_MatrixTransposeMatrixMultiplyDynamic/4/12/6         -0.3419         -0.3415           415           273           415           273
BM_MatrixTransposeMatrixMultiplyDynamic/4/12/8         -0.5604         -0.5600           545           239           544           239
BM_MatrixTransposeMatrixMultiplyDynamic/4/15/2         +0.1730         +0.1712           185           217           185           216
BM_MatrixTransposeMatrixMultiplyDynamic/4/15/4         -0.3099         -0.3097           346           239           346           239
BM_MatrixTransposeMatrixMultiplyDynamic/4/15/6         -0.3743         -0.3741           521           326           521           326
BM_MatrixTransposeMatrixMultiplyDynamic/4/15/8         -0.5411         -0.5409           654           300           654           300
BM_MatrixTransposeMatrixMultiplyDynamic/6/2/2          +0.2546         +0.2547            41            51            41            51
BM_MatrixTransposeMatrixMultiplyDynamic/6/2/4          -0.0940         -0.0942            66            60            66            60
BM_MatrixTransposeMatrixMultiplyDynamic/6/2/6          -0.1584         -0.1585            95            80            95            80
BM_MatrixTransposeMatrixMultiplyDynamic/6/2/8          -0.4333         -0.4329           130            74           130            74
BM_MatrixTransposeMatrixMultiplyDynamic/6/4/2          +0.1951         +0.1952            69            82            69            82
BM_MatrixTransposeMatrixMultiplyDynamic/6/4/4          -0.2034         -0.2034           123            98           123            98
BM_MatrixTransposeMatrixMultiplyDynamic/6/4/6          -0.1998         -0.1995           178           142           178           142
BM_MatrixTransposeMatrixMultiplyDynamic/6/4/8          -0.4348         -0.4347           233           131           233           131
BM_MatrixTransposeMatrixMultiplyDynamic/6/5/2          +0.5517         +0.5521            82           128            82           128
BM_MatrixTransposeMatrixMultiplyDynamic/6/5/4          -0.1427         -0.1427           145           124           145           124
BM_MatrixTransposeMatrixMultiplyDynamic/6/5/6          -0.1846         -0.1846           220           179           220           179
BM_MatrixTransposeMatrixMultiplyDynamic/6/5/8          -0.4871         -0.4873           290           149           290           148
BM_MatrixTransposeMatrixMultiplyDynamic/6/8/2          +0.3469         +0.3473           131           176           131           176
BM_MatrixTransposeMatrixMultiplyDynamic/6/8/4          -0.1013         -0.1018           248           223           248           222
BM_MatrixTransposeMatrixMultiplyDynamic/6/8/6          -0.1652         -0.1670           354           295           353           294
BM_MatrixTransposeMatrixMultiplyDynamic/6/8/8          -0.4302         -0.4299           447           255           447           255
BM_MatrixTransposeMatrixMultiplyDynamic/6/10/2         +0.4005         +0.4001           157           219           157           219
BM_MatrixTransposeMatrixMultiplyDynamic/6/10/4         -0.0439         -0.0441           295           282           294           281
BM_MatrixTransposeMatrixMultiplyDynamic/6/10/6         -0.1031         -0.1074           420           377           420           375
BM_MatrixTransposeMatrixMultiplyDynamic/6/10/8         -0.3655         -0.3679           556           353           555           351
BM_MatrixTransposeMatrixMultiplyDynamic/6/12/2         +0.5654         +0.5604           183           287           183           286
BM_MatrixTransposeMatrixMultiplyDynamic/6/12/4         -0.1118         -0.1116           353           314           353           314
BM_MatrixTransposeMatrixMultiplyDynamic/6/12/6         -0.2045         -0.2053           517           411           516           410
BM_MatrixTransposeMatrixMultiplyDynamic/6/12/8         -0.4662         -0.4660           657           350           656           350
BM_MatrixTransposeMatrixMultiplyDynamic/6/15/2         +0.3582         +0.3588           242           328           241           328
BM_MatrixTransposeMatrixMultiplyDynamic/6/15/4         -0.1403         -0.1407           428           368           428           367
BM_MatrixTransposeMatrixMultiplyDynamic/6/15/6         -0.2424         -0.2421           632           479           632           479
BM_MatrixTransposeMatrixMultiplyDynamic/6/15/8         -0.5094         -0.5092           835           410           834           409
BM_MatrixTransposeMatrixMultiplyDynamic/8/2/2          +0.3930         +0.3925            47            66            47            66
BM_MatrixTransposeMatrixMultiplyDynamic/8/2/4          +0.0226         +0.0215            78            80            78            80
BM_MatrixTransposeMatrixMultiplyDynamic/8/2/6          -0.0428         -0.0427           105           100           105           100
BM_MatrixTransposeMatrixMultiplyDynamic/8/2/8          -0.3418         -0.3437           141            93           141            92
BM_MatrixTransposeMatrixMultiplyDynamic/8/4/2          +0.3927         +0.3924            85           118            85           118
BM_MatrixTransposeMatrixMultiplyDynamic/8/4/4          -0.0040         -0.0039           137           136           136           136
BM_MatrixTransposeMatrixMultiplyDynamic/8/4/6          -0.0342         -0.0339           204           197           204           197
BM_MatrixTransposeMatrixMultiplyDynamic/8/4/8          -0.3575         -0.3577           267           171           267           171
BM_MatrixTransposeMatrixMultiplyDynamic/8/5/2          +0.7014         +0.7033            99           168            99           168
BM_MatrixTransposeMatrixMultiplyDynamic/8/5/4          +0.0952         +0.0952           163           179           163           179
BM_MatrixTransposeMatrixMultiplyDynamic/8/5/6          -0.1164         -0.1163           246           218           246           218
BM_MatrixTransposeMatrixMultiplyDynamic/8/5/8          -0.3550         -0.3565           322           208           322           207
BM_MatrixTransposeMatrixMultiplyDynamic/8/8/2          +0.7074         +0.7072           140           239           140           239
BM_MatrixTransposeMatrixMultiplyDynamic/8/8/4          +0.1072         +0.1075           276           306           276           306
BM_MatrixTransposeMatrixMultiplyDynamic/8/8/6          -0.0771         -0.0768           398           368           398           367
BM_MatrixTransposeMatrixMultiplyDynamic/8/8/8          -0.3614         -0.3612           524           335           524           335
BM_MatrixTransposeMatrixMultiplyDynamic/8/10/2         +0.6979         +0.7004           184           313           184           312
BM_MatrixTransposeMatrixMultiplyDynamic/8/10/4         +0.0967         +0.0955           326           357           325           356
BM_MatrixTransposeMatrixMultiplyDynamic/8/10/6         -0.0248         -0.0239           486           474           485           474
BM_MatrixTransposeMatrixMultiplyDynamic/8/10/8         -0.3432         -0.3437           603           396           603           396
BM_MatrixTransposeMatrixMultiplyDynamic/8/12/2         +0.5977         +0.5985           210           335           210           335
BM_MatrixTransposeMatrixMultiplyDynamic/8/12/4         -0.0530         -0.0484           405           384           403           384
BM_MatrixTransposeMatrixMultiplyDynamic/8/12/6         -0.0557         -0.0561           574           542           574           541
BM_MatrixTransposeMatrixMultiplyDynamic/8/12/8         -0.2835         -0.2849           730           523           730           522
BM_MatrixTransposeMatrixMultiplyDynamic/8/15/2         +0.7117         +0.7085           254           434           254           433
BM_MatrixTransposeMatrixMultiplyDynamic/8/15/4         +0.0630         +0.0602           458           487           458           486
BM_MatrixTransposeMatrixMultiplyDynamic/8/15/6         -0.0321         -0.0330           662           641           662           640
BM_MatrixTransposeMatrixMultiplyDynamic/8/15/8         -0.3974         -0.3978           911           549           910           548

Change-Id: I09d87c1885be86177b93c8fe0e6f89a75eb2f7a1
2018-02-26 00:17:51 +00:00
Sameer Agarwal 6c835f81a7 Improve the performance of MatrixTransposeVector Multiply.
This is done by making the matrix access more cache coherent.
For small matrices there isn't much difference, but for
larger matrices like 4x20, this leads to ~50% performance
improvement.

Benchmark                                        Time             CPU      Time Old      Time New       CPU Old       CPU New
-----------------------------------------------------------------------------------------------------------------------------
BM_MatrixVectorMultiply/1/1                   +0.0138         +0.0046            10            10            10            10
BM_MatrixVectorMultiply/1/2                   +0.0215         +0.0146            10            11            10            10
BM_MatrixVectorMultiply/1/3                   +0.0469         +0.0422            10            10            10            10
BM_MatrixVectorMultiply/1/4                   +0.0696         +0.0671            10            11            10            11
BM_MatrixVectorMultiply/1/6                   +0.0827         +0.0795            12            13            12            13
BM_MatrixVectorMultiply/1/7                   +0.1408         +0.1152            13            15            13            14
BM_MatrixVectorMultiply/1/12                  +0.0317         +0.0232            17            18            17            17
BM_MatrixVectorMultiply/1/16                  -0.0362         -0.0168            21            20            20            20
BM_MatrixVectorMultiply/1/20                  +0.0304         +0.0290            22            22            22            22
BM_MatrixVectorMultiply/2/1                   +0.0019         +0.0009            10            10            10            10
BM_MatrixVectorMultiply/2/2                   +0.0285         +0.0291            11            12            11            12
BM_MatrixVectorMultiply/2/3                   -0.1178         -0.0977            16            14            15            14
BM_MatrixVectorMultiply/2/4                   +0.0938         +0.1144            15            17            15            17
BM_MatrixVectorMultiply/2/6                   +0.0617         +0.0629            17            18            17            18
BM_MatrixVectorMultiply/2/7                   +0.0956         +0.0876            20            22            19            21
BM_MatrixVectorMultiply/2/12                  +0.0043         +0.0119            24            24            24            24
BM_MatrixVectorMultiply/2/16                  +0.0361         +0.0337            29            30            29            30
BM_MatrixVectorMultiply/2/20                  +0.0463         +0.0365            33            35            33            34
BM_MatrixVectorMultiply/3/1                   -0.0201         -0.0210            12            12            12            11
BM_MatrixVectorMultiply/3/2                   -0.0741         -0.0766            16            15            16            15
BM_MatrixVectorMultiply/3/3                   -0.0076         -0.0118            18            18            18            18
BM_MatrixVectorMultiply/3/4                   +0.1071         +0.0963            19            21            19            21
BM_MatrixVectorMultiply/3/6                   +0.0449         +0.0390            23            24            23            23
BM_MatrixVectorMultiply/3/7                   +0.1099         +0.1018            25            28            24            27
BM_MatrixVectorMultiply/3/12                  +0.1512         +0.0992            33            38            32            35
BM_MatrixVectorMultiply/3/16                  +0.2281         +0.2005            37            46            37            44
BM_MatrixVectorMultiply/3/20                  +0.2387         +0.1799            49            61            48            57
BM_MatrixVectorMultiply/4/1                   +0.4444         +0.2574            14            21            14            18
BM_MatrixVectorMultiply/4/2                   +0.0313         +0.0230            19            20            19            20
BM_MatrixVectorMultiply/4/3                   +0.0626         +0.0596            23            24            23            24
BM_MatrixVectorMultiply/4/4                   +0.2322         +0.1440            23            28            23            26
BM_MatrixVectorMultiply/4/6                   +0.0936         +0.0768            26            29            26            28
BM_MatrixVectorMultiply/4/7                   +0.0848         +0.0835            28            30            28            30
BM_MatrixVectorMultiply/4/12                  +0.1607         +0.1101            39            46            39            43
BM_MatrixVectorMultiply/4/16                  +0.0752         +0.0687            48            52            48            51
BM_MatrixVectorMultiply/4/20                  +0.1782         +0.1463            61            72            60            69
BM_MatrixTransposeVectorMultiply/1/1          +0.3609         +0.2857             9            13             9            12
BM_MatrixTransposeVectorMultiply/1/2          +0.3106         +0.2970            10            13            10            12
BM_MatrixTransposeVectorMultiply/1/3          +0.3018         +0.2383            11            14            11            13
BM_MatrixTransposeVectorMultiply/1/4          -0.0795         -0.0819            14            13            14            12
BM_MatrixTransposeVectorMultiply/1/6          -0.0108         -0.0629            18            18            18            16
BM_MatrixTransposeVectorMultiply/1/7          -0.1073         -0.0879            20            18            19            17
BM_MatrixTransposeVectorMultiply/1/12         -0.3035         -0.3016            26            18            26            18
BM_MatrixTransposeVectorMultiply/1/16         -0.4909         -0.4951            39            20            38            19
BM_MatrixTransposeVectorMultiply/1/20         -0.4619         -0.4985            43            23            42            21
BM_MatrixTransposeVectorMultiply/2/1          +0.3471         +0.2906            10            13            10            13
BM_MatrixTransposeVectorMultiply/2/2          +0.2323         +0.2266            12            15            12            15
BM_MatrixTransposeVectorMultiply/2/3          +0.0802         +0.0779            16            17            16            17
BM_MatrixTransposeVectorMultiply/2/4          -0.0951         -0.0983            19            17            19            17
BM_MatrixTransposeVectorMultiply/2/6          -0.0974         -0.1064            24            21            24            21
BM_MatrixTransposeVectorMultiply/2/7          +0.0612         -0.0457            27            29            27            26
BM_MatrixTransposeVectorMultiply/2/12         -0.3777         -0.3838            41            25            41            25
BM_MatrixTransposeVectorMultiply/2/16         -0.4783         -0.4843            53            28            53            27
BM_MatrixTransposeVectorMultiply/2/20         -0.5567         -0.5566            71            32            70            31
BM_MatrixTransposeVectorMultiply/3/1          +0.4607         +0.4753            10            15            10            15
BM_MatrixTransposeVectorMultiply/3/2          +0.2870         +0.2754            14            19            14            18
BM_MatrixTransposeVectorMultiply/3/3          +0.1270         +0.1245            19            21            19            21
BM_MatrixTransposeVectorMultiply/3/4          +0.0160         +0.0076            22            22            22            22
BM_MatrixTransposeVectorMultiply/3/6          -0.0612         -0.0635            27            26            27            25
BM_MatrixTransposeVectorMultiply/3/7          -0.0531         -0.0695            31            29            30            28
BM_MatrixTransposeVectorMultiply/3/12         -0.4009         -0.3938            49            29            47            29
BM_MatrixTransposeVectorMultiply/3/16         -0.4584         -0.4537            64            35            62            34
BM_MatrixTransposeVectorMultiply/3/20         -0.5087         -0.5098            78            38            77            38
BM_MatrixTransposeVectorMultiply/4/1          +0.6696         +0.6837            11            18            11            18
BM_MatrixTransposeVectorMultiply/4/2          +0.3085         +0.3085            17            22            17            22
BM_MatrixTransposeVectorMultiply/4/3          +0.2908         +0.2821            21            26            20            26
BM_MatrixTransposeVectorMultiply/4/4          +0.0076         -0.0031            24            25            24            24
BM_MatrixTransposeVectorMultiply/4/6          -0.0884         -0.0841            34            31            34            31
BM_MatrixTransposeVectorMultiply/4/7          -0.0834         -0.0825            37            34            36            33
BM_MatrixTransposeVectorMultiply/4/12         -0.4477         -0.4453            62            34            61            34
BM_MatrixTransposeVectorMultiply/4/16         -0.5324         -0.5203            86            40            83            40
BM_MatrixTransposeVectorMultiply/4/20         -0.4905         -0.4933            99            50            98            50

Change-Id: I7f2a1c986e4a345bb67cb9eb0235234573024889
2018-02-25 13:44:22 -08:00
Sameer Agarwal 7444f23ae2 Fix a typo in small_blas.h
The reason this rather serious looking typo has not
caused any problems uptil now is because NUM_ROW_B is
computed but never actually used.

Thanks to Werner Trobin for pointing this out.

Change-Id: Id2b4d9326ec21baec8a85423e3270aefbafb611e
2015-08-03 12:24:25 -07:00
Keir Mierle 7492b0d8de Update copyright headers with new year and URL
Since Ceres is moving to using GitHub for issues, and the Google
Code URL in the current copyright header will soon become invalid,
update all the headers.

Change-Id: I1fce70375d1bcf098591f07b4d8f01a5c1e0789c
2015-03-18 05:43:23 +00:00
Sameer Agarwal 79df23ed78 Remove NDK/Eigen bug work around.
The bug was multiple compilers ago. Now is as good a point as
any to remove the work around.

Change-Id: I1f14732d042fe061adcb31b14a6b39d8fc0ca69e
2014-06-02 21:33:40 -07:00
Alex Stewart ea76585068 Adding autogenerated Ceres config.h to #define Ceres compile options.
- Previously we passed all compile options to Ceres via add_definitions
  in CMake.  This was fine for private definitions (used only by Ceres)
  but required additional work for public definitions to ensure they
  were correctly propagated to clients via CMake using
  target_compile_definitions() (>= 2.8.11) or add_definitions().
- A drawback to these approaches is that they did not work for chained
  dependencies on Ceres, as in if in the users project B <- A <- Ceres,
  then although the required Ceres public compile definitions would
  be used when compiling A, they would not be propagated to B.

- This patch replaces the addition of compile definitions via
  add_definitions() with an autogenerated config.h header which
  is installed with Ceres and defines all of the enabled Ceres compile
  options.
- This removes the need for the user to propagate any compile
  definitions in their projects, and additionally allows post-install
  inspect of the options with which Ceres was compiled.

Change-Id: Idbdb6abdad0eb31e7540370e301afe87a07f2260
2014-05-09 10:57:31 +01:00
Sameer Agarwal 367b65e17a Multiple dense linear algebra backends.
1. When a LAPACK implementation is present, then
DENSE_QR, DENSE_NORMAL_CHOLESKY and DENSE_SCHUR
can use it for doing dense linear algebra operations.

2. The user can switch dense linear algebra libraries
by setting Solver::Options::dense_linear_algebra_library_type.

3. Solver::Options::sparse_linear_algebra_library is now
Solver::Options::sparse_linear_algebra_library_type to be consistent
with all the other enums in Solver::Options.

4. Updated documentation as well as Solver::Summary::FullReport
to reflect these changes.

Change-Id: I5ab930bc15e90906b648bc399b551e6bd5d6498f
2013-08-13 14:57:03 -07:00