Differences

This shows you the differences between two versions of the page.

Link to this comparison view

apd:laboratoare:09 [2021/01/11 13:12]
florin.mihalache [Broadcast]
apd:laboratoare:09 [2023/10/08 16:33] (current)
dorinel.filip
Line 1: Line 1:
-===== Laboratorul 09 - Operații distribuite în MPI ===== +===== Laboratorul 9 - Operații ​și prelucrări ​distribuite în MPI ===== 
- +Documentația de laborator s-a mutat la [[https://mobylab.docs.crescdi.pub.ro/docs/parallelAndDistributed/introduction|această adresă]].
-==== Reduce ==== +
-Operația de reduce (cunoscută în limbajele funcționale ​Haskell, Racket - drept fold) reprezintă un tip de operație prin care elementele unei colecții sunt restrânse / acumulate într-un singur rezultat, printr-o singură operație aplicată între elementele unei colecții (+, *, min, max etc.) +
- +
-Exemplu: +
-<​code>​ +
-l = [1, 2, 3, 4, 5, 6] +
-op = + +
-rezultat = 1 + 2 + 3 + 4 + 5 + 6 = 21 +
-</code> +
- +
-În MPI, operația reduce este implementată în funcția MPI_Reduce, însă în cadrul laboratorului vom discuta cum poate fi implementată,​ de mână, această operație în MPI. +
- +
-Aici aveți atașate slide-uri, care descriu în detaliu pașii de implementare ai operației reduce: {{:​apd:​laboratoare:​reduce.pdf|slides}} +
- +
-În concluzie, ultimul proces va avea valoarea finală. +
- +
-Pseudocod:​ +
-<​code>​ +
-for (pas = 2; pas <= nr_procese; pas *= 2) +
- if (rank % pas == 0) +
- primește la procesul cu rank-ul [rank + (pas 2)] +
- adună +
-        else if (rank % (pas 2) == 0) +
-                trimite la procesul cu rank-ul [rank - (pas 2)] +
-</​code>​ +
-==== Scan ==== +
-Operația de scan este similară operației de reduce (acumularea elementelor unei colecții într-un singur rezultat). Diferența față de reduce este că primul proces din comunicator deține rezultatul final, practic scan reprezintă inversul lui reduce. +
- +
-Exemplu: +
-<​code>​ +
-l = [1, 2, 3, 4, 5, 6] +
-op = + +
-rezultat = 1 + 2 + 3 + 4 + 5 + 6 = 21 +
- +
-Pași: +
-[1, 2, 3, 4, 5, 6] +
-[1, 3, 3, 4, 5, 6] +
-[1, 3, 6, 4, 5, 6] +
-[1, 3, 6, 10, 5, 6] +
-[1, 3, 6, 10, 15, 6] +
-[1, 3, 6, 10, 15, 21] -> rezultatul este 21 +
-</​code>​ +
- +
-Aici aveți atașate slide-uri, care descriu în detaliu pașii de implementare ai operației scan: {{:​apd:​laboratoare:​scan.pdf|slides}} +
- +
-Pseudocod:​ +
-<​code>​ +
-for (pas = 1; pas < nr_procese; pas *= 2) +
- if (rank + pas < nr_procese) +
- trimite la procesul cu rank-ul [rank + pas] +
-        else if (rank - pas > 0) +
-                primește de la procesul cu rank-ul [rank - pas] +
-                adună  +
-</​code>​ +
-==== Broadcast ==== +
-Operația de broadcast este o operație prin care un proces trimite o valoare tuturor proceselor din cadrul comunicatorului. Această operație este reprezentată,​ în MPI, de MPI_Bcast (remember laboratorul 8). +
- +
-Aici aveți atașate slide-uri, care descriu în detaliu pașii de implementare ai operației broadcast: {{:​apd:​laboratoare:​broadcast.pdf|slides}} +
- +
-Pseudocod:​ +
-<​code>​ +
-for (pas = 1; pas < nr_procese; pas *= 2) +
- if (rank < pas and rank + pas < nr_procese) +
- trimite la procesul cu rank-ul [rank + pas] +
-        else if (rank >= pas and rank < pas * 2) +
-                primește de la procesul cu rank-ul [rank - pas] +
-</​code>​ +
-==== Pipeline ==== +
-==== Calculul unui polinom folosind pipeline ==== +
-==== Sortarea folosind pipeline ==== +
-==== Rank Sort ==== +
-==== Exerciții ====+
apd/laboratoare/09.1610363556.txt.gz · Last modified: 2021/01/11 13:12 by florin.mihalache
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0