daje numero
Transkrypt
daje numero
Przetwarzanie współbieżne. Programowanie równoległe i rozproszone Laboratorium 9 Cel: Nabycie umiejętności tworzenia i implementacji programów równoległych z wykorzystaniem OpenMP. Kroki: 1. 2. 3. Utworzenie katalogu roboczego (np. lab_9/petle) . Skopiowanie pliku openmp_petle.c, rozpakowanie w katalogu roboczym, uruchomienie programu. Napisanie 4 wersji zrównoleglenia pętli obliczających sumę wyrazów tablicy dla 4 wariantów podziału macierzy między wątki: 1. wierszowego – zrównoleglenie pętli zewnętrznej – klauzula reduction 2. wierszowego – zrównoleglenie pętli wewnętrznej – tablica wartości dla wątków (sumowanie po wyjściu z obszaru równoległego) 3. kolumnowego - zrównoleglenie pętli wewnętrznej – klauzula reduction 4. kolumnowego - zrównoleglenie pętli zewnętrznej – zmienna prywatna dla każdego wątku i sekcja krytyczna 4. Dla każdego wariantu dekompozycji rozważenie różnych wariantów przydziału iteracji wątkom za pomocą klauzuli schedule z parametrami: 1. static, rozmiar porcji=3, 2. static, rozmiar porcji domyślny, 3. dynamic rozmiar porcji=2, 4. dynamic, rozmiar porcji domyślny. 5. Przetestowanie wykonania programu dla powyższych strategii podziału i metod zrównoleglenia. Wydruk testowy powinien zawierać informację o przypisaniu każdej pozycji tablicy (czyli każdej iteracji) konkretnemu wątkowi. Można zastosować wzór z pliku openmp_petle.c (dla wypisywania z pętlą po wierszach jako zewnętrzną jest to zapis naturalny, dla pętli po kolumnach jako pętli zewnętrznej zapis jest transpozycją zapisu właściwego!) Dla czytelności wydruku należy użyć klauzuli i dyrektywy ordered oraz należy sprawdzić każdorazowo, że wersja równoległa daje te same wyniki co wersja sekwencyjna. W sumie ma powstać 16 wydruków dla różnych wariantów zrównoleglenia i przydziału iteracji wątkom, ocena powinna dotyczyć każdego kolejnego wariantu z p.3 (ocena) 6. Napisanie wersji zrównoleglenia pętli obliczających sumę wyrazów tablicy dla podziału blokowego (zrównoleglenie obu pętli): 1. należy zapewnić realizację zagnieżdżenia obszarów równoległych ( omp_set_nested(1); ) 2. należy odpowiednio sterować liczbą wątków (np. 3 w wierszach i 4 w kolumnach) 3. przydział iteracji wykonać w sposób statyczny, z rozmiarami porcji: 1. 1 w kolumnach, domyślnie w wierszach 2. 2 w kolumnach i wierszach 3. domyślnie w kolumnach i wierszach 7. Przetestowanie wykonania programu oraz sprawdzenie, że wersja równoległa daje te same wyniki co wersja sekwencyjna. Wydruk testowy powinien zawierać informację o przypisaniu każdej pozycji tablicy (czyli każdej iteracji) konkretnemu wątkowi. Można zastosować wzór z pliku openmp_petle.c. Dla podziału blokowego i zagnieżdżonej równoległości numer wątku stanowi parę: numer wątku w zewnętrznym obszarze równoległym (np. przekazany do wewnętrznego obszaru poprzez zmienną firstprivate), numer wątku w wewnętrznym obszarze (dla czytelności wydruku należy użyć klauzuli i dyrektywy ordered). W sumie mają powstać 3 wydruki. (ocena) 8. Utworzenie katalogu roboczego (np. lab_9/mat_vec) . 9. Skopiowanie paczki openmp_mat_vec.tgz, rozpakowanie w katalogu roboczym, uruchomienie programu. 10. Napisanie 2 wersji zrównoleglenia algorytmu mnożenia macierz-wektor (w obu przypadkach należy zrównoleglić procedury zawarte w pliku mat_vec.c, zrównoleglenie ma dotyczyć pętli zewnętrznej, a wynik ma być identyczny jak obliczany w pliku openmp_mat_vec.c w pętlach testowych), dla 2 wariantów podziału macierzy między wątki: 1. wierszowego (mat_vec_row) – dla macierzy przechowywanych wierszami (row major) (ocena) 2. kolumnowego (mat_vec_col) – dla macierzy przechowywanych kolumnami (column major) (ocena) Dalsze kroki: 1. Dla wariantu podziału kolumnowego z p. 10.2 rozważenie (w dodatkowej procedurze) pętli po kolumnach jako pętli wewnętrznej (w algorytmie kolejność pętli można zamienić bez zmiany wyniku) (ocena) 2. Napisanie trzeciej wersji zrównoleglenia algorytmu mnożenia macierz-wektor dla wariantu podziału macierzy między wątki blokowego (2D) (ocena) Warunki zaliczenia: 1. Obecność na zajęciach i wykonanie kroków 1-7. 2. Oddanie sprawozdania z opisem zadania, kodem źródłowym programów i wydrukami dla wszystkich wariantów zrównoleglenia.