[vectorIntrinsics] RFR: 8262275: Math vector stubs are not called for double64 vectors

Jie Fu jiefu at openjdk.java.net
Wed Feb 24 12:10:51 UTC 2021


On Wed, 24 Feb 2021 03:52:38 GMT, Jie Fu <jiefu at openjdk.org> wrote:

> Hi all,
> 
> This is a follow-up of JDK-8261267.
> 
> The svml math double64 vector stubs intrinsification is still failing and they are not being called from jitted code.
> 
> The reason is that C2 refuses all double64 vector operations unconditionally.
> But this is unreasonable since some double64 vector operations like load/store and svml call can be safely implemented.
> 
> This fix enables the vectorization of double64 for load/store(no mask) and svml call.
> 
> Testing:
>   - tier1~tier3 on Linux/x86, no regression
> 
> Thanks.
> Best regards,
> Jie

Here are the scores (higher is better) of Double64Vector [1] micro-benchmark.
Most of them have been improved significantly (1.3x ~ 10x).
Thanks.

[1] https://github.com/openjdk/panama-vector/blob/vectorIntrinsics/test/jdk/jdk/incubator/vector/benchmark/src/main/java/benchmark/jdk/incubator/vector/Double64Vector.java

Benchmark                               Before  After   Ratio(After/Beore)
Double64Vector.ABS                      46.758  76.595  1.64
Double64Vector.ABSMasked                31.307  42.214  1.35
Double64Vector.ACOS                     29.664  54.922  1.85
Double64Vector.ADD                      32.199  46.972  1.46
Double64Vector.ADDLanes                 75.218  103.138 1.37
Double64Vector.ADDMasked                23.931  31.469  1.31
Double64Vector.ADDMaskedLanes           29.152  34.24   1.17
Double64Vector.ASIN                     29.054  62.188  2.14
Double64Vector.ATAN                     14.505  55.595  3.83
Double64Vector.ATAN2                    10.864  37.735  3.47
Double64Vector.CBRT                     17.327  89.049  5.14
Double64Vector.COS                      28.072  117.999 4.20
Double64Vector.COSH                     19.004  86.781  4.57
Double64Vector.DIV                      32.099  47.069  1.47
Double64Vector.DIVMasked                21.819  30.872  1.41
Double64Vector.EQ                       26.234  33.342  1.27
Double64Vector.EXP                      34.194  169.717 4.96
Double64Vector.EXPM1                    20.636  77.133  3.74
Double64Vector.FIRST_NONZERO            2.342   3.044   1.30
Double64Vector.FIRST_NONZEROMasked      2.231   2.692   1.21
Double64Vector.FMA                      23.029  34.807  1.51
Double64Vector.FMAMasked                19.897  25.232  1.27
Double64Vector.GE                       28.377  32.899  1.16
Double64Vector.GT                       28.211  33.6    1.19
Double64Vector.HYPOT                    24.368  75.857  3.11
Double64Vector.IS_DEFAULT               8.129   10.257  1.26
Double64Vector.IS_FINITE                6.928   8.297   1.20
Double64Vector.IS_INFINITE              6.883   8.354   1.21
Double64Vector.IS_NAN                   6.946   8.52    1.23
Double64Vector.IS_NEGATIVE              8.18    10.389  1.27
Double64Vector.LE                       28.359  33.303  1.17
Double64Vector.LOG                      33.455  117.06  3.50
Double64Vector.LOG10                    31.447  107.968 3.43
Double64Vector.LOG1P                    13.559  80.652  5.95
Double64Vector.LT                       28.124  32.786  1.17
Double64Vector.MAX                      31.254  46.787  1.50
Double64Vector.MAXLanes                 65.916  86.609  1.31
Double64Vector.MAXMaskedLanes           28.91   32.348  1.12
Double64Vector.MIN                      31.038  46.775  1.51
Double64Vector.MINLanes                 66.315  87.1    1.31
Double64Vector.MINMaskedLanes           28.831  32.375  1.12
Double64Vector.MUL                      32.193  46.057  1.43
Double64Vector.MULLanes                 76.25   103.081 1.35
Double64Vector.MULMasked                23.078  31.233  1.35
Double64Vector.MULMaskedLanes           30.319  32.826  1.08
Double64Vector.NE                       27.849  33.226  1.19
Double64Vector.NEG                      42.939  76.492  1.78
Double64Vector.NEGMasked                31.656  42.176  1.33
Double64Vector.POW                      17.798  13.046  0.73
Double64Vector.SIN                      27.915  117.752 4.22
Double64Vector.SINH                     18.811  71.169  3.78
Double64Vector.SQRT                     46.031  75.079  1.63
Double64Vector.SQRTMasked               28.875  41.859  1.45
Double64Vector.SUB                      31.974  47.123  1.47
Double64Vector.SUBMasked                24.416  30.659  1.26
Double64Vector.TAN                      24.71   64.042  2.59
Double64Vector.TANH                     28.53   72.796  2.55
Double64Vector.blend                    30.643  43.363  1.42
Double64Vector.broadcast                55.878  90.417  1.62
Double64Vector.gather                   54.696  564.164 10.31
Double64Vector.gatherMasked             39.097  92.014  2.35
Double64Vector.laneextract              83.051  115.022 1.38
Double64Vector.rearrange                25.133  31.262  1.24
Double64Vector.scatter                  60.11   562.604 9.36
Double64Vector.scatterMasked            41.086  84.172  2.05
Double64Vector.sliceBinary              30.206  52.057  1.72
Double64Vector.sliceMasked              18.241  26.651  1.46
Double64Vector.sliceUnary               9.444   11.721  1.24
Double64Vector.unsliceBinary            27.435  45.943  1.67
Double64Vector.unsliceMasked            17.519  22.939  1.31
Double64Vector.unsliceUnary             9.691   11.899  1.23
Double64Vector.withLane                 34.739  50.296  1.45
Double64Vector.zero                     53.938  90.724  1.68

-------------

PR: https://git.openjdk.java.net/panama-vector/pull/39


More information about the panama-dev mailing list