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_threads podczas 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 parallel oraz klauzuli num_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ń

Entradas relacionadas: