Test z Programowania Równoległego: Pytania i Odpowiedzi OpenMP oraz MPI
Enviado por Anónimo y clasificado en Otras materias
Escrito el en
polaco con un tamaño de 11,76 KB
Test z Programowania Równoległego
Pytanie 1
Która dyrektywa jest użyta niepoprawnie?
- a)
#pragma omp for nowait - b)
#pragma omp parallel for if (A>val) num_threads=3 - c)
#pragma omp atomic(threadID) - d)
#pragma omp parallel private(threadID)
Twoja odpowiedź: b) #pragma omp parallel for if (A>val) num_threads=3 powinna być trójka w nawiasie num_threads(3)
d) #pragma omp parallel private(threadID) nie powinno być threadID
Pytanie 2
Podany fragment kodu OpenMP:
int Y[10], X[10], Z[10];
#pragma omp parallel for schedule(dynamic,3)
for (int I = 1; I < 10; I++) {
Y[I] = X[I-1] + Y[I-1] + Z[I+1];
}uruchomiony na 4 wątkach będzie skutkował:
- a) proces 0 wyliczy Y[0], Y[1], Y[2]
- b) proces 2 wyliczy Y[7], Y[8], Y[9]
- c) proces 3 będzie bezczynny
- d) kod nie jest prawidłowy
Twoja odpowiedź: d) kod nie jest prawidłowy
Pytanie 3
W OpenMP zmiennych NIE można określić jako:
- a) Wspólnych dla wszystkich wątków
- b) Globalnych, ale osobnych dla wszystkich wątków
- c) Prywatnych dla wątku
- d) Wspólnych dla części wątków
Twoja odpowiedź: d) Wspólnych dla części wątków
Pytanie 4
Do czego służy klauzula nowait?
- a) Usuwa barierę synchronizacji z poprzedniego bloku
- b) Może być stosowana wraz z dyrektywą
#pragma omp for - c) Przechodzi do następnego bloku OpenMP
- d) Usuwa barierę synchronizacji dla bieżącego bloku
Twoja odpowiedź: d) Usuwa barierę synchronizacji dla bieżącego bloku
b) Może być stosowana wraz z dyrektywą #pragma omp for
Pytanie 5
Stosując standard OpenMP, wątki można utworzyć:
- a) Poprzez przekazanie parametru
num_threadspodczas uruchamiania programu - b) Poprzez stworzenie obiektu klasy
thread - c) Poprzez przekazanie funkcji z kodem wątku jako parametru konstruktora klasy
thread - d) Za pomocą dyrektywy
paralleloraz klauzulinum_threads(x)
Twoja odpowiedź: d) Za pomocą dyrektywy parallel oraz klauzuli num_threads(x)
Pytanie 6
Czas bezczynności można zmniejszyć poprzez:
- a) Uruchamianie innych obliczeń, dopóki proces czeka na zakończenie operacji wejścia/wyjścia
- b) Częste stosowanie barier
- c) Nie mamy wpływu na bezczynność procesorów
- d) Używanie komunikacji nieblokującej
Twoja odpowiedź: a) Uruchamianie innych obliczeń, dopóki proces czeka na zakończenie operacji wejścia/wyjścia
d) Używanie komunikacji nieblokującej
Pytanie 7
Współczynnik przyśpieszenia bezwzględnego algorytmu równoległego to:
- a) Iloraz czasu wykonania optymalnej implementacji algorytmu równoległego dla zadania o wielkości n na jednym procesorze do analogicznego czasu uzyskanego dla n procesorów
- b) Iloraz czasu wykonania dowolnej implementacji algorytmu równoległego dla zadania o wielkości n na jednym procesorze do analogicznego czasu uzyskanego dla n procesorów
- c) Iloczyn efektywności programu równoległego dla zadania o wielkości n wykonanego z użyciem n procesorów oraz liczby procesorów
- d) Iloraz czasu wykonania optymalnej implementacji algorytmu sekwencyjnego dla zadania o wielkości n do czasu wykonania algorytmu równoległego uzyskanego dla n procesorów
Twoja odpowiedź: d) Iloraz czasu wykonania optymalnej implementacji algorytmu sekwencyjnego dla zadania o wielkości n do czasu wykonania algorytmu równoległego uzyskanego dla n procesorów
Pytanie 8
Efektywność wykorzystania procesorów:
- a) Jest ilorazem czasu wykonania algorytmu sekwencyjnego i czasu wykonania algorytmu równoległego
- b) Maleje wraz ze wzrostem liczby procesorów
- c) Rośnie wraz ze wzrostem liczby procesorów
- d) Jest ilorazem przyśpieszenia i liczby procesorów
Twoja odpowiedź: d) Jest ilorazem przyśpieszenia i liczby procesorów
b) Maleje wraz ze wzrostem liczby procesorów
Pytanie 9
Obliczenia równoległe są to obliczenia współbieżne:
- a) Realizowane na wielu komputerach
- b) Realizowane na maszynie z pamięcią współdzieloną
- c) Realizowane jedynie na wielu procesorach tej samej maszyny
- d) Realizowane na wielu procesorach/rdzeniach tej samej maszyny
Twoja odpowiedź: d) Realizowane na wielu procesorach/rdzeniach tej samej maszyny
Pytanie 10
Z prawa Amdahla wynika, że:
- a) Przyśpieszenie, które można uzyskać, jest tym większe, im większy jest udział części sekwencyjnej
- b) Przyśpieszenie, które można uzyskać, jest ograniczone i zależy od udziału części sekwencyjnej w programie
- c) Przyśpieszenie, które można uzyskać, jest tym mniejsze, im większy jest udział części równoległej
- d) Przyśpieszenie, które można uzyskać, jest ograniczone funkcją liniową
Twoja odpowiedź: b) Przyśpieszenie, które można uzyskać, jest ograniczone i zależy od udziału części sekwencyjnej w programie
Pytanie 11
Dyrektywa single w OpenMP:
- a) Nie ma takiej dyrektywy, jest to klauzula
- b) Powoduje, że kod jest wykonywany tylko przez wątek główny
- c) Powoduje, że kod jest wykonywany tylko przez jeden wątek
- d) To to samo co dyrektywa
master
Twoja odpowiedź: c) Powoduje, że kod jest wykonywany tylko przez jeden wątek
Pytanie 12
Rozdrobnienie obliczeń (granulacja):
- a) Im mniejsze, tym większe jest przyśpieszenie algorytmu
- b) Minimalizuje czas wykonania algorytmu równoległego
- c) Daje lepsze przyśpieszenie w modelach z pamięcią wspólną niż z rozproszoną
- d) Rośnie wraz z liczbą procesów, jeśli zadań jest mało
Twoja odpowiedź: c) Daje lepsze przyśpieszenie w modelach z pamięcią wspólną niż z rozproszoną
Pytanie 13
Który z poniższych błędów jest niemożliwy w podanym konstrukcie OpenMP?
- a) Wyścig w
#pragma omp parallel - b) Zakleszczenie w
#pragma omp parallel - c) Konflikt danych w
#pragma omp critical - d) Zależność danych w
#pragma omp for
Twoja odpowiedź: c) Konflikt danych w #pragma omp critical
Pytanie 14
Do transferu 10-elementowej tablicy typu integer używa się MPI_Send. Podczas wywołania MPI_Send, proces MPI ma 50 KB wolnego wewnętrznego buforu. Jaka odpowiedź będzie poprawna?
- a) Jest to komunikacja nieblokująca. MPI implementacja zapisze komunikat w buforze wewnętrznym i wraca.
- b) Jest to komunikacja blokująca. MPI implementacja blokuje proces nadawcy aż do momentu, gdy odbiorca nie odbierze komunikatu.
- c) Wielkość zapisanego buforu można sprawdzić, wykorzystując
MPI_Probe. - d) Jest to komunikacja blokująca. MPI implementacja zapisze komunikat w buforze wewnętrznym i zwraca kontrolę.
Twoja odpowiedź: d) Jest to komunikacja blokująca. MPI implementacja zapisze komunikat w buforze wewnętrznym i zwraca kontrolę.
Pytanie 15
Do stworzenia siatki kartezjańskiej używamy MPI_Cart_create. Liczba procesów w komunikatorze MPI_COMM_WORLD wynosi 6. Wtedy następujący kod:
int NDim = 2, Reorder = 1, DimensionSize[2] = {2,2}, coords[2];
int Periods[2] = {0,0};
MPI_Comm newComm;
MPI_Cart_create(MPI_COMM_WORLD, 2, DimensionSize, Periods, Reorder, &newComm);
if(rank == 3) {
MPI_Cart_coords(newComm, rank, NDim, &coords[0]);
cout << "Jestem " << rank << " Coords = <" << coords[0] << "," << coords[1] << ">";
}- a) wyświetli: Jestem: 3, Coords = <2,1>
- b) wyświetli: Jestem: 3, Coords = <1,2>
- c) wyświetli: Jestem: 3, Coords = <1,1>
- d) generuje błąd
Twoja odpowiedź: d) generuje błąd
Pytanie 16
Dany fragment kodu z użyciem MPI został uruchomiony na 4 procesach:
int a[4][4] = { {1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16} };
int b[4];
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Scatter(&a, 3, MPI_INT, &b, 3, MPI_INT, root, MPI_COMM_WORLD);
if(rank == root) {
for(int i = 0; i < 4; i++) {
cout << b[i];
}
}- a) wyświetli wektor {1, 4, 8, 12}
- b) wyświetli wektor {1, 4, 8, 0}
- c) wyświetli wektor {1, 2, 3, 4}
- d) wyświetli wektor {1, 2, 3, 0}
Twoja odpowiedź: d) wyświetli wektor {1, 2, 3, 0}
Pytanie 17
Polecenie squeue:
- a) wyświetla listę wszystkich oczekujących zadań
- b) wyświetla liczbę wolnych nodów
- c) wyświetla listę wszystkich uruchomionych zadań
- d) wyświetla informacje o maszynach w klastrze
Twoja odpowiedź: a) wyświetla listę wszystkich oczekujących zadań
c) wyświetla listę wszystkich uruchomionych zadań
Pytanie 18
Które ze zdań na temat OpenMP nie jest prawdziwe?
- a) Trzema głównymi elementami API są dyrektywy kompilatora, zmienne statyczne oraz funkcje biblioteczne
- b) Rozwinięciem nazwy jest Open Multi-processing
- c) Jest to API umożliwiające tworzenie programów korzystających z pamięci rozproszonej
- d) Istnieje wiele implementacji standardu OpenMP
Twoja odpowiedź: c) Jest to API umożliwiające tworzenie programów korzystających z pamięci rozproszonej
Pytanie 19
Dany fragment kodu z użyciem MPI został uruchomiony na 6 procesach:
MPI_Group group, newGroup;
MPI_Comm newComm;
int tab[4] = {4, 1, 2, 5};
MPI_Comm_group(MPI_COMM_WORLD, &group);
MPI_Group_incl(group, 4, tab, &newGroup);
MPI_Comm_create(MPI_COMM_WORLD, newGroup, &newComm);- a) Stworzy się nowa grupa procesów newGroup = {P4, P1, P2, P5}, oraz nowy komunikator
- b) Stworzy się nowa podgrupa procesów newGroup = {P0, P1, P2, P3}, {P0}, {P0, P1}, {P0, P1, P2, P3, P4}
- c) Stworzy się nowa grupa procesów newGroup = {P0, P1, P2, P4}, oraz nowy komunikator
- d) Stworzy się jedynie grupa procesów newGroup = {P4, P1, P2, P5}
Twoja odpowiedź: a) Stworzy się nowa grupa procesów newGroup = {P4, P1, P2, P5}, oraz nowy komunikator
Pytanie 20
Odnośnie przydzielania zadań procesom – prawdziwe jest stwierdzenie:
- a) Cykliczne rozmieszczanie zadań zwiększa koszty komunikacji
- b) Metoda probabilistyczna rozdzielania zadań jest efektywna przy liczbie zadań dwukrotnie większej od liczby procesów
- c) Zagadnienie przydzielania zadań procesom jest problemem NP-zupełnym
- d) Zmienna liczba zadań utrudnia rozmieszczanie zadań
Twoja odpowiedź: a) Cykliczne rozmieszczanie zadań zwiększa koszty komunikacji
c) Zagadnienie przydzielania zadań procesom jest problemem NP-zupełnym
d) Zmienna liczba zadań utrudnia rozmieszczanie zadań