<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    <div class="markdown-here-wrapper" data-md-url="" style="">
      <p style="margin: 0px 0px 1.2em !important;">On 20/03/2024 17:18,
        Maurizio Cimadamore wrote:</p>
      <p style="margin: 0px 0px 1.2em !important;"></p>
      <div class="markdown-here-exclude">
        <p></p>
        <blockquote type="cite" cite="mid:19125a3b-9cb5-48b2-803a-aed7f741b250@oracle.com">FFM
          has an advantage here compared to ByteBuffer (and even unsafe)
          in the sense that we know statically if a var handle is going
          to perform aligned access or not. So it could be possible _in
          principle_ to use Unsafe::getDouble or Unsafe::getLong +
          Double.longBitsToDouble() depending on the var handle
          characteristics.</blockquote>
        <p></p>
      </div>
      <p style="margin: 0px 0px 1.2em !important;"></p>
      <p style="margin: 0px 0px 1.2em !important;">Pulling more on this
        string, I’ve updated my branch:</p>
      <p style="margin: 0px 0px 1.2em !important;"><a href="https://github.com/openjdk/jdk/compare/master...mcimadamore:jdk:AddBenchmark?expand=1" class="moz-txt-link-freetext">https://github.com/openjdk/jdk/compare/master...mcimadamore:jdk:AddBenchmark?expand=1</a></p>
      <p style="margin: 0px 0px 1.2em !important;">This adds a new
        tweak: if the memory access var handle is fully aligned (meaning
        it supports atomic access), <em>and</em> we don’t need byte
        swap, then we can use Unsafe::get/putFloat/Double directly.</p>
      <p style="margin: 0px 0px 1.2em !important;">Nice bump in
        benchmark:</p>
      <pre style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em; line-height: 1.2em;margin: 1.2em 0px;"><code style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;white-space: pre; overflow: auto; border-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em 0.7em; display: block !important;">Benchmark                                    Mode  Cnt    Score   Error  Units
AddBenchmark.scalarArrayArray                avgt   30   93.752 ± 1.277  ns/op
AddBenchmark.scalarArrayArrayLongStride      avgt   30  490.534 ± 6.185  ns/op
AddBenchmark.scalarBufferArray               avgt   30  346.950 ± 1.382  ns/op
AddBenchmark.scalarBufferBuffer              avgt   30  339.950 ± 1.595  ns/op
AddBenchmark.scalarSegmentArray              avgt   30  101.052 ± 0.527  ns/op
AddBenchmark.scalarSegmentSegment            avgt   30  310.086 ± 4.169  ns/op
AddBenchmark.scalarSegmentSegmentLongStride  avgt   30  305.144 ± 3.329  ns/op
AddBenchmark.scalarUnsafeArray               avgt   30   96.492 ± 1.391  ns/op
AddBenchmark.scalarUnsafeUnsafe              avgt   30  363.458 ± 3.796  ns/op
</code></pre>
      <p style="margin: 0px 0px 1.2em !important;">Note how now
        scalarSegmentArray is as fast as scalarArrayArray (!!)</p>
      <p style="margin: 0px 0px 1.2em !important;">Cheers<br>
        Maurizio</p>
      <div title="MDH:PHA+PGJyPjwvcD48ZGl2IGNsYXNzPSJtb3otY2l0ZS1wcmVmaXgiPk9uIDIwLzAzLzIwMjQgMTc6
