Zadania na zaliczenie przedmiotu Przetwarzanie równoległe Zebrał dla roku.ak. 2015/2016 Rafał Walkowiak,

Podobne dokumenty
Zadania na zaliczenie przedmiotu Przetwarzanie równoległe Zebrał dla r.ak. 2014/2015 Rafał Walkowiak,

Pytania przykładowe (z ubiegłych lat) na zaliczenie przedmiotu Przetwarzanie równoległe Przygotował Rafał Walkowiak Poznań 3.01.

Przygotowanie kilku wersji kodu zgodnie z wymogami wersji zadania,

ANALIZA EFEKTYWNOŚCI MNOŻENIA MACIERZY W SYSTEMACH Z PAMIĘCIĄ WSPÓŁDZIELONĄ

EFEKTYWNOŚĆ MNOŻENIA MACIERZY W SYSTEMACH Z PAMIĘCIĄ WSPÓŁDZIELONĄ

Przykładem jest komputer z procesorem 4 rdzeniowym dostępny w laboratorium W skład projektu wchodzi:

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Algorytmy równoległe: prezentacja i ocena efektywności prostych algorytmów dla systemów równoległych

Procesor operacja R a R b R c W b W a W c R c W c R c

Algorytmy równoległe. Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka 2010

Programowanie CUDA informacje praktycznie i. Wersja

Analiza efektywności przetwarzania współbieżnego. Wykład: Przetwarzanie Równoległe Politechnika Poznańska Rafał Walkowiak Grudzień 2015

MATERIAŁY POMOCNICZE DO LABORATORIUM Z PRZETWARZANIA RÓWNOLEGŁEGO KWIECIEŃ 2018

Analiza efektywności przetwarzania współbieżnego

Literatura. 3/26/2018 Przetwarzanie równoległe - wstęp 1

Materiały pomocnicze do laboratorium. 1. Miary oceny efektywności 2. Mnożenie macierzy 3. Znajdowanie liczb pierwszych

Wydajność systemów a organizacja pamięci. Krzysztof Banaś, Obliczenia wysokiej wydajności. 1

Programowanie CUDA informacje praktycznie i przykłady. Wersja

Literatura. 11/16/2016 Przetwarzanie równoległe - wstęp 1

Równoległość i współbieżność

Równoległość i współbieżność

10/14/2013 Przetwarzanie równoległe - wstęp 1. Zakres przedmiotu

Programowanie PKG - informacje praktycznie i przykłady. Wersja z Opracował: Rafał Walkowiak

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Algorytmy Równoległe i Rozproszone Część V - Model PRAM II

System obliczeniowy laboratorium oraz. mnożenia macierzy

Tworzenie programów równoległych cd. Krzysztof Banaś Obliczenia równoległe 1

Programowanie procesorów graficznych GPGPU. Krzysztof Banaś Obliczenia równoległe 1

Równoległy algorytm wyznaczania bloków dla cyklicznego problemu przepływowego z przezbrojeniami

Mnożenie macierzy. Systemy z pamięcią współdzieloną Systemy z pamięcią rozproszoną Efektywność

Skalowalność obliczeń równoległych. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1

Wydajność systemów a organizacja pamięci. Krzysztof Banaś, Obliczenia wysokiej wydajności. 1

Programowanie równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz

Algorytmy dla maszyny PRAM

Wydajność systemów a organizacja pamięci. Krzysztof Banaś, Obliczenia wysokiej wydajności. 1

Ograniczenia efektywności systemu pamięci

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

Przetwarzanie Równoległe i Rozproszone

Nowoczesne technologie przetwarzania informacji

Złożoność obliczeniowa zadania, zestaw 2

Modele programowania równoległego. Programowanie z przekazywaniem komunikatów Message-Passing Programming Rafał Walkowiak

Modele programowania równoległego. Programowanie z przekazywaniem komunikatów Message-Passing Programming Rafał Walkowiak dla PR PP

Programowanie procesorów graficznych GPGPU. Krzysztof Banaś Obliczenia równoległe 1

Algorytmy numeryczne 1

Macierzowe algorytmy równoległe

Zadania jednorodne 5.A.Modele przetwarzania równoległego. Rafał Walkowiak Przetwarzanie równoległe Politechnika Poznańska 2010/2011

Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

Programowanie współbieżne Wykład 2. Iwona Kochańska

Analiza ilościowa w przetwarzaniu równoległym

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

Programowanie procesorów graficznych GPGPU

Analiza algorytmów zadania podstawowe

