

![]() | Start a set with this search |
![]() | Include this search in one of my sets |
![]() | Exclude this search from one of my sets |
![]() | Permalink to these results Paste this link in email or IM: |
| Atom feed for tracking future search results Paste this URL into your reader: |
10 messages in net.java.dev.jna.usersRe: [jna-users] setting structure ali...| From | Sent On | Attachments |
|---|---|---|
| Rui Caridade | Dec 8, 2008 6:07 pm | |
| Timothy Wall | Dec 8, 2008 7:18 pm | |
| Rui Caridade | Dec 8, 2008 8:26 pm | |
| Timothy Wall | Dec 8, 2008 8:54 pm | |
| Rui Caridade | Dec 8, 2008 9:05 pm | |
| Rui Caridade | Dec 10, 2008 5:11 pm | .log |
| Timothy Wall | Dec 10, 2008 6:05 pm | |
| Rui Caridade | Dec 10, 2008 6:13 pm | |
| Rui Caridade | Dec 11, 2008 2:50 am | |
| Timothy Wall | Dec 11, 2008 5:24 am |

![]() | Permalink for this message Paste this link in email or IM: |
![]() | Permalink for this thread Paste this link in email or IM: |
| Atom feed for this thread Paste this URL into your reader: |
| Subject: | Re: [jna-users] setting structure alignment | Actions... |
|---|---|---|
| From: | Timothy Wall (twal...@dev.java.net) | |
| Date: | Dec 10, 2008 6:05:00 pm | |
| List: | net.java.dev.jna.users | |
On Dec 10, 2008, at 8:12 PM, Rui Caridade wrote:
Hello. I've been testing the bindings and sometimes it crashes the vm :| The err log goes at attachment. The crash is more frequent ,read happens most of the time if i call the lib for example as follows
SIMDx86Vector vector = null; vector = SIMDx86Vector.allocate(); vector.x = 2.0f; vector.y = 2.0f; vector.z = 2.0f; System.out.println("X " + vector.x + " Y " + vector.y + " Z " + vector.z); simd.SIMDx86Vector_Scale(vector,scale); //System.out.println(vector.toString()); System.out.println("X " + vector.x + " Y " + vector.y + " Z " + vector.z);
If i don't comment vector.toString() i get
X 2.0 Y 2.0 Z 2.0 SIMDx86Vector(allocated@0x9a53bc8 (12 bytes)) {
This address is aligned to 8 bytes, not 16 ----^
In addition, your original C structure had 4 bytes padding to ensure a block size of 16 bytes; your Java structure is only 12 bytes, which means a likely read or write outside of allocated memory.
Your structure will need to allocate 15 bytes extra if there's any chance the pointer allocated might need alignment. Memory.align() does not allocate more memory, it just changes the base pointer and reduces the size of the allocated block.
float x@0=4.0 float y@4=4.0 float z@8=4.0 } memory dump [00008040] [00008040] [00008040] X 4.0 Y 4.0 Z 4.0
Can anyone please point me to what i'm doing wrong? Thank you in advance
From: Rui Caridade <waih...@yahoo.com> To: use...@jna.dev.java.net Sent: Tuesday, December 9, 2008 5:05:55 AM Subject: Re: [jna-users] setting structure alignment
Well i could have couldn't i :| It would have been simpler....
From: Timothy Wall <twal...@dev.java.net> To: use...@jna.dev.java.net Sent: Tuesday, December 9, 2008 4:55:08 AM Subject: Re: [jna-users] setting structure alignment
Maybe I'm missing something, but why not just put the "align" call into the SIMDx86Vector ctor?
On Dec 8, 2008, at 11:27 PM, Rui Caridade wrote:
Thank you :) I've tested a bit more and it all seems to work :) Jna is great :) For correctness sake, this was what i did:
protected static void setAlignment(Structure c ){ ((Memory)(c.getPointer())).align(4); }
and then for instance on Vector
SIMDx86Vector v =(SIMDx86Vector) Structure.newInstance(SIMDx86Vector.class); SIMDx86Factory.setAlignment(v); return v;
Is this correct way to do it ? :) Thank you again for your fast and unvaluable help From: Timothy Wall <twal...@dev.java.net> To: use...@jna.dev.java.net Sent: Tuesday, December 9, 2008 3:18:39 AM Subject: Re: [jna-users] setting structure alignment
You'll need to explicitly ensure that the memory allocated for the structure is aligned, using Memory.align(4).
On Dec 8, 2008, at 9:08 PM, Rui Caridade wrote:
Hello.
I'm currently working on creating bindings for libSIMDx86
(http://simdx86.sourceforge.net/
).
Some structures are aligned to the 16th byte for instance
typedef struct SIMDx86Vector { float x, y, z; float __SIMD_pad__; /* Padding to 16th byte for SIMD operations (3DNow!/SSE) */ } SIMDx86Vector ALIGNED;
Where aligned is
#if defined(__GNUC__) #define ALIGNED __attribute__(( aligned(16) )) #elif defined(_MSC_VER) #define ALIGNED __declspec(align(16)) #endif
My implementation is as follows
public class SIMDx86Vector extends Structure {
float x, y, z; float __SIMD_pad__; /* Padding to 16th byte for SIMD operations (3DNow!/SSE) */
public SIMDx86Vector allocate(){ return (SIMDx86Vector) Structure.newInstance(this.getClass()); } }
My question is do i need to do anything more on the Java side? All the best and thanks in advance
---------------------------------------------------------------------
To unsubscribe, e-mail: user...@jna.dev.java.net For additional commands, e-mail: user...@jna.dev.java.net
--------------------------------------------------------------------- To unsubscribe, e-mail: user...@jna.dev.java.net For additional commands, e-mail: user...@jna.dev.java.net
< hs_err_pid4412 .log
---------------------------------------------------------------------
To unsubscribe, e-mail: user...@jna.dev.java.net For additional commands, e-mail: user...@jna.dev.java.net








.log