Programmazione Funzionale e Parallela

Corso di Laurea in Ingegneria Informatica e Automatica - A.A. 2017-2018

HomePage | Avvisi | Diario lezioni | Materiale didattico | Esami | Forum | Login

Revision [892]

Last edited on 2017-11-25 14:41:36 by CamilDemetrescu
Additions:
Codice assembly 64 bit per la funzione ##somma##:
%%(c;sum256.s)
somma:
vmovdqa (%rdi), %ymm0
vpaddd (%rsi), %ymm0, %ymm0
vmovdqa %ymm0, (%rdx)
ret


Revision [889]

Edited on 2017-11-25 14:37:08 by CamilDemetrescu
Additions:
> gcc sum256.c -o sum256 -O1 -mavx2


Revision [888]

Edited on 2017-11-25 14:36:21 by CamilDemetrescu
Additions:
__m256i a, b, c; // dich. variabili vettoriali
int A[8] __attribute__((aligned(32))) = { 1, 2, 3, 4, 2, 3, 4, 5 };
Deletions:
__m256i a, b, c; // dich. variabili vettoriali
int A[8] /*__attribute__((aligned(32)))*/ = { 1, 2, 3, 4, 2, 3, 4, 5 };


Revision [887]

Edited on 2017-11-25 14:35:50 by CamilDemetrescu
Additions:
__m256i a, b, c; // dich. variabili vettoriali
Deletions:
__m256i a, b, c; // dich. variabili vettoriali


Revision [886]

Edited on 2017-11-25 14:35:36 by CamilDemetrescu
Additions:
__m128i a, b, c; // dich. variabili vettoriali
Deletions:
__m128i a, b, c; // dich. variabili vettoriali


Revision [885]

Edited on 2017-11-25 14:35:31 by CamilDemetrescu
Additions:
__m128i a, b, c; // dich. variabili vettoriali
Deletions:
__m128i a, b, c; // dich. variabili vettoriali


Revision [884]

Edited on 2017-11-25 14:35:22 by CamilDemetrescu
Additions:
__m128i a, b, c; // dich. variabili vettoriali
c = _mm_add_epi32(a,b); // calcola la somma vett. di a e b
_mm_store_si128((__m128i*)C, c); // copia risultato c in C
Deletions:
__m128i a, b, c; // dich. variabili vettoriali
c = _mm_add_epi32(a,b); // calcola la somma vett. di a e b
_mm_store_si128((__m128i*)C, c); // copia risultato c in C


Revision [883]

Edited on 2017-11-25 14:35:13 by CamilDemetrescu
Additions:
__m128i a, b, c; // dich. variabili vettoriali
Deletions:
__m128i a, b, c; // dich. variabili vettoriali


Revision [882]

Edited on 2017-11-25 14:35:03 by CamilDemetrescu
Additions:
__m128i a, b, c; // dich. variabili vettoriali
Deletions:
__m128i a, b, c; // dich. variabili vettoriali


Revision [881]

Edited on 2017-11-25 14:34:49 by CamilDemetrescu
Additions:
==Esempio 1==
Somma vettoriale di array a 128 bit:
Compilazione:
==Esempio 2==
Somma vettoriale di array a 256 bit:
%%(c;sum256.c)
void somma(int A[8], int B[8], int C[8]) {
__m256i a, b, c; // dich. variabili vettoriali
a = _mm256_load_si256((const __m256i*)A); // copia primo vettore in a
b = _mm256_load_si256((const __m256i*)B); // copia secondo vettore in b
c = _mm256_add_epi32(a,b); // calcola la somma vett. di a e b
_mm256_store_si256((__m256i*)C, c); // copia risultato c in C
int A[8] /*__attribute__((aligned(32)))*/ = { 1, 2, 3, 4, 2, 3, 4, 5 };
int B[8] __attribute__((aligned(32))) = { 4, 3, 2, 1, 4, 3, 2, 1 };
int C[8] __attribute__((aligned(32)));
printf("%d %d %d %d %d %d %d %d\n", C[0], C[1], C[2], C[3], C[4], C[5], C[6], C[7]); // stampa 5 5 5 5 6 6 6 6
Deletions:
==Esercizio 1==


Revision [880]

Edited on 2017-11-25 14:22:46 by CamilDemetrescu
Additions:
Perché ##sse2##? Si consulti la [[https://software.intel.com/sites/landingpage/IntrinsicsGuide/ guida Intel intrinsic SIMD]] e si noti che le istruzioni ##_mm_loadu_si128##, ##_mm_storeu_si128## e ##_mm_add_epi32## sono disponibile a partire dalla tecnologia ##SSE 2##.
Deletions:
Perché ##sse2##? Si consulti la [[https://software.intel.com/sites/landingpage/IntrinsicsGuide/ guida Intel intrinsic SIMD]] e si noti che l'instruzione ##_mm_add_epi32## è disponibile a partire dalla tecnologia ##SSE 2##.


Revision [879]

Edited on 2017-11-25 14:21:52 by CamilDemetrescu
Additions:
> gcc sum128.c -o sum128 -O1 -msse2
Perché ##sse2##? Si consulti la [[https://software.intel.com/sites/landingpage/IntrinsicsGuide/ guida Intel intrinsic SIMD]] e si noti che l'instruzione ##_mm_add_epi32## è disponibile a partire dalla tecnologia ##SSE 2##.
Deletions:
> gcc sum128.c -o sum128 -O1 -msse4.2
Perché ##sse4.2##? Si consulti la [[https://software.intel.com/sites/landingpage/IntrinsicsGuide/ guida Intel intrinsic SIMD]] e si noti che l'instruzione ##_mm_add_epi32## è disponibile a partire dalla tecnologia ##SSE 4.2##.


Revision [878]

Edited on 2017-11-25 14:21:07 by CamilDemetrescu
Additions:
> gcc sum128.c -o sum128 -O1 -msse4.2
Perché ##sse4.2##? Si consulti la [[https://software.intel.com/sites/landingpage/IntrinsicsGuide/ guida Intel intrinsic SIMD]] e si noti che l'instruzione ##_mm_add_epi32## è disponibile a partire dalla tecnologia ##SSE 4.2##.


Revision [877]

The oldest known version of this page was created on 2017-11-25 14:17:35 by CamilDemetrescu
Valid XHTML 1.0 Transitional :: Valid CSS :: Powered by WikkaWiki
Page was generated in 0.0233 seconds