Ho trovato in più di un programma SIMD l'istruzione __attribute__((aligned(16)))
. Quando ho cercato una spiegazione ho trovato
The keyword attribute allows you to specify special attributes of variables or structure fields.
Apparentemente le variabili hanno attributi. Questi attributi sono specifici della lingua? quali attributi può avere una variabile? dove sono memorizzati questi attributi? Riguardo al soggetto di allineato (16), l'ho trovato
causes the compiler to allocate [a variable] on a 16-byte boundary
Ma è obbligatorio che le variabili SIMD ( m128i per esempio) siano allineate su 16 byte? Se sì, suppongo che questo sia il motivo per cui usiamo __attribute ((aligned (16))) in questo modo:
int a[16] __attribute__((aligned(16))) = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
__vector signed int *va = (__vector signed int *) a;