DMD 1.034 and 2.018 releases - Align

Pete example at example.com
Mon Aug 11 06:56:52 PDT 2008


bearophile Wrote:

> Aligned memory for array ops:
> 
> The MMX (etc), SSE, SSE2, SSE3, SSSE3, SSE4, SSE4.1, SSE4.2, SSE4a, SSE5, AVE instructions require data aligned to 8/16 bytes (and maybe more in the future, the D language has to be flexible for things present in the CPUs 3 years from now), the current array ops of D contain code that manages such problems in the alignment, but I presume properly aligned data may lead to better performance.
> 
> If the static/dynamic pointers in D aren't guaranteed to be aligned to 8/16 (and in the future maybe 32 bytes) then a syntax may be added to ensure it. 
> 
> I presume that something like this may solve the problem with dynamically allocated pointers, but it's not nice looking, it's error-prone, and you have to keep both pointers around in your program:
> 
> memPtr = malloc(sizeInBytes + alignmentInBytes - 1);
> alignedPtr = (T*)( ((int)memPtr + alignmentInBytes - 1) & ~(alignmentInBytes - 1) );
> 
> A first possible syntax (mostly by LeoD):
> 
> align(16) int[10] a; // static
> auto a = align(32) new int[100]; // dynamic pointer
> 
> Bye,
> bearophile

Ah. You got there before me :-)


More information about the Digitalmars-d-announce mailing list