Sunteți pe pagina 1din 4

1 Lucrarea 5

1.1 Exercițiul 1
Pornind de la exercițiile din laboratorul anterior, adăugați opțiunea de
a paraleliza calculul matricial pe mai multe nuclee folosind biblioteca
OpenMP[1]. Măsurați timpul de rulare pe 1, 2, 3, respectiv 4 nuclee.
Argumentați de ce nu există concurență și conflicte pe date. Implantați
înmulțirea într-o funcție și salvați-o pentru mai târziu

Indicații
Biblioteca OpenMP permite paralelizarea buclelor din cod folosind
directive pre-procesor de tipul #pragma omp. De exemplu, o buclă
for poate fi paralelizată urmând exemplul:

#pragma omp parallel for


for(int i = 0; i < N; i++) {
// codul dvs. aici
}

Biblioteca OpenMP se include folosind #include <omp.h>. Pentru


a compila codul trebuie să specificăm directive de compilare, care sunt

1
1 Lucrarea 5

precedate de argumentul -f, în cazul OpenMP se adăugă, la comanda


de compilare, -fopenmp.
Rulați pe 10 dimensiuni de matrici, realizați un tabel cu timpii de
rulare și realizați un grafic de tip bară.

1.2 Exercițiul 2
Procesoarele ARM dispun de o extensie SIMD, numită NEON. Inte-
grați implementarea realizată de compania ARM, pentru înmulțirea
vectorizată de matrici[2].

Indicații
Biblioteca NEON se include folosind #include <arm_neon.h>. Pen-
tru această bibliotecă, nu trebuie folosită nicio directivă de compilare.

1.3 Exercițiul 3
Să se realizeze o implementare vectorizată a înmulțirii de matrici,
pornind de la implementările anterioare și folosind extensia NEON.
Implantați înmulțirea într-o funcție și salvați-o pentru mai târziu

Indicații
Documentația pentru comenzile din Neon este disponibilă pe site-ul
GCC[3].

2
1.4 Exercițiul 4

1.4 Exercițiul 4
Pornind de la exercițiul anterior, adaugați și OpenMP la implementa-
rea cu NEON. Implantați înmulțirea într-o funcție și salvați-o pentru
mai târziu

1.5 Exercițiul 5
Realizați o comparație a timpilor de rulare între înmulțirile de matrici.
Algoritmi care trebuiesc comparați sunt:

• Înmulțirea „naivă”.

• Înmulțire „cahe-optimize”.

• Înmulțire pe mai multe nuclee.

• Înmulțire vectorizată cu extensia NEON, realizată de compania


ARM.

• Înmulțire vectorizată cu extensia NEON, realizată de voi.

• Înmulțire vectorizată, cahe-optimaze și paralelizată.

Indicații
Rulați pe 10 dimensiuni de matrici, realizați un tabel cu timpii de
rulare și realizați un grafic de tip linie.

3
Bibliografie
[1] ECE 563: OpenMP, url: https://engineering.purdue.edu/
~smidkiff/ece563/files/ECE563OpenMPTutorial.pdf.
[2] Example - matrix multiplication, url: https : / / developer .
arm.com/documentation/102467/0200/Example---matrix-
multiplication.
[3] ARM NEON Intrinsics, url: https : / / gcc . gnu . org /
onlinedocs/gcc-4.4.7/gcc/ARM-NEON-Intrinsics.html.

S-ar putea să vă placă și