RFR: 8299525: RISC-V: Add backend support for half float conversion intrinsics
Yadong Wang
yadongwang at openjdk.org
Tue Jan 3 12:16:45 UTC 2023
This patch adds RISC-V backend support for library intrinsics that implement conversions between half-precision and single-precision floats by using RISC-V Zfh Extension, which was already ratified by November 2021 (https://wiki.riscv.org/display/HOME/Recently+Ratified+Extensions).
The C2 output for PrintOptoAssembly:
0dc B10: # out( B33 B11 ) <- in( B9 ) Freq: 1.99802
0dc + flw F1, [R29, #16] # float, #@loadF
0e0 + fcvt.h.s F0, F1 #@convF2HF_reg_reg
fmv.x.h R8, F0 #@convF2HF_reg_reg
0dc B10: # out( B33 B11 ) <- in( B9 ) Freq: 1.99801
0dc + lh R12, [R11, #16] # short, #@loadS
0e0 + fmv.h.x F0, R12 #@convHF2F_reg_reg
fcvt.s.h F1, F0 #@convHF2F_reg_reg
We don't have any hardware supporting yet, so ran the following benchmarks in Qemu for unreliable reference:
VM options: -XX:+UnlockExperimentalVMOptions -XX:-UseZfh
Benchmark (size) Mode Samples Score Score error Units
o.s.Fp16ConversionBenchmark.float16ToFloat 2048 thrpt 15 44.523 0.116 ops/ms
o.s.Fp16ConversionBenchmark.float16ToFloatMemory 2048 thrpt 15 8379.835 27.309 ops/ms
o.s.Fp16ConversionBenchmark.floatToFloat16 2048 thrpt 15 7.370 0.028 ops/ms
o.s.Fp16ConversionBenchmark.floatToFloat16Memory 2048 thrpt 15 11292.278 11.962 ops/ms
VM options: -XX:+UnlockExperimentalVMOptions -XX:+UseZfh
Benchmark (size) Mode Samples Score Score error Units
o.s.Fp16ConversionBenchmark.float16ToFloat 2048 thrpt 15 12.357 0.153 ops/ms
o.s.Fp16ConversionBenchmark.float16ToFloatMemory 2048 thrpt 15 10213.944 69.222 ops/ms
o.s.Fp16ConversionBenchmark.floatToFloat16 2048 thrpt 15 11.728 0.067 ops/ms
o.s.Fp16ConversionBenchmark.floatToFloat16Memory 2048 thrpt 15 15008.550 13.917 ops/ms
-------------
Commit messages:
- 8299525: RISC-V: Add backend support for half float conversion intrinsics
Changes: https://git.openjdk.org/jdk/pull/11828/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=11828&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8299525
Stats: 47 lines in 3 files changed: 47 ins; 0 del; 0 mod
Patch: https://git.openjdk.org/jdk/pull/11828.diff
Fetch: git fetch https://git.openjdk.org/jdk pull/11828/head:pull/11828
PR: https://git.openjdk.org/jdk/pull/11828
More information about the hotspot-compiler-dev
mailing list