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 [*].

Reply via email to