Wydajność systemów a organizacja pamięci, czyli dlaczego jednak nie jest aż tak źle. Krzysztof Banaś, Obliczenia wysokiej wydajności.

PROJEKT 3 PROGRAMOWANIE RÓWNOLEGŁE. K. Górzyński (89744), D. Kosiorowski (89762) Informatyka, grupa dziekańska I3

Wprowadzenie do złożoności obliczeniowej

Wykład 1 Wprowadzenie do algorytmów. Zawartość wykładu 1. Wstęp do algorytmów i struktur danych 2. Algorytmy z rozgałęzieniami.

Projektowanie algorytmów równoległych. Zbigniew Koza Wrocław 2012

Podstawy Programowania C++

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Podstawy Informatyki Systemy sterowane przepływem argumentów

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

Zaawansowane algorytmy i struktury danych

Algorytmika i pseudoprogramowanie

Numeryczna algebra liniowa

Ograniczenia efektywności systemu pamięci

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

Przetwarzanie równoległesprzęt. Rafał Walkowiak Wybór

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

do instrukcja while(wyrażenie);

Porównanie wydajności CUDA i OpenCL na przykładzie równoległego algorytmu wyznaczania wartości funkcji celu dla problemu gniazdowego

Wprowadzenie do programowania w środowisku CUDA. Środowisko CUDA

Algorytmy Równoległe i Rozproszone Część IV - Model PRAM

Procesory wielordzeniowe (multiprocessor on a chip) Krzysztof Banaś, Obliczenia wysokiej wydajności.

Architektura komputerów

Optymalizacja systemów

Przetwarzanie wielowątkowe przetwarzanie współbieżne. Krzysztof Banaś Obliczenia równoległe 1

Logiczny model komputera i działanie procesora. Część 1.

Zasady analizy algorytmów

Równoległe algorytmy sortowania. Krzysztof Banaś Obliczenia równoległe 1

Programowanie Współbieżne. Algorytmy

PRZETWARZANIE RÓWNOLEGŁE I ROZPROSZONE. Mnożenie macierzy kwadratowych metodą klasyczną oraz blokową z wykorzystaniem OpenMP.

INFORMATYKA Z MERMIDONEM. Programowanie. Moduł 5 / Notatki

Wykład z Technologii Informacyjnych. Piotr Mika

Programowanie i techniki algorytmiczne

Klasa 2 INFORMATYKA. dla szkół ponadgimnazjalnych zakres rozszerzony. Założone osiągnięcia ucznia wymagania edukacyjne na. poszczególne oceny

Optymalizacja systemów

Programowanie systemów z pamięcią wspólną specyfikacja OpenMP. Krzysztof Banaś Obliczenia równoległe 1

Obliczenia równoległe

Ćwiczenie 3. Iteracja, proste metody obliczeniowe

Programowanie współbieżne Wstęp do obliczeń równoległych. Rafał Skinderowicz

Obliczenia równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz

Programowanie równoległe

Temat 20. Techniki algorytmiczne

EGZAMIN MATURALNY Z INFORMATYKI MAJ 2013 POZIOM PODSTAWOWY CZĘŚĆ I WYBRANE: Czas pracy: 75 minut. Liczba punktów do uzyskania: 20 WPISUJE ZDAJĄCY

Programowanie w języku C++ Agnieszka Nowak Brzezińska Laboratorium nr 2

Transkrypt:

