Questo non è solo specifico per SSE (o anche x86). Sulla maggior parte delle architetture, i carichi e i negozi devono essere allineati in modo naturale altrimenti (a) generano un'eccezione o (b) necessitano di due o più cicli più un po 'di correzione per gestire il carico disallineato/il negozio in modo trasparente. Su x86 (b) è vero per i tipi di dati < 16 byte ma (a) è vero per i tipi di dati SSE a meno che non si utilizzino esplicitamente versioni disallineate delle istruzioni di carico/archivio che possono gestire dati non allineati.
Ci si potrebbe chiedere: perché non utilizzare solo le versioni disallineate di queste istruzioni di caricamento/immagazzinamento SSE indipendentemente dall'allineamento? La risposta è che queste istruzioni sono in genere molto più lente delle loro controparti allineate poiché generalmente si comportano come per (b) sopra, il che le rende in genere 2x o più lente, a parte le recenti CPU Intel come Core i7, dove la penalità è molto più piccola , ma non insignificante.
fonte
2013-02-12 00:32:25
E tenere presente che anche su core moderni in cui gli accessi disallineati sono generalmente veloci, gli accessi alle pagine sono ancora piuttosto lenti. Se il buffer è abbastanza grande e disallineato, conterrà incroci di pagine. –
Vero, e il superamento dei limiti della linea di cache a causa di carichi disallineati può comportare un ingombro della cache più ampio che può anche avere un impatto negativo sulle prestazioni. –
Attraversare le pagine è anche peggio ... – Mysticial