Programmazione Funzionale e Parallela

Corso di Laurea in Ingegneria Informatica e Automatica - A.A. 2021-2022

Home | Avvisi | Diario lezioni | Esercitazioni | Materiale didattico | Esami | Valutazioni studenti

Esercitazione del 4 maggio 2020

Istruzioni per l’esercitazione:

Per maggiori informazioni fate riferimento al regolamento delle esercitazioni.

Esercizio 1 (ciclo interno prodotto di matrici con vettorizzazione)

Si scriva una versione vettorizzata SSE o AVX add_prod della seguente funzione add_prod_seq inclusa nel file E3/e3.c scaricato:

static void add_prod_seq(const short* src, short* dst, short x, int n) {
    int j;
    for (j=0; j < n; ++j) dst[j] += x * src[j];
}

La funzione realizza il ciclo più interno in un codice di prodotto di matrici di short.

Suggerimento. Se si opta per SSE, usare in particolare:

Si veda il sito Intel e la dispensa sul parallelismo per la documentazione sugli intrinsic SSE/AVX.

Usare il main di prova nella directory di lavoro E1 digitando make per compilare e ./es1 per eseguire il programma. Testare inoltre il codice con valgrind ./e1. Non modificare alcun file tranne e1.c e nessuna funzione in e1.c tranne add_prod.

Esercizio 2 (numero di occorrenze in array con vettorizzazione)

Si scriva una versione vettorizzata SSE o AVX count_occ della seguente funzione count_occ_seq inclusa nel file E4/e4.c scaricato:

int count_occ_seq(const char* v, int n, char x) {
    int i, cnt = 0;
    for (i=0; i < n; ++i) cnt += v[i] == x;
    return cnt;
}

La funzione conta il numero di occorrenze di x nell’array v di lunghezza n.

Suggerimento. Se si opta per SSE, usare in particolare:

Si veda per ispirazione la soluzione dell’esercizio cdiff discussa in dettaglio nella lezione del 27 aprile 2020.

Usare il main di prova nella directory di lavoro E2 digitando make per compilare e ./es2 per eseguire il programma. Testare inoltre il codice con valgrind ./e2. Non modificare alcun file tranne e4.c e nessuna funzione in e2.c tranne count_occ.

Valid XHTML 1.0 Transitional     Valid CSS!