Official support for Unsafe

Quân Anh Mai anhmdq at gmail.com
Mon Jan 15 13:52:18 UTC 2024


Hi,

I have tried using a universe segment instead of Unsafe, and store the
custom hashmap buffer in off-heap instead of using a byte array. The output
of perf stat on the program

 Performance counter stats for 'sh calculate_average_merykittyunsafe.sh':

          13573.70 msec task-clock:u              #   10.942 CPUs utilized
                 0      context-switches:u        #    0.000 /sec
                 0      cpu-migrations:u          #    0.000 /sec
            238460      page-faults:u             #   17.568 K/sec
       61995179870      cycles:u                  #    4.567 GHz
         261830581      stalled-cycles-frontend:u #    0.42% frontend
cycles idle
          93823680      stalled-cycles-backend:u  #    0.15% backend cycles
idle
      137976098809      instructions:u            #    2.23  insn per cycle
                                                  #    0.00  stalled cycles
per insn
       18373313803      branches:u                #    1.354 G/sec
          43579782      branch-misses:u           #    0.24% of all branches

       1.240504612 seconds time elapsed

      12.841563000 seconds user
       0.652428000 seconds sys

For comparison, this is the unsafe version:

 Performance counter stats for 'sh calculate_average_merykittyunsafe.sh':

          13327.46 msec task-clock:u              #   11.202 CPUs utilized
                 0      context-switches:u        #    0.000 /sec
                 0      cpu-migrations:u          #    0.000 /sec
            269896      page-faults:u             #   20.251 K/sec
       61258348752      cycles:u                  #    4.596 GHz
         639839262      stalled-cycles-frontend:u #    1.04% frontend
cycles idle
         108018676      stalled-cycles-backend:u  #    0.18% backend cycles
idle
      113476168983      instructions:u            #    1.85  insn per cycle
                                                  #    0.01  stalled cycles
per insn
       11442665370      branches:u                #  858.578 M/sec
          44590172      branch-misses:u           #    0.39% of all branches

       1.189768677 seconds time elapsed

      12.628512000 seconds user
       0.620083000 seconds sys

This program running on my machine expresses dependency bound so the
difference in execution time is not as significant as on the test machine
but it can be seen that removing Unsafe results in over 21% increase in
instruction count.

Regards,
Quan Anh

On Sat, 13 Jan 2024 at 01:29, Maurizio Cimadamore <
maurizio.cimadamore at oracle.com> wrote:

>
> On 12/01/2024 17:26, Quân Anh Mai wrote:
> > FYI, in my submission to 1brc, using Unsafe decreases the execution
> > time from 3.25s to 2.57s on the test machine.
>
> Just curious - what is the difference compared with the everything
> segment trick?
>
> (While I know it can't do on-heap access, perhaps you can tweak the code
> to be all off-heap?)
>
> Maurizio
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/amber-dev/attachments/20240115/420a6c0b/attachment.htm>


More information about the amber-dev mailing list