<!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>