On 18/02/2020 03:52, Chris T wrote:
Maurizio, thank you for your suggestion! One of my coworkers suggested
also using padding instead of keeping a compact/packed memory layout.
The reason my example worked was because Java char is 2 bytes and int
is 4... So using 16-bit alignment for "creditScore" the was the common
denominator.
Hah - been staring at C types too much lately - that explains it of
course :-)
Thanks
Maurizio
Thank you for all the feedback!
Cristi
On Mon, Feb 17, 2020 at 10:43 AM Maurizio Cimadamore
<maurizio.cimadam...@oracle.com
<mailto:maurizio.cimadam...@oracle.com>> wrote:
Hi Chris,
thanks for the links - took a look at your first test and, more
specifically at example03SSNToCreditScore:
MemoryLayout ssnAndCreditStruct = MemoryLayout.ofStruct(
MemoryLayout.ofSequence(9,
MemoryLayout.ofValueBits(Character.SIZE, order)).withName("ssn"),
MemoryLayout.ofValueBits(Integer.SIZE,
order).withName("creditScore").withBitAlignment(16));
I guess this is what you referred to when you spoke about
alignment. Here the root problem is that you have a sequence of 9
chars - hence 9 bytes, which is not a multiple of 4 (the size of
an int). So the "creditScore" field will start at offset 9 (in
bytes) - meaning that the int will not be aligned. You have two
options here:
1) You do what a C compiler would have done - e.g. you add a
padding layout between the sequence layout and the credit score
layout:
MemoryLayout ssnAndCreditStruct = MemoryLayout.ofStruct(
MemoryLayout.ofSequence(9,
MemoryLayout.ofValueBits(Character.SIZE, order)).withName("ssn"),
*MemoryLayout.ofPaddingBits(16)*,
MemoryLayout.ofValueBits(Integer.SIZE,
order).withName("creditScore"));
2) relax the alignment constraints of the credit score field -
e.g. from being 4-byte aligned to be 1-byte aligned (your example
relaxes it to 2-byte aligned, not 100% if that is correct?)
You do (1) in normal cases, where you want fast, aligned access -
(2) should be done in cases where you want packed layouts - but it
is possible that (2) might still not work (not all platform
supports unaligned access primitives, and not in all possible
access modes - e.g. atomic).
Maurizio
This should take care of the issue
On 17/02/2020 04:58, Chris T wrote:
Maurizio, thanks for pointing the bug out - however I don't think
I was impacted by it.
I agree with you that a more complex examples might distract the
audience from the main presentation points.
As mentioned in one of my previous email, I finalized some
examples myself:
1. One example for memory layouts creates a structure where we
associate the SSN (social security number) to a credit score. The
main point here is to make a mix between char arrays and integers.
Code is here:
https://github.com/knowledge-base-and-tutorials/java14-features/blob/master/src/main/java/com/github/kbnt/java14/fma/ForeignMemoryAccessExamples.java
<https://urldefense.com/v3/__https://github.com/knowledge-base-and-tutorials/java14-features/blob/master/src/main/java/com/github/kbnt/java14/fma/ForeignMemoryAccessExamples.java__;!!GqivPVa7Brio!Pf9Nt42jivBKFcxTzsgBVXVMil8JZN4IRFDQyoAO0Z-g4vnp-zkHGM8CgPO6aZD458bQ8Ps$>
(method called example03SSNToCreditScore)
Presentation of the case is here:
https://www.youtube.com/watch?v=NwXzT8T6mb8&list=PLGDP1Irs2PmWNwAwMPdyOxCqkFqB6gtp9&index=7&t=1287s
<https://urldefense.com/v3/__https://www.youtube.com/watch?v=NwXzT8T6mb8&list=PLGDP1Irs2PmWNwAwMPdyOxCqkFqB6gtp9&index=7&t=1287s__;!!GqivPVa7Brio!Pf9Nt42jivBKFcxTzsgBVXVMil8JZN4IRFDQyoAO0Z-g4vnp-zkHGM8CgPO6aZD4Sn1yqXM$>
2. A more complex example (in memory off-heap analytics and
memory mapped files) is the sleep analytics:
Code is here:
https://github.com/knowledge-base-and-tutorials/java14-features/blob/master/src/main/java/com/github/kbnt/java14/fma/SleepAnalytics.java
<https://urldefense.com/v3/__https://github.com/knowledge-base-and-tutorials/java14-features/blob/master/src/main/java/com/github/kbnt/java14/fma/SleepAnalytics.java__;!!GqivPVa7Brio!Pf9Nt42jivBKFcxTzsgBVXVMil8JZN4IRFDQyoAO0Z-g4vnp-zkHGM8CgPO6aZD4obcpcxw$>
(the class' javadoc should describe it)
Presentation of the case is here:
https://www.youtube.com/watch?v=NwXzT8T6mb8&list=PLGDP1Irs2PmWNwAwMPdyOxCqkFqB6gtp9&index=7&t=1734s
<https://urldefense.com/v3/__https://www.youtube.com/watch?v=NwXzT8T6mb8&list=PLGDP1Irs2PmWNwAwMPdyOxCqkFqB6gtp9&index=7&t=1734s__;!!GqivPVa7Brio!Pf9Nt42jivBKFcxTzsgBVXVMil8JZN4IRFDQyoAO0Z-g4vnp-zkHGM8CgPO6aZD47XZakCQ$>
If you find anything useful in those and want to use but the
license (Apache 2.0 for the code and CC-BY-SA for the videos) is
in the way, let me know and I can change them to something
friendlier (where e.g. no attribution is needed).
Cheers!
Chris T
On Fri, Feb 14, 2020 at 6:26 PM Maurizio Cimadamore
<maurizio.cimadam...@oracle.com
<mailto:maurizio.cimadam...@oracle.com>> wrote:
On 13/02/2020 03:39, Chris T wrote:
No problem! Nice talk at FOSDEM, Maurizio ;-)!
One suggestion, for future talks - when it comes to memory
layouts please construct an example that is a little bit
more complex (by end of the upcoming weekend I will publish
one that can be used). I had trouble with bit alignment when
working on mine, but I will come back with the details (no
bug or anything but more clarity would be beneficial in the
docs). In your example (the Point one) the alignment is 32
but that is now always the case... The reason I mention this
as an issue is that the Java development community is more
"high-level". Believe it or not, bit alignment is not
anymore "a thing" with most of us ;-)...
Hey Chris - on alignment there was an issue that was
uncovered on panama-dev - I think this fix should probably be
ported to mainline:
https://bugs.openjdk.java.net/browse/JDK-8238320
This might make working with layout with padding a bit more
tedious than intended, although this is probably not what you
ran into.
Re: talk suggestion - yes, more realistic examples would
probably be better - but it's always hard to strike the right
balance; if the example is more realistic it can be harder to
follow, which might not be good when you are showing new
concepts. But I'll keep that in mind for the future - after
all this is a new API, and, as it's always the case, the more
you think about how to explain these concepts and the more
you do it, the more ways you find to get the message across
in an optimal way.
Thanks!
Maurizio
I will also think about some API enhancements I would like
to see as a developer...
Thanks!
Chris T
On Tue, Feb 11, 2020 at 4:07 AM Maurizio Cimadamore
<maurizio.cimadam...@oracle.com
<mailto:maurizio.cimadam...@oracle.com>> wrote:
Thanks Paul!
Maurizio
On 10/02/2020 17:58, Paul Sandoz wrote:
> I modified the JEP with updated code snippets that
compile against the latest API in JDK 14 [*].