Zadania na zaliczenie przedmiotu Przetwarzanie równoległe Zebrał dla roku.ak. 2015/2016 Rafał Walkowiak, 30.01.2016 Zagadnienia sprzętowe w przetwarzaniu równoległym 1.1 Procesory systemu równoległego wykonują w podanej kolejności operacje (każdą w sposób atomowy- niepodzielny) dostępu do zmiennych A,B,C (zmienne A i B leżą w tej samej linii pamięci podręcznej zmienna C natomiast w innej). Kolejność realizacji operacji przez procesory jest następująca: Kolejność 1 2 3 4 5 6 7 8 Procesor 1 2 3 1 2 1 3 1 operacja A+=B C=1 B=2*C A+=B B=3*C A+=B B=4*C A+=B nr 9 10 11 procesor 2 1 1 operacja B=C A+=B A+=B Przed przetwarzaniem pamięć podręczna nie zawiera danych. Dla poszczególnych operacji proszę określić w poszczególnych procesorach wystąpienie zdarzeń dotyczących ich lokalnej pamięci podręcznej: - pobranie danych do pamięci podręcznej, - unieważnienia linii danych w pamięci, - trafienia do pamięci. Dostęp (odczyt lub zapis) procesora do powyżej wymienionych danych jest możliwy za każdym razem pod warunkiem obecności ich w pamięci podręcznej. Obowiązuje protokół zapewnienia spójności bazujący na unieważnianiu nieaktualnych kopii linii pamięci podręcznej. 1.2 Procesory systemu równoległego wykonują w podanej kolejności instrukcje (każdą w sposób atomowy- niepodzielny) korzystając ze zmiennych współdzielonych przetwarzanych wątków, zmienne oznaczono A,B,C (zmienne A i C leżą w tej samej linii pamięci podręcznej natomiast każda zmienna B w innej linii). R1 i R2 oznaczają kolejne rejestry każdego z procesorów. Kolejność realizacji operacji przez procesory jest następująca: Kolejność 1 2 3 4 5 6 Procesor 1 2 1 2 1 2 operacja R1=B R1=C R1=R1+1 B=R1 A=R1 C=2*R2 Przed przetwarzaniem pamięć podręczna nie zawiera danych. Dla poszczególnych operacji proszę określić w poszczególnych procesorach wystąpienie zdarzeń dotyczących ich lokalnej pamięci podręcznej: - unieważnienia linii pamięci podręcznej w pp poszczególnych procesorów, - pobrań linii pamięci podręcznej danych do pp. Dostęp (odczyt lub zapis) procesora do danych jest możliwy za każdym razem pod warunkiem obecności ich aktualnej wartości w pamięci podręcznej. Obowiązuje protokół zapewnienia spójności bazujący na unieważnianiu nieaktualnych kopii linii pamięci podręcznej, pamięć jest dowolnie duża. 1.3 Poniżej zapisano kolejne dostępy do pamięci współdzielonej zrealizowane przez 4 procesory P1- P4. Procesory posiadają pamięć podręczną, w której powielone są przetwarzane dane. Odwołania do pamięci zapis i odczyt dotyczą zawsze jednego słowa danych np. 1R(3) oznacza odczyt przez pierwszy procesor trzeciego kolejno słowa licząc od początku wykorzystywanego obszaru. Wielkość linii pamięci podręcznej wynosi 4 słowa, a wykorzystywany obszar danych jest wyrównany do początku linii pamięci podręcznej. Proszę określić stan i zawartość pamięci podręcznej procesorów po wykonaniu wszystkich operacji. Ile nastąpiło trafień do pamięci podręcznej (które z 12 poniższych dostępów są trafieniami). Obowiązuje protokół 3 stanowy unieważniania kopii zmodyfikowanych linii danych. 1R(3),2R(4),3R(7),1W(1),2W(2),4R(7),4W(5),4W(6),1R(2),3R(3),4R(11),1R(10) 1.4 System wieloprocesorowy posiada 8 procesorów korzystających z pamięci współdzielonej i prywatnych pamięci podręcznych. Opóźnienie dostępu do danych w pp wynosi 5 cykli zegara procesora, a opóźnienie dostępu do danych w przypadku potrzeby ściągnięcia danych z RAM wynosi 30 cykli zegara procesora. Rozmiar linii pp (wielkość danych transmitowanych do pp) wynosi 4 słowa. o Jeden procesor realizuje obliczenia zgodnie z kodem zamieszczonym poniżej. Element tablicy a,b,c ma wielkość jednego słowa. Jaki jest średni czas realizacji instrukcji dla jednego procesora jeśli byłby on ograniczony czasem dostępu do pamięci? o Jak w równoległej realizacji pętli przez 8 procesorów systemu należy przydzielić iteracje pętli do poszczególnych procesorów, aby efektywnie korzystać z pp? Proszę wprowadzić odpowiednie dyrektywy Open MP i uzasadnić odpowiedź. for (i=0;i<1024;i++) c[i]= a[i]*b[i]; 1.5 Proszę określić stosunek trafień do pp w realizowanym przez 4 procesory równoległym algorytmie sumowania elementów dwuwymiarowej tablicy (o rozmiarze 4k słów) zapisanej w pamięci współdzielonej. Suma częściowa jest zmienną współdzieloną wątków, chronioną za pomocą zamka przed niepoprawnym uaktualnieniem. Każdy z procesorów sumuje 1k słów z kolejnych różnych wierszy macierzy, a rozmiar linii pp wynosi 8 słów. Koszt realizacji zamka nie jest w uwzględniany w analizie stosunku trafień. Pamięć podręczna jest wystarczająco duża. Elementy tablicy są zapisane kolejno wierszami. 1

