Dove le istruzioni SSE di x86-64 (istruzioni vettoriali) superano le normali istruzioni. Perché quello che vedo è che i carichi e gli archivi frequenti richiesti per l'esecuzione delle istruzioni SSE stanno annullando qualsiasi guadagno che abbiamo a causa del calcolo vettoriale. Quindi qualcuno potrebbe darmi un esempio di codice SSE dove funziona meglio del normale codice.Dove le istruzioni SSE superano le normali istruzioni
La sua forse perché sto passando ogni parametro a parte, come questo ...
__m128i a = _mm_set_epi32(pa[0], pa[1], pa[2], pa[3]);
__m128i b = _mm_set_epi32(pb[0], pb[1], pb[2], pb[3]);
__m128i res = _mm_add_epi32(a, b);
for(i = 0; i < 4; i++)
po[i] = res.m128i_i32[i];
Non c'è un modo per passare tutti i 4 interi in una volta sola, voglio dire passare l'intero 128 byte di pa
in una volta? E assegnare res.m128i_i32
a po
in una volta?
Fondamentalmente, ogni volta che si ha un altissimo calcolo/load-store rapporto. – Mysticial
Sì, sicuramente non vuoi usare '_mm_set_epi32()' come quello. Usa '_mm_load_si128()'.E se non riesci ad allineare i dati, puoi usare '_mm_loadu_si128()' a una penalizzazione delle prestazioni. – Mysticial
Allinea i dati? Cosa intendi con quello? – pythonic