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.
Thank you for all the feedback! Cristi On Mon, Feb 17, 2020 at 10:43 AM Maurizio Cimadamore < 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> 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> 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 [*]. >>> >>