MPI: Πολλαπλασιασμός Πινάκων Κώστας Διαμαντάρας Τμήμα Πληροφορικής ΤΕΙ Θεσσαλονίκης 2011
Πολλαπλασιασμός Πινάκων 6 4 6 4 5 5 C = A × B Πλήθος στηλών A = πλήθος γραμμών B Πλήθος γραμμών C = πλήθος γραμμών A Πλήθος στηλών C = πλήθος στηλών B Κώστας Διαμαντάρας - ΤΕΙ Θεσσαλονίκης Μαθήματα MPI
Πολλαπλασιασμός Πινάκων C[1][1] = A[1][1]*B[1][1] + A[1][2]*B[2][1] + ... + A[1][4]*B[4][1] C[1][2] = A[1][1]*B[1][2] + A[1][2]*B[2][2] + ... + A[1][4]*B[4][2] ............. C[5][6] = A[5][1]*B[1][6] + A[5][2]*B[2][6] + ... + A[5][4]*B[4][6] C = A × B C[i][j] = ‹ i γραμμή του A › * ‹ j στήλη του B › Κώστας Διαμαντάρας - ΤΕΙ Θεσσαλονίκης Μαθήματα MPI
Κατανομή Γραμμών σε διεργασίες C A B Διεργασία 0 Διεργασία 1 Διεργασία 2 Διεργασία 0 Διεργασία 1 Διεργασία 2 Χρήση MPI_Scatter για διαμοιρασμό των γραμμών των πινάκων A, B στις διεργασίες 0, 1, 2 Έξτρα γραμμές dummy για να δουλέψει το scatter (γραμμή 6 των C, A, και γραμμές 5, 6 του B). Δεν θα χρησιμοποιηθούν σε πράξεις Κώστας Διαμαντάρας - ΤΕΙ Θεσσαλονίκης Μαθήματα MPI
MPI_Scatter MPI_Scatter(&localA[0], n, MPI_INT, &A[0], n, MPI_INT, 0, MPI_COMM_WORLD); int A[N]; /* N>=n*p, p=πλήθος διεργασιών */ int localA[n]; Πχ. p=3: Διεργασία 0 localA A Διεργασία 1 Διεργασία 2 Άδειο Άδειο localA A localA A Κώστας Διαμαντάρας - ΤΕΙ Θεσσαλονίκης Μαθήματα MPI
Υπολογισμός γινομένου Για να βρω το στοιχείο C[i][j] πρέπει να πολλαπλασιάσω την i γραμμή του A με την j στήλη του B Η Δ0 διαβάζει τους πίνακες Α, Β και τους μοιράζει στις Δ1, Δ2 (πχ. MPI_Scatter) τοπικοί πίνακες : localA, localB Για κάθε στήλη j του B { Για κάθε γραμμή i του localΑ { Υπολόγισε το εσωτερικό γινόμενο των διανυσμάτων: localΑ[i][*] , B[*][j] localC[i][j] (πχ. Για να συλλέξω την στήλη Β από τα localB κάνω MPI_Allgather) } Η Δ0 συλλέγει τα localC (πχ. με MPI_Gather) C Κώστας Διαμαντάρας - ΤΕΙ Θεσσαλονίκης Μαθήματα MPI
MPI_Allgather MPI_Allgather(&localB[0], n, MPI_INT, &B[0], n, MPI_INT, MPI_COMM_WORLD); int localB[n]; int B[N]; /* N>=n*p, p=πλήθος διεργασιών */ Πχ. p=3: Διεργασία 0 localB B Διεργασία 1 Διεργασία 2 localB B localB B Κώστας Διαμαντάρας - ΤΕΙ Θεσσαλονίκης Μαθήματα MPI