RFR: 8351140: RISC-V: Intrinsify Unsafe::setMemory [v9]

Anjian-Wen duke at openjdk.org
Fri May 16 08:11:16 UTC 2025


On Wed, 14 May 2025 02:50:53 GMT, Anjian-Wen <duke at openjdk.org> wrote:

>> From [JDK-8329331](https://bugs.openjdk.org/browse/JDK-8329331), add riscv unsafe::setMemory intrinsic’s generator generate_unsafe_setmemory. This intrinsic optimizes about quite a lot unsafe setmemory time
>> 
>> on my musebook, the JMH test micro:java.lang.foreign.MemorySegmentZeroUnsafe shows below
>> 
>> before the patch
>> 
>> Benchmark                       (aligned)  (size)  Mode  Cnt   Score   Error  Units
>> MemorySegmentZeroUnsafe.panama       true       1  avgt   30   24.198 ± 0.392  ns/op
>> MemorySegmentZeroUnsafe.panama       true       2  avgt   30   20.688 ± 0.013  ns/op
>> MemorySegmentZeroUnsafe.panama       true       3  avgt   30   20.703 ± 0.045  ns/op
>> MemorySegmentZeroUnsafe.panama       true       4  avgt   30   20.053 ± 0.016  ns/op
>> MemorySegmentZeroUnsafe.panama       true       5  avgt   30   20.682 ± 0.016  ns/op
>> MemorySegmentZeroUnsafe.panama       true       6  avgt   30   20.732 ± 0.061  ns/op
>> MemorySegmentZeroUnsafe.panama       true       7  avgt   30   21.403 ± 0.096  ns/op
>> MemorySegmentZeroUnsafe.panama       true       8  avgt   30   25.268 ± 0.197  ns/op
>> MemorySegmentZeroUnsafe.panama       true      15  avgt   30   27.481 ± 0.195  ns/op
>> MemorySegmentZeroUnsafe.panama       true      16  avgt   30   27.577 ± 0.019  ns/op
>> MemorySegmentZeroUnsafe.panama       true      63  avgt   30  208.893 ± 2.795  ns/op
>> MemorySegmentZeroUnsafe.panama       true      64  avgt   30  199.167 ± 0.936  ns/op
>> MemorySegmentZeroUnsafe.panama       true     255  avgt   30  220.672 ± 0.879  ns/op
>> MemorySegmentZeroUnsafe.panama       true     256  avgt   30  246.256 ± 0.756  ns/op
>> MemorySegmentZeroUnsafe.panama      false       1  avgt   30   23.849 ± 0.088  ns/op
>> MemorySegmentZeroUnsafe.panama      false       2  avgt   30   20.671 ± 0.006  ns/op
>> MemorySegmentZeroUnsafe.panama      false       3  avgt   30   20.694 ± 0.037  ns/op
>> MemorySegmentZeroUnsafe.panama      false       4  avgt   30   20.048 ± 0.010  ns/op
>> MemorySegmentZeroUnsafe.panama      false       5  avgt   30   20.684 ± 0.020  ns/op
>> MemorySegmentZeroUnsafe.panama      false       6  avgt   30   20.685 ± 0.016  ns/op
>> MemorySegmentZeroUnsafe.panama      false       7  avgt   30   21.383 ± 0.086  ns/op
>> MemorySegmentZeroUnsafe.panama      false       8  avgt   30   25.684 ± 0.006  ns/op
>> MemorySegmentZeroUnsafe.panama      false      15  avgt   30   27.593 ± 0.043  ns/op
>> MemorySegmentZeroUnsafe.panama      false      16  avgt   30   28.437 ± 0.228  ns/o...
>
> Anjian-Wen has updated the pull request incrementally with one additional commit since the last revision:
> 
>   fix bug and delete some useless code

With the latest update,  the JMH test micro:java.lang.foreign.MemorySegmentZeroUnsafe shows below

Benchmark                       (aligned)  (size)  Mode  Cnt   Score   Error  Units
MemorySegmentZeroUnsafe.panama       true       1  avgt   30  24.387 ± 0.564  ns/op
MemorySegmentZeroUnsafe.panama       true       2  avgt   30  20.690 ± 0.015  ns/op
MemorySegmentZeroUnsafe.panama       true       3  avgt   30  20.680 ± 0.008  ns/op
MemorySegmentZeroUnsafe.panama       true       4  avgt   30  20.051 ± 0.008  ns/op
MemorySegmentZeroUnsafe.panama       true       5  avgt   30  20.751 ± 0.098  ns/op
MemorySegmentZeroUnsafe.panama       true       6  avgt   30  20.805 ± 0.091  ns/op
MemorySegmentZeroUnsafe.panama       true       7  avgt   30  21.328 ± 0.041  ns/op
MemorySegmentZeroUnsafe.panama       true       8  avgt   30  25.688 ± 0.007  ns/op
MemorySegmentZeroUnsafe.panama       true      15  avgt   30  27.602 ± 0.040  ns/op
MemorySegmentZeroUnsafe.panama       true      16  avgt   30  27.590 ± 0.020  ns/op
MemorySegmentZeroUnsafe.panama       true      63  avgt   30  45.911 ± 0.765  ns/op
MemorySegmentZeroUnsafe.panama       true      64  avgt   30  47.624 ± 0.134  ns/op
MemorySegmentZeroUnsafe.panama       true     255  avgt   30  60.191 ± 0.077  ns/op
MemorySegmentZeroUnsafe.panama       true     256  avgt   30  60.438 ± 0.394  ns/op
MemorySegmentZeroUnsafe.panama      false       1  avgt   30  23.857 ± 0.055  ns/op
MemorySegmentZeroUnsafe.panama      false       2  avgt   30  20.600 ± 0.105  ns/op
MemorySegmentZeroUnsafe.panama      false       3  avgt   30  20.678 ± 0.010  ns/op
MemorySegmentZeroUnsafe.panama      false       4  avgt   30  20.189 ± 0.145  ns/op
MemorySegmentZeroUnsafe.panama      false       5  avgt   30  20.873 ± 0.243  ns/op
MemorySegmentZeroUnsafe.panama      false       6  avgt   30  20.764 ± 0.091  ns/op
MemorySegmentZeroUnsafe.panama      false       7  avgt   30  21.374 ± 0.087  ns/op
MemorySegmentZeroUnsafe.panama      false       8  avgt   30  25.705 ± 0.025  ns/op
MemorySegmentZeroUnsafe.panama      false      15  avgt   30  27.821 ± 0.148  ns/op
MemorySegmentZeroUnsafe.panama      false      16  avgt   30  28.608 ± 0.202  ns/op
MemorySegmentZeroUnsafe.panama      false      63  avgt   30  47.337 ± 0.250  ns/op
MemorySegmentZeroUnsafe.panama      false      64  avgt   30  48.475 ± 0.272  ns/op
MemorySegmentZeroUnsafe.panama      false     255  avgt   30  61.789 ± 0.344  ns/op
MemorySegmentZeroUnsafe.panama      false     256  avgt   30  63.718 ± 0.549  ns/op
MemorySegmentZeroUnsafe.unsafe       true       1  avgt   30  19.476 ± 0.059  ns/op
MemorySegmentZeroUnsafe.unsafe       true       2  avgt   30  21.928 ± 0.009  ns/op
MemorySegmentZeroUnsafe.unsafe       true       3  avgt   30  24.410 ± 0.513  ns/op
MemorySegmentZeroUnsafe.unsafe       true       4  avgt   30  26.510 ± 0.577  ns/op
MemorySegmentZeroUnsafe.unsafe       true       5  avgt   30  26.578 ± 0.211  ns/op
MemorySegmentZeroUnsafe.unsafe       true       6  avgt   30  27.618 ± 0.066  ns/op
MemorySegmentZeroUnsafe.unsafe       true       7  avgt   30  28.820 ± 0.009  ns/op
MemorySegmentZeroUnsafe.unsafe       true       8  avgt   30  33.219 ± 0.021  ns/op
MemorySegmentZeroUnsafe.unsafe       true      15  avgt   30  33.873 ± 0.077  ns/op
MemorySegmentZeroUnsafe.unsafe       true      16  avgt   30  33.325 ± 0.119  ns/op
MemorySegmentZeroUnsafe.unsafe       true      63  avgt   30  37.172 ± 0.721  ns/op
MemorySegmentZeroUnsafe.unsafe       true      64  avgt   30  38.247 ± 0.044  ns/op
MemorySegmentZeroUnsafe.unsafe       true     255  avgt   30  50.822 ± 0.174  ns/op
MemorySegmentZeroUnsafe.unsafe       true     256  avgt   30  50.696 ± 0.139  ns/op
MemorySegmentZeroUnsafe.unsafe      false       1  avgt   30  19.423 ± 0.008  ns/op
MemorySegmentZeroUnsafe.unsafe      false       2  avgt   30  22.138 ± 0.199  ns/op
MemorySegmentZeroUnsafe.unsafe      false       3  avgt   30  23.928 ± 0.140  ns/op
MemorySegmentZeroUnsafe.unsafe      false       4  avgt   30  26.939 ± 0.331  ns/op
MemorySegmentZeroUnsafe.unsafe      false       5  avgt   30  26.362 ± 0.066  ns/op
MemorySegmentZeroUnsafe.unsafe      false       6  avgt   30  27.635 ± 0.084  ns/op
MemorySegmentZeroUnsafe.unsafe      false       7  avgt   30  29.030 ± 0.202  ns/op
MemorySegmentZeroUnsafe.unsafe      false       8  avgt   30  31.390 ± 0.053  ns/op
MemorySegmentZeroUnsafe.unsafe      false      15  avgt   30  35.823 ± 0.133  ns/op
MemorySegmentZeroUnsafe.unsafe      false      16  avgt   30  37.005 ± 0.079  ns/op
MemorySegmentZeroUnsafe.unsafe      false      63  avgt   30  38.177 ± 0.334  ns/op
MemorySegmentZeroUnsafe.unsafe      false      64  avgt   30  39.484 ± 0.019  ns/op
MemorySegmentZeroUnsafe.unsafe      false     255  avgt   30  52.219 ± 0.176  ns/op
MemorySegmentZeroUnsafe.unsafe      false     256  avgt   30  53.325 ± 0.066  ns/op

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

PR Comment: https://git.openjdk.org/jdk/pull/23890#issuecomment-2885970449


More information about the hotspot-compiler-dev mailing list