On Thu, 20 Feb 2025 06:50:07 GMT, Galder Zamarreño <gal...@openjdk.org> 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