Jaki byłby stosunek trafień, gdyby zastosowano zmienną lokalną do pamiętania sumy częściowej w każdym wątku przetwarzania? Jakiego przyspieszenia można się spodziewać w wyniku zastosowania zaproponowanych powyżej metod sumowania elementów tablicy? 1.6 Rozważmy problem mnożenia tablicy przez wektor metodą zagnieżdżonych pętli (kod poniżej) na komputerze z pamięcią podręczną 16 KB o czasie dostępu 1ns i pamięcią RAM o czasie dostępu 50 ns. W przypadku braku danych w pamięci podręcznej sprowadzane są one w podanym czasie z RAM w bloku równym rozmiarowi linii pp - 4 słów. Procesor pobiera dane z pp. Tablica mnożona ma rozmiar 4Kx4K słów, a każdy wiersz tablicy zajmuje 16 KB. Jaka jest maksymalna prędkość przetwarzania ograniczona czasem dostępu do pamięci uwzględniamy tylko czas pobierania danych z pamięci, gdyż zakładamy, że pozostałe operacje (obliczenia) realizowane są równocześnie (w tle)? - jak długo (średnio) trwa czas realizacji jednej instrukcji? Proszę założyć optymalną strategię wykorzystania pamięci podręcznej. for (i=0; i<dim; i++) for (k=0; k<dim; k++) C[i]+=a[i][k]*b[k]; 1.7 Dla maszyny o pamięci współdzielonej: koszt dostępu procesora do pp Tc, koszt dostępu do pamięci systemowej ts, długość lini pamięci DLP, rozmiar pp PPS. Określić prędkość przetwarzania ograniczonego prędkością dostępu do pamięci dla równoległego sumowania macierzy o rozmiarze NxN (kod w języku C) 4 procesory: KOD 1 Sumowanie elementów wierszami. Kolejne wiersze sumuje kolejny procesor KOD 2 Sumowanie elementów kolumnami. Kolejne kolumny sumuje następny procesor. Proszę uwzględnić różne nietrywialnie scenariusze przetwarzania zależne od rozmiaru macierzy. 1.8 Rozważmy problem mnożenia tablicy przez tablicę metodą zagnieżdżonych pętli (kod poniżej) na komputerze 16 procesorowym z współdzieloną pamięcią. Podział pracy bazuje na podziale danych wyjściowych. Każdy procesor posiada pamięć podręczną o wielkości 512 KB. W przypadku braku danych w pamięci podręcznej sprowadzane są one z pamięci operacyjnej w bloku równym rozmiarowi linii pp 128 B. Procesor pobiera dane tylko z pp. Tablica mnożona ma rozmiar 512x512 słów, a każdy wiersz tablicy zajmuje 2kB. Kod jest napisany w języku C. Proszę założyć optymalną strategię wykorzystania pamięci podręcznej (jeżeli mamy wybór to usuwamy te dane, które nie będą potrzebne). Proszę uzasadnić jaki efektywny podział pracy między procesory należy zaproponować? Proszę określić i uzasadnić stosunek trafień do pamięci podręcznej i rozmiar danych pobieranych z pamięci głównej przez każdy z procesorów w trakcie realizacji przedzielonej mu pracy. W jakiej kolejności procesory powinny realizować przydzieloną im pracę. //sekwencyjny kod mnożenia tablic for (i=0; i<dim; i++) for (j=0; j<dim;j++) for (k=0; k<dim; k++) C[i][j]+=a[i][k]*b[k][j]; 1.9 Rozważmy problem mnożenia tablicy przez wektor metodą zagnieżdżonych pętli (porównaj kod poniżej) w komputerze wieloprocesorowym z współdzieloną pamięcią operacyjną i prywatnymi pamięciami podręcznymi. W przypadku braku danych w pamięci podręcznej sprowadzane są one z pamięci operacyjnej w bloku równym rozmiarowi linii pp. Procesor pobiera dane z pp. Tablica a ma rozmiar n X n słów. Proszę podać i uzasadnić sposób zrównoleglenia przetwarzania na 4 procesorach za pomocą dyrektyw Open MP uwzględniając następujące fakty: - Ilość pracy dla kolejnych iteracji pętli zewnętrznej zmienia się, gdyż tablica a zawiera na przekątnej i poniżej przekątnej tylko zera, - w linii pamięci podręcznej mieszczą się 4 słowa, - pamięć podręczna ma rozmiar 3n, - optymalizacja zrównoleglenia powinna minimalizować czas przetwarzania zadania przez system. for (i=0; i<n; i++) { C[i]=0; for (k=0; k<n; k++) if (a[i][k]) C[i]+=a[i][k]*b[k]; Dla przyjętego rozwiązania proszę przeanalizować (przypadek optymistyczny) odwołania do pamięci dla elementów tablicy a. Następnie proszę oszacować i wyjaśnić dla tej tablicy stosunek trafień do pamięci podręcznej w ramach jednego procesora. Algorytmy i środowiska równoległe (open OMP) 2.1 Proszę wyjaśnić liczbę kolejnych kroków oraz pracę realizowaną w przedstawionym na wykładzie równoległym algorytmie sumowana w hiperkostce 16 procesorowej z wynikiem w każdym węźle. Każdy procesor posada n liczb podlegających sumowaniu. 2.2 Podać prezentowany na wykładzie algorytm (i wyjaśnić jego złożoność) sumowania liczb z udostępnieniem wyniku we wszystkich procesorach w systemie o architekturze pierścienia jednokierunkowego. 2

