In general, arrays cannot be assumed to be 16-byte aligned because it's always possible to create one that isn't using pointer_to_array. However, from Intel's AVX introduction <https://software.intel.com/en-us/articles/introduction-to-intel-advanced-vector-extensions> :
IntelĀ® AVX has relaxed some memory alignment requirements, so now Intel AVX by default allows unaligned access; however, this access may come at a performance slowdown, so the old rule of designing your data to be memory aligned is still good practice (16-byte aligned for 128-bit access and 32-byte aligned for 256-bit access). On Monday, November 24, 2014 10:01:45 PM UTC-5, Erik Schnetter wrote: > > On Mon, Nov 24, 2014 at 9:30 PM, Steven G. Johnson > <[email protected] <javascript:>> wrote: > > Unfortunately, Julia allocates 16-byte aligned data by default (to help > SIMD > > code), and there is no calloc version of posix_memalign as far as I > know. > > The generated machine code I've seen does not make use of this. All > the load/store instructions in vectorized or unrolled loops assume > unaligned pointers. (Plus, with AVX one should align to 32 bytes > instead.) > > -erik > > -- > Erik Schnetter <[email protected] <javascript:>> > http://www.perimeterinstitute.ca/personal/eschnetter/ >
