все
.doc#pragma omp parallel
{
#pragma omp master
{
mode();
}
}
}
![]()
Перевіряє
приналежність до паралельної чи
послідовної області
![]()
Шукає
паралельні та послідовні області
![]()
Чекає
появи паралельної ділянки інакше
виводить послідовна область
![]()
Знаходить
паралельну ділянку закриває її, виводить
що дана ділянка є послідовною
Запитання 37: Множина варіантів
Директива #pragma omp single [опція [[,] опція]...]
![]()
Задає
ділянку яка має бути виконана лише один
раз
![]()
Закриває
паралельні ділянки
![]()
Визначає
кількість процесів
![]()
Виводить
ділянки які виконуються лише один раз
Запитання 38: Множина варіантів
Для pragma omp single опція «private»:
![]()
Задає
список змінних , для яких створюється
локальна копія в кожному з потоків,
початкове значення копій змінних із
списку не визначено
![]()
Задає
список змінних , для яких створюється
локальна копія в кожному з потоків,
локальні копії змінних ініціалізуються
значеннями цих змінних в потокові –
майстер
![]()
Після
виконання потоку, що містить конструкцію
single , нові значення змінних списку будуть
доступні всім приватним змінним.
![]()
Після
виконання виділеної області відбувається
неявна бар’єрна синхронізація паралельно
працюючих потоків
Запитання 39: Множина варіантів
Для pragma omp single опція «firstprivate»:
![]()
Задає
список змінних , для яких створюється
локальна копія в кожному з потоків,
початкове значення копій змінних із
списку не визначено
![]()
Задає
список змінних , для яких створюється
локальна копія в кожному з потоків,
локальні копії змінних ініціалізуються
значеннями цих змінних в потокові –
майстер
![]()
Після
виконання потоку, що містить конструкцію
single , нові значення змінних списку будуть
доступні всім приватним змінним.
![]()
Після
виконання виділеної області відбувається
неявна бар’єрна синхронізація паралельно
працюючих потоків
Запитання 40: Множина варіантів
Для pragma omp single опція «copyprivate»:
![]()
Задає
список змінних , для яких створюється
локальна копія в кожному з потоків,
початкове значення копій змінних із
списку не визначено
![]()
Задає
список змінних , для яких створюється
локальна копія в кожному з потоків,
локальні копії змінних ініціалізуються
значеннями цих змінних в потокові –
майстер
![]()
Після
виконання потоку, що містить конструкцію
single , нові значення змінних списку будуть
доступні всім приватним змінним.
![]()
Після
виконання виділеної області відбувається
неявна бар’єрна синхронізація паралельно
працюючих потоків
Запитання 41: Множина варіантів
Для pragma omp single опція «nowait»:
![]()
Задає
список змінних , для яких створюється
локальна копія в кожному з потоків,
початкове значення копій змінних із
списку не визначено
![]()
Задає
список змінних , для яких створюється
локальна копія в кожному з потоків,
локальні копії змінних ініціалізуються
значеннями цих змінних в потокові –
майстер
![]()
Після
виконання потоку, що містить конструкцію
single , нові значення змінних списку будуть
доступні всім приватним змінним.
![]()
Після
виконання виділеної області відбувається
неявна бар’єрна синхронізація паралельно
працюючих потоків
Запитання 42: Відповідність (графічне)
Поставте у відповідність опціям pragma omp single їхнє значення
|
|
A. Після виконання виділеної області відбувається неявна бар’єрна синхронізація паралельно працюючих потоків B. Після виконання потоку, що містить конструкцію single , нові значення змінних списку будуть доступні всім приватним змінним. C. Задає список змінних , для яких створюється локальна копія в кожному з потоків, локальні копії змінних ініціалізуються значеннями цих змінних в потокові – майстер D. Задає список змінних , для яких створюється локальна копія в кожному з потоків, початкове значення копій змінних із списку не визначено |
Запитання 43: Множина варіантів
Що робить директива #pragma omp master?
![]()
Виділяє
ділянку коду який буде виконаний лише
потоком -майстром
![]()
Виділяє
ділянку коду який буде виконаний
паралельним потоками
![]()
Задає
перехід від потоку майстра до паралельних
потоків
![]()
Задає
кількість потоків-майстрів
Запитання 44: Множинна відповідь
В OpenMP змінні в паралельних областях програми розділяються на наступні основні класи
![]()
Shared
![]()
Private
![]()
Public
![]()
Protected
Запитання 45: Множина варіантів
В скількох екземплярах може існувати спільна змінна в паралельних областях програми?
![]()
В
одному
![]()
В
двох
![]()
Залежно
від кількості паралельних ділянок
![]()
Кількість
паралельних ділянок в стені 2
Запитання 46: Множина варіантів
Якщо декілька змінних одночасно записують значення в спільну змінну без виконання синхронізації такий процес називається:
![]()
«гонки
даних»
![]()
«гонки
процесів»
![]()
«гонки
потоків»
![]()
«гонки
змінних»
Запитання 47: Множина варіантів
Якщо як мінімум один потік читає значення змінної і як мінімум один потік записує значення в цю змінну без виконання синхронізації то виникають:
![]()
«гонки
даних»
![]()
«гонки
процесів»
![]()
«гонки
потоків»
![]()
«гонки
змінних»
Запитання 48: Множина варіантів
За замовчуванням, всі змінні, створенні поза паралельною областю, при вході в цю область залишаються:
![]()
Shared
![]()
Private
![]()
Public
![]()
Protected
Запитання 49: Множина варіантів
Змінні, створенні в паралельній області за замовчуванням являються:
![]()
Shared
![]()
Private
![]()
Public
![]()
Protected
Запитання 50: Множина варіантів
В мові «С» статичні (static) змінні визначені в паралельній ділянці програми і є:
![]()
Shared
![]()
Private
![]()
Public
![]()
Protected
Запитання 51: Множинна відповідь
В мові «С» динамічно виділена пам’ять в паралельній ділянці програми і є:
![]()
Спільною
![]()
Спільною,
але вказівник може буде як спільним так
і локальним
![]()
Локальною
![]()
Локальною,
але вказівник може буде як спільним так
і локальним
Запитання 52: Множина варіантів
В мові «Fortran» по замовчуванню спільними являються елементи:
![]()
COMMON
– блоків
![]()
SHARED
-блоків
![]()
PUBLIC
-блоків
![]()
Блоків
визначення
Запитання 53: Множинна відповідь
Директива threadprivate вказує що:
![]()
змінні
із списку повинні бути дубльовані
![]()
в
результаті кожна змінна отримує свою
локальну копію
![]()
змінні
із списку не повинні бути дубльовані
![]()
в
результаті кожна змінна отримує свою
shared копію
Запитання 54: Множина варіантів
Виклик функції omp_get_thread_num():
![]()
Дозволяє
потоку отримати свій унікальний номер
в поточній паралельній ділянці
![]()
Створює
нові процеси в поточній паралельній
ділянці
![]()
Виводить
нумерацію потоків
![]()
Дозволяє
процесу отримати свій унікальний номер
в поточній паралельній ділянці
Запитання 55: Множина варіантів
Виклик функції omp_get_num_threads():
![]()
Дозволяє
потоку отримати кількість потоків п
поточній паралельній ділянці
![]()
Дозволяє
потоку отримати свій унікальний номер
в поточній паралельній ділянці
![]()
Створює
нові процеси в поточній паралельній
області
![]()
Дозволяє
процесу отримати свій унікальний номер
в поточній паралельній ділянці
Запитання 56: Множинна відповідь
Що виконується в даній програмі ?
#include <stdio.h>
#include <omp.h>
int main(int argc, char *argv[])
{
int count, num;
#pragma omp parallel
{
count=omp_get_num_threads();
num=omp_get_thread_num();
if (num == 0) printf("Потоків: %d\n", count);
else printf("Потік номер %d\n", num);
}
}
![]()
Нульовий
потік виведе загальну кількість створених
потоків
![]()
Всі
потоки крім нульового виведуть свої
порядкові номера
![]()
Нульовий
потік виведе порядкові номери всіх
потоків
![]()
Всі
потоки виведуть свої номера
Запитання 57: Множинна відповідь
Що виконується в даній програмі ?
program example17b
include "omp_lib.h"
integer count, num
!$omp parallel
count=omp_get_num_threads()
num=omp_get_thread_num()
if (num .eq. 0) then
print *, "Потоків: ", count
else
print *, "потік номер ", num
end if
!$omp end parallel
End
![]()
Нульовий
потік виведе загальну кількість створених
потоків
![]()
Нульовий
потік виведе загальну кількість створених
потоків
![]()
Нульовий
потік виведе порядкові номери всіх
потоків
![]()
Всі
потоки виведуть свої номера
Запитання 58: Множинна відповідь
Використовуючи які функції можна призначити кожному потокові свою частину коду для виконання, і таким чином розділяти роботу між потоками в стилі технології МРІ?
![]()
omp_get_thread_num()
![]()
omp_get_num_threads()
![]()
omp_set_thread_num()
![]()
omp_set_num_threads()
Запитання 59: Множина варіантів
Якщо в паралельній області зустрівся оператор циклу, то :
![]()
Він
буде виконаний всіма потоками поточної
групи
![]()
Він
буде виконаний одним потоком поточної
групи
![]()
Він
не буде виконаний
![]()
Він
буде виконаний частиною потоків поточної
групи
Запитання 60: Множинна відповідь
Що виконує нижче наведена програма?
#include <stdio.h>
#include <omp.h>
int main(int argc, char *argv[])
{
int A[10], B[10], C[10], i, n;
for (i=0; i<10; i++){ A=i; B=2*i; C=0; }
#pragma omp parallel shared(A, B, C) private(i, n)
{
n=omp_get_thread_num();
#pragma omp for
for (i=0; i<10; i++)
{
C=A+B;
printf("Потік %d додав елементи з номером %d\n",
n, i);
}
}
}
![]()
На
кожній і-тій ітерації додаютьсяі-ті
елементи масивів A I B результат записується
в і-тий елемент масиву С.
![]()
На
кожній ітерації буде виведено номер
потоку, що виконав дану ітерацію
![]()
На
кожній ітерації буде збільшено кількість
потоків
![]()
На
кожній ітерації значення shared міняється
на private
Запитання 61: Множинна відповідь
Що виконує дана програма:
program example18b
include "omp_lib.h"
integer A(10), B(10), C(10), i, n
do i=1, 10
A(i)=i
B(i)=2*i
C(i)=0
end do
!$omp parallel shared(A, B, C) private(i, n)
n=omp_get_thread_num()
!$omp do
do i=1, 10
C(i)=A(i)+B(i)
print *, "Stream ", n, " folded with the number of elements ", i
end do
!$omp end parallel
End
![]()
На
кожній і-тій ітерації додаютьсяі-ті
елементи масивів A I B результат записується
в і-тий елемент масиву С.
![]()
На
кожній ітерації буде виведено номер
потоку, що виконав дану ітерацію
![]()
На
кожній ітерації буде збільшено кількість
потоків
![]()
На
кожній ітерації значення shared міняється
на private
Запитання 62: Множина варіантів
Зміна значення OMP_SCHEDULE з програми виконується наступним чином
![]()
void
omp_set_schedule(omp_sched_t type, int chunk);
![]()
void
omp_get_schedule(omp_sched_t type, int chunk);
![]()
void
omp_show_schedule(omp_sched_t type, int chunk);
![]()
void
omp_init_schedule(omp_sched_t type, int chunk);
Запитання 63: Множина варіантів
За допомогою виклику якої функції користувач може дізнатися поточне значення OMP_SHEDULE?
![]()
void
omp_get_schedule(omp_sched_t* type, int* chunk);
![]()
void
omp_set_schedule(omp_sched_t* type, int* chunk);
![]()
void
omp_out_schedule(omp_sched_t* type, int* chunk);
