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

Reply via email to