matrice de multiplicare prin curea
Din definiția matrice de multiplicare, rezultă că calcularea tuturor elementelor matricei C poate fi efectuată în mod independent. Ca urmare, o posibilă abordare pentru calcul paralel este utilizată ca bază subactivități proceduri pentru determinarea unui element al C. matricea rezultat Pentru efectuarea tuturor calculelor necesare pentru fiecare subactivitate trebuie să conțină un singur rând de matricei A și o coloană de B. matrice Suma totală obținută cu această abordare subactivități este egal cu (numărul de elemente ale matricei C). Se poate observa că nivelul de paralelism este atins în majoritatea cazurilor, redundante. De obicei, atunci când se realizează calcule practice astfel de subactivități cantitate format mai mare decât numărul de procesoare disponibile și face ca sarcinile de bază etapa grosieră inevitabile. Prin urmare, definim o sarcină de bază ca procedura de calcul a tuturor elementelor unuia dintre rândurile de C. matrice Această abordare reduce numărul total de subactivități la valoarea n. Pentru a efectua toate calculele necesare ale sarcinile secundare de bază trebuie să fie disponibile la unul dintre rândurile matricei A și toate coloanele din matricea B. Soluția simplă la această problemă - dublarea B în toate sarcinile secundare nu este optim în ceea ce privește costurile de stocare a memoriei. Prin urmare, algoritmi trebuie să fie construite în așa fel încât, în fiecare dată curentă subactivități conține doar o parte din datele necesare pentru efectuarea calculelor, precum și accesul la restul datelor vor fi furnizate prin intermediul unui transfer de date între procesoare.
Algoritmul este o procedură iterativă, numărul de iterații este egal cu numărul de subactivități. La fiecare iterație a algoritmului, fiecare subactivitate conține un rând de matricei A și o coloană a matricei B. Când iterația se realizează înmulțirea scalară conținute în sarcinile secundare de rânduri și coloane, care rezultă în elementele corespunzătoare ale matricei rezultat C. La finalizarea calculului, la sfârșitul fiecărei iterații, coloanele matricei în trebuie transferate între sarcini, astfel încât fiecare subactivitate dovedit noi coloane din matrice și noi elemente pot fi calculate matricea C. in plus, acest transfer de coloane m subactivități forward trebuie aranjate astfel încât după finalizarea iterații în fiecare secvențial subactivitate transformat toate coloanele matricei B. schemă simplă posibilă a secvenței de transmisie necesară a coloanelor între sarcinile secundare este de a furniza subactivități comunicații informaționale topologie într-o structură de inel. În acest caz, la fiecare iterație subactivitate i, 0i Când dimensiunea matricei n este mai mare decât numărul de procesoare p, subactivități de bază pot fi agregate, unite într-o subtask mai multe rânduri adiacente și coloane matrici multiplicate. benzi de mărime, în același timp ar trebui să fie selectat ca k = n / p (presupunem că n este divizibil cu p).