2.3 Podać prezentowany na wykładzie algorytm sortowania n liczb w łańcuchu procesorów. Określić: algorytm realizowany przez poszczególne procesory, sposób uzyskiwania wyników, uzasadnić liczbę procesorów niezbędnych do poprawnego sortowania n liczb, podać i wyjaśnić przybliżoną (z dokładnością do stałej) liczbę następujących po sobie operacji porównania. 2.4 Proszę przedstawić równoległy algorytm Cannona mnożenia macierzy kwadratowych w systemach z pamięcią rozproszoną. Należy określić sposób dystrybucji danych wejściowych, wyniku, naszkicować kod algorytmu dla poszczególnych procesorów, określić rodzaj wykorzystywanych komunikacji - synchroniczna, asynchroniczna, buforowana, niebuforowana, dla każdego procesora proszę określić rozmiar przetwarzanych danych oraz wymagania pamięciowe algorytmu w funkcji rozmiaru macierzy n i liczby procesorów p. 2.5 Proszę przedstawić algorytm mnożenia macierzy kwadratowych metodą zagnieżdżonych 6 pętli w systemach z pamięcią współdzieloną. Proszę założyć, że przetwarzanie równoległe bazuje na podziale pracy w pętli zewnętrznej (#pragma omp parallel for) Proszę: wyjaśnić liczbę iteracji poszczególnych pętli algorytmu, podać ogólną zależność na ilość danych przetwarzanych przez każdy procesor, podać ogólną zależność na liczbę danych pobieranych do prywatnej pamięci podręcznej przez poszczególne procesory. 2.6 Porównać fazy przetwarzania (zadania kolejnych pętli) w równoległym mnożeniu macierzy w metodach: - 6 pętlowej dla komputera wieloprocesorowego z pamięcią współdzieloną (zrównoleglenie na poziomie pętli zewnętrznej) podejście zoptymalizowane - 4 pętlowej (metoda Cannona) w systemie komputerowym z pamięcią rozproszoną. Zakładając kolejność pętli i,j,k oraz dostęp do wyniku za pomocą odwołania C[i][j] proszę określić czy występuje lokalność dostępów do poszczególnych tablic w obu metodach. 2.7 Proszę wyjaśnić problematyczne dla poprawnej i efektywnej równoległości przetwarzania elementy w poniższym kodzie. Jakiego typu są to zagrożenia (jeśli dla tego kodu występują)? Jak poszczególne zagrożenia można usunąć i dlaczego? Potencjalne typy zagrożeń to: wyścig, dostęp do danych nielokalny czasowo lub dostęp do danych nielokalny przestrzennie (przy jakiej wielkości pamięci podręcznej brak lokalności wystąpi), niezamierzone współdzielenie - false sharing. Proszę określić których tablic dotyczą i jakie są danego zagrożenia konsekwencje? Proszę określić czy program umożliwia deterministyczne przetwarzanie równoległe. float a[n][n], b[n][n], c[n][n]; for (i = 0 ; i < N ; i++) #pragma omp parallel for schedule(static,5) for (int k = 0 ; k < N ; k++) for (int j = 0 ; j < N ; j++) c[i][j] += a[i][k] *b[k][j] ; 2.8 Proszę wyjaśnić problematyczne dla poprawnej i efektywnej równoległości przetwarzania elementy w poniższym kodzie.. Jakiego typu są to zagrożenia (jeśli dla tego kodu występują)? Jak poszczególne zagrożenia można usunąć i dlaczego? Potencjalne typy zagrożeń to: wyścig, dostęp do danych nielokalny czasowo lub przestrzennie, niezamierzone współdzielenie- false sharing, proszę określić których tablic dotyczą i jakie są danego zagrożenia konsekwencje? float a[n][n];.. int i,j,k; #pragma omp parallel for schedule(dynamic,1) for (i = 0 ; i < N ; i++) { for (k = 0 ; k < N ; k++) { for (j = 0 ; j < N ; j++) { c[i][j] += a[i][k] *b[k][j] ; 2.9 Proszę wyjaśnić problematyczne dla poprawnej i efektywnej równoległości przetwarzania elementy w poniższym kodzie. Jakiego typu są to zagrożenia (jeśli dla tego kodu występują)? Jak poszczególne zagrożenia można usunąć i dlaczego? Potencjalne typy zagrożeń to: wyścig, dostęp do danych nielokalny czasowo lub dostęp do danych nielokalny przestrzennie, niezamierzone współdzielenie - false sharing, proszę określić których tablic dotyczą i jakie są danego zagrożenia konsekwencje? float a[n][n]; #pragma omp parallel for (j = 0 ; j < N ; j++) { for (int i = 0 ; i < N ; i++) { #pragma omp for schedule(dynamic,1) 3

for (int k = 0 ; k < N ; k++) { c[i][j] += a[i][k] *b[k][j] ; 2.10 W każdym z poniższych trzech przykładów kodu proszę wyjaśnić ile razy i z jakim parametrem istniejący wątek o identyfikatorze równym 1 będzie realizował wywołania Funkcja1. ------------------------------------------------------------------- omp_set_num_threads(m); #pragma omp parallel for (j=0; j<n;j++) Funkcja1(j) ; ------------------------------------------------------------------- omp_set_num_threads(m); #pragma omp parallel for schedule (static) for (j=0; j<n;j++) Funkcja1(j) ; ------------------------------------------------------------------ 2.11 Proszę omówić dostępne w ramach OpenMP dyrektywy: A. podziału pracy na wątki - single, master, for, section, task. Proszę określić ich znaczenie i warianty tych dyrektyw oraz porównać zakres stosowania tych wariantów. B. Czym różni się dyrektywa critical od atomic, proszę zaprezentować przykład ich zastosowania. 2.12 Korzystając z dyrektyw Open MP proszę zapisać kod w meta języku pozwalający na równoległe sumowanie N elementowej tablicy jednowymiarowej na dowolnej liczbie P procesorów. Proszę określić jeśli to możliwe dla przygotowanego kodu jaką pracę wykonają poszczególne procesory. Proszę omówić kluczowe dla efektywności przetwarzania elementy kodu. Wynik będący sumą ma zostać wyświetlony na ekranie. 2.13 Proszę omówić algorytm znajdowania maksimum w zbiorze N liczb dla CRCW PRAM. Proszę określić: liczbę maszyn, liczbę kroków przetwarzania, uzasadnić poprawność obliczeń w przypadku wielu równych wartości maksymalnych i zastosowaną strategię zapisu i uzasadnić poprawność jej realizacji dla każdego zapisu w kodzie. 2.14 Proszę zaproponować algorytm dla modelu maszyny równoległej typu CRCW PRAM z jednorodną strategią zapisu dla problemu: sprawdzania czy liczba N podana na wejściu komputera jest liczbą pierwszą. Program ma dać odpowiedź w czasie stałym niezależnym od wartości liczby: np. tak dla liczby 7, nie dla liczby 121. Proszę założyć, że interesują nas liczby N, których czas dzielenia przez dowolną inną liczbę jest stały. W szczególności proszę: określić minimalna liczbę procesorów niezbędnych do przeprowadzenia obliczeń wg podanego kodu, określić liczbę kroków przetwarzania, określić liczbę procesorów uczestniczących w poszczególnych krokach przetwarzania i uzasadnić poprawność zastosowanej strategii zapisu dla każdego występującego w kodzie kroku zapisu komórki danych. Przesyłanie komunikatów 3.1 Jaki jest możliwy (czy zawsze jednakowy) efekt realizacji poniższego kodu przez procesy w trybie SPMD w zależności od rodzaju (1. blokujące, 2. Nieblokujące z buforami, 3. Nieblokujące z buforami ) zastosowanych wywołań: Send(void *sendbuf, int nelems, int dest, ) Receive(void *recvbuf, int nelems, int source, ) Proszę wyjaśnić odpowiedź i opisać sytuację - kiedy określony efekt nastąpi. //KOD procesów I=zwracam_identyfikator_wywołującego_procesu();/* 0,1,2,3,...*/ N=zwracam_liczbe_procesow(); A=I; Send(&A,1, (I+1)mod N, ); Receive(&A,1, (I+N-1)mod N, ); printf( zrealizowano przeslanie od %d do %d \n,a,i); Krótko odpowiedzieć na pytanie: jak można zmodyfikować powyższy kod, aby umożliwić realizację wszystkich komunikacji zgodnie ze specyfikacją w kodzie (przy użyciu poszczególnych typów wywołań) przed wypisaniem komunikatów na ekranie? 3.2 Operacje komunikacji w przesyłaniu komunikatów, a ukrywanie kosztów komunikacji (uwzględnić funkcje blokujące, nieblokujące, z buforami i bez) dokonać porównania. Efektywność przetwarzania współbieżnego 5.1 Przetwarzanie równoległe w systemie z przekazywaniem komunikatów ma charakteryzować się stałą efektywnością. Obliczenia dotyczą wyznaczenia w korzeniu drzewa binarnego procesorów sumy N elementów (rozproszonych równomiernie w p procesorach tworzących to drzewo). Proszę określić jak musi się zmienić N przy wzroście liczby procesorów z 7 na 15. 4

Czas komunikacji jest 5 razy dłuższy od czasu sumowania. Proszę założyć efektywne wykorzystanie komunikacji nieblokującej. 5.2 W systemie z pamięcią współdzieloną proszę porównać prędkość przetwarzania w GFLOPS dla obliczeń, których prędkość jest ograniczona czasem dostępu do pamięci: A. sumowanie kolejnych komórek pamięci zawierających elementy MxM elementowej macierzy, B. mnożenie macierzy o wymiarach MxM metodą 3 zagnieżdżonych pętli (kolejność zagnieżdżenia - i,k,j c[i][j]+=a[i][k]*b[k][j];) Rozmiar pamięci podręcznej jest równy 3M, a rozmiar linii pamięci podręcznej wynosi 64B czyli 16 słów. Czas dostępu do pamięci podręcznej wynosi jeden cykl procesora, natomiast pobranie linii do pamięci podręcznej z pamięci operacyjnej trwa 50 cykli. 5.3 Proszę wyznaczyć funkcję stałej efektywności dla sumowania z wynikiem w każdym z węzłów N liczb rozproszonych w pierścieniu P procesorów. Proszę założyć koszt komunikację blokującą i koszt przesłania jednego słowa danych między sąsiednimi węzłami równy 5A, koszt sumowania dwóch liczb jest równy A. 5.4 Proszę wyznaczyć efektywność obliczeń polegających na sumowania N liczb rozproszonych równomiernie w systemie wielokomputerowym o architekturze 3 wymiarowej kostki. Wynikiem przetwarzania i komunikacji ma być udostępnienie wartości będącej sumą liczb w każdym z 8 węzłów obliczeniowych. Proszę założyć komunikację nieblokującą i koszt przesłania jednego słowa danych między sąsiednimi węzłami równy 2A, koszt sumowania dwóch liczb jest równy A. 5.5 Wyznaczanie w korzeniu drzewa procesorów sumy n elementów rozproszonych w p procesorach. Proszę wyznaczyć funkcję stałej efektywności przy założeniu, że koszt komunikacji między sąsiednimi procesorami jest dany wzorem ts+ mdtw gdzie m jest liczbą słów komunikatu, d odległością, a t i t stałymi równymi 1. Koszt dodawania wynosi 4. Proszę podać wzór określający ile razy musi wzrosnąć n, aby uzyskać stałą efektywność przy wzroście wysokości drzewa procesorów o jeden poziom z 6 na 7. Proszę założyć komunikację asynchroniczną. 5.6 Realizując przetwarzanie zadania A na 9 procesorach uzyskano 5 krotne przyspieszenie. Stosując prawo Amdahla podaj liczbę procesorów niezbędnych do uzyskania 10 krotnego przyspieszenia. Jakie przyspieszenie uzyskano by, gdyby ze wzrostem liczby procesorów liniowo (zgodnie z założeniami dla prawa Gustafsona) wzrastała wielkość części zadania podlegającej zrównolegleniu. 5.7 Przetwarzanie zadania A realizowane na 9 procesorach umożliwia uzyskanie 5 krotnego przyspieszenia. Przetwarzanie tego samego zadania A realizowane na 2 procesorach umożliwia uzyskanie przyspieszenia równego 100/55. Proszę określić maksymalne możliwe do uzyskania przyspieszenie. 5.8 Część obliczeń niepodlegająca zrównolegleniu zajmuje 30% czasu obliczeń realizowanych sekwencyjnie. Jaka liczba procesorów zapewni uzyskanie przyspieszenia równego 4, a jakie przyspieszenie przetwarzania można uzyskać przy zastosowaniu 10 procesorów? Odpowiedź uzasadnij. 5.9 Pewne obliczenia A można częściowo zrównoleglić. 80% obliczeń A może być podzielone proporcjonalnie na dowolną liczbę procesorów zapewnia to przyspieszenie przetwarzania tej części równe liczbie wykorzystanych procesorów. Pozostała część obliczeń A - 20% musi być zrealizowana sekwencyjnie. Jaka liczba użytych procesorów zapewni uzyskanie przyspieszenia przetwarzania równego 7 dla całości obliczeń A? Jakie przyspieszenie przetwarzania dla omawianych obliczeń można uzyskać przy zastosowaniu 10 procesorów? Odpowiedź uzasadnij podając obliczenia i słowne wyjaśnienia. Przetwarzanie na PKG (GPU) 6.1 Rozważmy obliczenia dla tablicy NxN uruchomione dla gridu z 2 wymiarowymi blokami wątków o rozmiarach: 16 wierszy po 32 wątki wg kodu poniżej. global void MatrixMulKernel(float* A_d, float* B_d, float* C_d, int N) { int Col = blockid.y * blockdim.y + threadid.y; int Row = blockid.x * blockdim.x + threadid.x; float C= 0; for (int k = 0; k < N; ++k) C += A_d[Row][k] * B_d[k][Col]; C_d[Row][Col] = C; Proszę przeanalizować efektywność dostępów do pamięci globalnej. 5

Ile wynosi dla powyższego kodu stosunek liczby operacji do liczby dostępów do pamięci globalnej (CGMA). Jakie jest znaczenie tego wskaźnika dla prędkości obliczeń przy użyciu GPU? Proszę określić szczegółowo na poziomie koncepcyjnym (na czym polegają i jak je zrealizować) możliwe modyfikacje kodu zmierzające do przyspieszenia obliczeń, proszę ocenić możliwy zarówno dodatni jak i ujemny wpływ poszczególnych modyfikacji na prędkość obliczeń. 6.2 Rozważmy obliczenia dla tablicy NxN uruchomione dla gridu (N/K,1,1) z blokami wątków o wymiarach (K,1,1) wg kodu poniżej (grid i blok mają w wymiarze X rozmiar różny od jeden). global void SUMKernel(float* Ad, float* Rd, N) { int Col = blockid.x * blockdim.x + threadid.x; for (int i = 0; i < N ; ++i) Rd[Col] += Ad[i][Col]; Proszę przeanalizować kod programu opisać wykonywaną pracę, a następnie określić efektywność dostępów do pamięci globalnej (tj. możliwość łączenia dostępów do pamięci globalnej). Ile wynosi dla powyższego kodu stosunek liczby operacji zmiennoprzecinkowych do liczby dostępów do pamięci globalnej (CGMA). Jakie jest znaczenie tego wskaźnika dla prędkości obliczeń przy użyciu GPU? Proszę założyć, że kolejne elementy wiersza tablicy leżą pod kolejnymi adresami pamięci. Proszę ocenić jakie czynniki i w jaki sposób wpływać będą na prędkość przetwarzania. 6.3 Rozważmy obliczenia dla tablic A i B (o rozmiarach NxN) i tablicy C (o rozmiarze N) uruchomione dla jednowymiarowego gridu z jednowymiarowymi blokami H wątków wg kodu poniżej: global void test(float* Ad, float* Bd, float* Cd, int N) { int I = blockid.x * blockdim.x + threadid.x; float C= 0; for (int k = 0; k < N; ++k) C += A_d[I][k] * B_d[I][k]; Cd[I] = C; Proszę określić i uzasadnić: - Niezbędną wielkość gridu - Jaką pracę wykonają poszczególne wątki? - Ile wynosi CGMA? Jak wpłynie ta wartość na efektywność przetwarzania? - czy poszczególne dostępy do pamięci globalnej będą realizowane efektywnie dla compute capability 1.3? - Jak wielkość H i N może wpłynąć na liczbę wykorzystywanych multiprocesorów (SM)? - Jak wielkość H i N może wpłynąć na zajętość multiprocesora (SM occupancy)? 6