On Thu, 20 Feb 2025 06:50:07 GMT, Galder Zamarreño <[email protected]> wrote:
> There is something very intriguing happening here, which I don't know it's
> due to min itself or int vs long.
Benchmark (probability) (size) Mode Cnt
-min/-max +min/+max Units
MinMaxVector.intReductionMultiplyMax 100 2048 thrpt 4
876.867 407.905 ops/ms (-53%)
MinMaxVector.intReductionMultiplyMin 100 2048 thrpt 4
407.963 407.956 ops/ms (1)
MinMaxVector.longReductionMultiplyMax 100 2048 thrpt 4
838.845 405.371 ops/ms (-51%)
MinMaxVector.longReductionMultiplyMin 100 2048 thrpt 4
825.602 414.757 ops/ms (-49%)
MinMaxVector.intReductionSimpleMax 100 2048 thrpt 4
1032.561 460.486 ops/ms (-55%)
MinMaxVector.intReductionSimpleMin 100 2048 thrpt 4
460.530 460.490 ops/ms (2)
MinMaxVector.longReductionSimpleMax 100 2048 thrpt 4
1017.560 460.436 ops/ms (-54%)
MinMaxVector.longReductionSimpleMin 100 2048 thrpt 4
959.507 459.197 ops/ms (-52%)
(1) (2) It seems it's a combination of both int AND min reduction operations
and disabling the intrinsic. The rest of reduction operations seems to use
cmp+mov in that situation but not int+min, which uses cmov. Maybe this is
intentional or maybe it's a bug, but it's interesting to notice.
`intReductionMultiplyMin` -min:
# VM options:
-Djava.library.path=/home/vagrant/1/jdk-intrinsify-max-min-long/build/release-linux-x86_64/images/test/micro/native
-XX:+UnlockDiagnosticVMOptions -XX:DisableIntrinsic=_min -XX:-UseSuperWord
# Benchmark: org.openjdk.bench.java.lang.MinMaxVector.intReductionMultiplyMin
# Parameters: (probability = 100, size = 2048)
...
2.29% │││ │ 0x00007f4aa40f5835: cmpl %edi, %r10d
4.25% │││ │ 0x00007f4aa40f5838: cmovgl %edi, %r10d
;*ireturn {reexecute=0 rethrow=0 return_oop=0}
│││ │
; - java.lang.Math::min@10 (line 2119)
│││ │
; - org.openjdk.bench.java.lang.MinMaxVector::intReductionMultiplyMin@26 (line
202)
│││ │
; -
org.openjdk.bench.java.lang.jmh_generated.MinMaxVector_intReductionMultiplyMin_jmhTest::intReductionMultiplyMin_thrpt_jmhStub@19
(line 124)
`intReductionMultiplyMin` +min:
# VM options:
-Djava.library.path=/home/vagrant/1/jdk-intrinsify-max-min-long/build/release-linux-x86_64/images/test/micro/native
-XX:-UseSuperWord
# Benchmark: org.openjdk.bench.java.lang.MinMaxVector.intReductionMultiplyMin
# Parameters: (probability = 100, size = 2048)
...
2.06% │││ │ 0x00007ff8ec0f4c35: cmpl %edi, %r10d
4.31% │││ │ 0x00007ff8ec0f4c38: cmovgl %edi, %r10d
;*invokestatic min {reexecute=0 rethrow=0 return_oop=0}
│││ │
; - org.openjdk.bench.java.lang.MinMaxVector::intReductionMultiplyMin@26 (line
202)
│││ │
; -
org.openjdk.bench.java.lang.jmh_generated.MinMaxVector_intReductionMultiplyMin_jmhTest::intReductionMultiplyMin_thrpt_jmhStub@19
(line 124)
`longReductionMultiplyMin` -min:
# VM options:
-Djava.library.path=/home/vagrant/1/jdk-intrinsify-max-min-long/build/release-linux-x86_64/images/test/micro/native
-XX:+UnlockDiagnosticVMOptions -XX:DisableIntrinsic=_minL -XX:-UseSuperWord
# Benchmark: org.openjdk.bench.java.lang.MinMaxVector.longReductionMultiplyMin
# Parameters: (probability = 100, size = 2048)
...
0.01% │ │ ││ │ ││ 0x00007ff9d80f7609: imulq $0xb,
0x10(%r12, %r10, 8), %rbp
│ │ ││ │ ││
;*lmul {reexecute=0 rethrow=0 return_oop=0}
│ │ ││ │ ││
; -
org.openjdk.bench.java.lang.MinMaxVector::longReductionMultiplyMin@24 (line 265)
│ │ ││ │ ││
; -
org.openjdk.bench.java.lang.jmh_generated.MinMaxVector_longReductionMultiplyMin_jmhTest::longReductionMultiplyMin_thrpt_jmhStub@19
(line 124)
│ │ ││ │ ││ 0x00007ff9d80f760f: testq %rbp,
%rbp
│ │ ││╭│ ││ 0x00007ff9d80f7612: jge
0x7ff9d80f7646 ;*lreturn {reexecute=0 rethrow=0 return_oop=0}
│ │ ││││ ││
; - java.lang.Math::min@11 (line 2134)
│ │ ││││ ││
; -
org.openjdk.bench.java.lang.MinMaxVector::longReductionMultiplyMin@30 (line 266)
│ │ ││││ ││
; -
org.openjdk.bench.java.lang.jmh_generated.MinMaxVector_longReductionMultiplyMin_jmhTest::longReductionMultiplyMin_thrpt_jmhStub@19
(line 124)
`longReductionMultiplyMin` +min:
# VM options:
-Djava.library.path=/home/vagrant/1/jdk-intrinsify-max-min-long/build/release-linux-x86_64/images/test/micro/native
-XX:-UseSuperWord
# Benchmark: org.openjdk.bench.java.lang.MinMaxVector.longReductionMultiplyMin
# Parameters: (probability = 100, size = 2048)
...
0.01% │ ││ 0x00007f83400f7d76: cmpq %r13, %rdx
0.12% │ ││ 0x00007f83400f7d79: cmovlq %rdx, %r13
;*invokestatic min {reexecute=0 rethrow=0 return_oop=0}
│ ││ ; -
org.openjdk.bench.java.lang.MinMaxVector::longReductionMultiplyMin@30 (line 266)
│ ││ ; -
org.openjdk.bench.java.lang.jmh_generated.MinMaxVector_longReductionMultiplyMin_jmhTest::longReductionMultiplyMin_thrpt_jmhStub@19
(line 124)
-------------
PR Comment: https://git.openjdk.org/jdk/pull/20098#issuecomment-2671144644