MTgsIE1hdXJpemlvIENpbWFkYW1vcmUgd3JvdGU6PGJyPjwvZGl2PjxibG9ja3F1b3RlIHR5cGU9
ImNpdGUiIGNpdGU9Im1pZDoxOTEyNWEzYi05Y2I1LTQ4YjItODAzYS1hZWQ3Zjc0MWIyNTBAb3Jh
Y2xlLmNvbSI+RkZNIGhhcyBhbiBhZHZhbnRhZ2UgaGVyZSBjb21wYXJlZCB0byBCeXRlQnVmZmVy
IChhbmQgZXZlbgogICAgICB1bnNhZmUpIGluIHRoZSBzZW5zZSB0aGF0IHdlIGtub3cgc3RhdGlj
YWxseSBpZiBhIHZhciBoYW5kbGUgaXMKICAgICAgZ29pbmcgdG8gcGVyZm9ybSBhbGlnbmVkIGFj
Y2VzcyBvciBub3QuIFNvIGl0IGNvdWxkIGJlIHBvc3NpYmxlCiAgICAgIF9pbiBwcmluY2lwbGVf
IHRvIHVzZSBVbnNhZmU6OmdldERvdWJsZSBvciBVbnNhZmU6OmdldExvbmcgKwogICAgICBEb3Vi
bGUubG9uZ0JpdHNUb0RvdWJsZSgpIGRlcGVuZGluZyBvbiB0aGUgdmFyIGhhbmRsZQogICAgICBj
aGFyYWN0ZXJpc3RpY3MuPC9ibG9ja3F1b3RlPjxwPlB1bGxpbmcgbW9yZSBvbiB0aGlzIHN0cmlu
ZywgSSd2ZSB1cGRhdGVkIG15IGJyYW5jaDo8L3A+PHA+aHR0cHM6Ly9naXRodWIuY29tL29wZW5q
ZGsvamRrL2NvbXBhcmUvbWFzdGVyLi4ubWNpbWFkYW1vcmU6amRrOkFkZEJlbmNobWFyaz9leHBh
bmQ9MTwvcD48cD5UaGlzIGFkZHMgYSBuZXcgdHdlYWs6IGlmIHRoZSBtZW1vcnkgYWNjZXNzIHZh
ciBoYW5kbGUgaXMgZnVsbHkgYWxpZ25lZCAobWVhbmluZyBpdCBzdXBwb3J0cyBhdG9taWMgYWNj
ZXNzKSwgKmFuZCogd2UgZG9uJ3QgbmVlZCBieXRlIHN3YXAsIHRoZW4gd2UgY2FuIHVzZSBVbnNh
ZmU6OmdldC9wdXRGbG9hdC9Eb3VibGUgZGlyZWN0bHkuPC9wPjxwPk5pY2UgYnVtcCBpbiBiZW5j
aG1hcms6PC9wPjxwPmBgYDxicj5CZW5jaG1hcmsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsgTW9kZSZuYnNwOyBDbnQmbmJzcDsmbmJzcDsmbmJzcDsgU2NvcmUmbmJzcDsm
bmJzcDsgRXJyb3ImbmJzcDsgVW5pdHM8YnI+QWRkQmVuY2htYXJrLnNjYWxhckFycmF5QXJyYXkm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgYXZndCZuYnNwOyZuYnNwOyAzMCZuYnNw
OyZuYnNwOyA5My43NTIgwrEgMS4yNzcmbmJzcDsgbnMvb3A8YnI+QWRkQmVuY2htYXJrLnNjYWxh
ckFycmF5QXJyYXlMb25nU3RyaWRlJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGF2Z3Qm
bmJzcDsmbmJzcDsgMzAmbmJzcDsgNDkwLjUzNCDCsSA2LjE4NSZuYnNwOyBucy9vcDxicj5BZGRC
ZW5jaG1hcmsuc2NhbGFyQnVmZmVyQXJyYXkmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgYXZn
dCZuYnNwOyZuYnNwOyAzMCZuYnNwOyAzNDYuOTUwIMKxIDEuMzgyJm5ic3A7IG5zL29wPGJyPkFk
ZEJlbmNobWFyay5zY2FsYXJCdWZmZXJCdWZmZXImbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgYXZndCZu
YnNwOyZuYnNwOyAzMCZuYnNwOyAzMzkuOTUwIMKxIDEuNTk1Jm5ic3A7IG5zL29wPGJyPkFkZEJl
bmNobWFyay5zY2FsYXJTZWdtZW50QXJyYXkmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgYXZndCZuYnNw
OyZuYnNwOyAzMCZuYnNwOyAxMDEuMDUyIMKxIDAuNTI3Jm5ic3A7IG5zL29wPGJyPkFkZEJlbmNo
bWFyay5zY2FsYXJTZWdtZW50U2VnbWVudCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBhdmd0Jm5ic3A7Jm5ic3A7IDMwJm5i
c3A7IDMxMC4wODYgwrEgNC4xNjkmbmJzcDsgbnMvb3A8YnI+QWRkQmVuY2htYXJrLnNjYWxhclNl
Z21lbnRTZWdtZW50TG9uZ1N0cmlkZSZuYnNwOyBhdmd0Jm5ic3A7Jm5ic3A7IDMwJm5ic3A7IDMw
NS4xNDQgwrEgMy4zMjkmbmJzcDsgbnMvb3A8YnI+QWRkQmVuY2htYXJrLnNjYWxhclVuc2FmZUFy
cmF5Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGF2Z3QmbmJzcDsmbmJzcDsgMzAmbmJzcDsm
bmJzcDsgOTYuNDkyIMKxIDEuMzkxJm5ic3A7IG5zL29wPGJyPkFkZEJlbmNobWFyay5zY2FsYXJV
bnNhZmVVbnNhZmUmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgYXZndCZuYnNwOyZuYnNwOyAzMCZuYnNw
OyAzNjMuNDU4IMKxIDMuNzk2Jm5ic3A7IG5zL29wPGJyPmBgYDwvcD48cD5Ob3RlIGhvdyBub3cg
c2NhbGFyU2VnbWVudEFycmF5IGlzIGFzIGZhc3QgYXMgc2NhbGFyQXJyYXlBcnJheSAoISEpPC9w
PjxwPkNoZWVyczxicj5NYXVyaXppbzxicj48L3A+" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0;">​</div>
    </div>
  </body>
</html>