все
.docЦе модель паралельного програмування в рамках якої тільки для деяких паралельних потоків використовується один і той же код.
Це модель паралельного програмування в рамках якої тільки для деяких паралельних потоків використовується різний код.
Запитання 8: Множина варіантів
Директива компілятору про початок паралельного коду на C/C++
#pragma omp directive-name [опція[[,] опція]...]
#pragma mpi directive-name
#pragma mpi directive-name [опцiя[[,] опцiя]..
#pradma omp directive-name [опція[[,] опція]...]]
Запитання 9: Множинна відповідь
Директива компілятору про початок паралельного коду на Fortran
!$OMP directive-name [опція[[,] опція]...]
С$OMP directive-name [опція[[,] опція]...]
*$OMP directive-name [опція[[,] опція]...]
*$COMP directive-name [опція[[,] опція]...]
Запитання 10: Множинна відповідь
Всі директиви можна розділити на наступні категорії :
Визначення паралельної ділянки
Розподіл роботи
Синхронізації
Виявлення ефективних частин коду
Запитання 11: Множинна відповідь
Щоб задіяти функції бібліотеки OpenMР в програму потрібно включити файл заголовку:
omp.h (C)
omp_lib.h (Fortran)
omp.h (Fortran)
omp_lib.h (C)
Запитання 12: Множина варіантів
Всі функції що використовуються в OpenMР починаються з префіксу
omp_
parallel
parallel_opm_
parallel_ streams
Запитання 13: Множина варіантів
Для задання кількості потоків на яких буде виконуватися програма, в командній оболонці bash потрібно записати наступну команду:
export OMP_NUM_THREADS=n
export OMPI_NUMB_THREADS=n
import OMP_NUM_THREADS=n
export OPEN_MP_NUM_THREADS=n
Запитання 14: Множина варіантів
Для визначення часу виконання паралельної програми на мові “С” використовується функція:
double omp_get_wtime(void);
double omp_set_wtime(void);
double open_mp_get_wtime(void);
double open_mp_set_wtime(void);
Запитання 15: Множина варіантів
Для визначення часу виконання паралельної програми на мові “Fortran” використовується функція:
double precision function omp_get_wtime()
double function omp_get_wtime()
double detect function open_mp_get_wtime()
double function open_mp_get_wtime()
Запитання 16: Множина варіантів
Функція omp_get_wtick():
Повертає час у повному форматі
Повертає час в хвилинах
Повертає час в викликаному потоці у секундах
Повертає час з урахуванням часового діапазону
Запитання 17: Відповідність (графічне)
Поставити у відповідність
A. omp_get_wtime() B. omp_get_wtick() B. OMP_NUM_THREADS=n |
A. визначення часу виконання паралельної програми B. Повертає час в викликаному потоці у секундах C. Задає кількість потоків на яких буде виконана програма |
Запитання 18: Множинна відповідь
В результаті виконання наступного коду на екран виводиться
#include <stdio.h>
#include <omp.h>
int main(int argc, char *argv[])
{
double start_time, end_time, tick;
start_time = omp_get_wtime();
end_time = omp_get_wtime();
tick = omp_get_wtick();
printf("Time to time measurement %lf\n", end_time-start_time);
printf("The accuracy of the timer %lf\n", tick);
}
Точність таймера
Час який потрібен на виконання функції заміру часу
Час який потрібен на виконання програми
Помилка виконання
Запитання 19: Множина варіантів
В результаті виконання наступного коду на екран виводиться:
#include <stdio.h>
#include <omp.h>
int main(int argc, char *argv[])
{
double start_time, end_time, tick;
start_time = open_mp_get_wtime();
end_time = open_mp_get_wtime();
tick = open_mp_get_wtick();
printf("Time to time measurement %lf\n", end_time-start_time);
printf("The accuracy of the timer %lf\n", tick);
}
Час який потрібен на компіляцію програми
Час який потрібен на виконання функції заміру часу
Час який потрібен на виконання програми
Помилка
Запитання 20: Множина варіантів
Паралельна область програми на мові «С» задається за допомогою наступної директиви :
#pragma omp parallel [опція[[,] опція]...]
#pragma open_mp_ parallel [опція[[,] опція]...]
!$omp parallel [опцiя[[,] опцiя]...]
# omp parallel [опція[[,] опція]...]
Запитання 21: Множина варіантів
Паралельна область програми на мові «Fortran» задається за допомогою наступної директиви :
!$omp parallel [опцiя[[,] опцiя]...]
# omp parallel [опція[[,] опція]...]
#pragma omp parallel [опція[[,] опція]...]
!$openmp parallel [опцiя[[,] опцiя]...]
Запитання 22: Відповідність (графічне)
Покладіть у відповідність можливі опції директиви parallel їх функціям
A. If B. num_threads C. Default D. Private |
A. Виконання паралельної ділянки по умові. Входження в паралельну ділянку виконується тільки при виконання деякої умови B. Явне задання кількості потоків, які будуть виконувати паралельну область C. Всім змінним в паралельній області яким явно не присвоєний клас він присвоюється D. Задає список змінних, для яких створюється локальна копія в кожному потоці, початкове значення локальних копій змінних із списку не визначено |
Запитання 23: Множина варіантів
Опція директиви parallel “firstprivate” –
Задає список змінних, для яких створюється локальна копія в кожному потоці, локальні копії змінних ініціюються значеннями цих змінних в потоці-майстрі
Задає список змінних, спільних для всіх потоків
Задає список змінних, оголошених як threadprivate, які при вході в паралельну область ініціюються значеннями відповідних змінних в потоці-майстрі
Задає оператор і список спільних змінних, для кожної змінної створюються локальні копії в кожному потоці, локальні копії ініціалізуються відповідно типу оператора
Запитання 24: Множина варіантів
Опція директиви parallel “shared” –
Задає список змінних, для яких створюється локальна копія в кожному потоці, локальні копії змінних ініціюються значеннями цих змінних в потоці-майстрі
Задає список змінних, спільних для всіх потоків
Задає список змінних, оголошених як threadprivate, які при вході в паралельну область ініціюються значеннями відповідних змінних в потоці-майстрі
Задає оператор і список спільних змінних, для кожної змінної створюються локальні копії в кожному потоці, локальні копії ініціалізуються відповідно типу оператора
Запитання 25: Множина варіантів
Опція директиви parallel “copyin” –
Задає список змінних, для яких створюється локальна копія в кожному потоці, локальні копії змінних ініціюються значеннями цих змінних в потоці-майстрі
Задає список змінних, спільних для всіх потоків
Задає список змінних, оголошених як threadprivate, які при вході в паралельну область ініціюються значеннями відповідних змінних в потоці-майстрі
Задає оператор і список спільних змінних, для кожної змінної створюються локальні копії в кожному потоці, локальні копії ініціалізуються відповідно типу оператора
Запитання 26: Множина варіантів
Опція директиви parallel “reduction” –
Задає список змінних, для яких створюється локальна копія в кожному потоці, локальні копії змінних ініціюються значеннями цих змінних в потоці-майстрі
Задає список змінних, спільних для всіх потоків
Задає список змінних, оголошених як threadprivate, які при вході в паралельну область ініціюються значеннями відповідних змінних в потоці-майстрі
Задає оператор і список спільних змінних, для кожної змінної створюються локальні копії в кожному потоці, локальні копії ініціалізуються відповідно типу оператора
Запитання 27: Відповідність (графічне)
Поставте у відповідність опції директиви parallel
A. reduction B. copyin C. shared D. firstprivate |
A. Задає оператор і список спільних змінних, для кожної змінної створюються локальні копії в кожному потоці, локальні копії ініціалізуються відповідно типу оператора B. Задає список змінних, оголошених як threadprivate, які при вході в паралельну область ініціюються значеннями відповідних змінних в потоці-майстрі C. Задає список змінних, спільних для всіх потоків D. Задає список змінних, для яких створюється локальна копія в кожному потоці, локальні копії змінних ініціюються значеннями цих змінних в потоці-майстрі |
Запитання 28: Множина варіантів
1) Дана програма виконує
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("Послідовна ділянка 1\n");
#pragma omp parallel
{
printf("Паралельна ділянка\n");
}
printf("Послідовна ділянка 2\n");
}
Звичайне виведення (послідовна ділянка 1, паралельна ділянка, послідовна ділянка 2)
Потік майстер виводить «Послідовна ділянка 1 », далі створюються нові потоки кожен з яки виводить «Паралельна ділянка », далі потоки завершуються і виводиться «Послідовна ділянка 2 »
Потік майстер виводить «Послідовна ділянка 1 », далі створюються нові потоки які виводять один запис «Паралельна ділянка», далі потоки завершуються і виводиться «Послідовна ділянка 2 »
Потік майстер виводить «Послідовна ділянка 1 », далі створюються нові потоки які виводять один запис «Паралельна ділянка», далі паралельні потоки виводять «Послідовна ділянка 2 »
Запитання 29: Множина варіантів
1) Дана програма виконує:
#include <stdio.h>
int main(int argc, char *argv[])
{
int count = 0;
#pragma omp parallel reduction (+: count)
{
count++;
printf("Поточне значення count: %d\n", count);
}
printf("streams: %d\n", count);
}
Виведення кількості потоків
Виведення кількості задіяних процесорів
Виведення кількості змінних
Виведення кількості функцій
Запитання 30: Множина варіантів
Виклик функції «void omp_set_num_threads(int num);» дозволяє:
Змінити значення по замовчуванню змінної OMP_NUM_THREADS
Змінити значення по замовчуванню reduction
Запустити паралельні потоки
Зупинити всі запущені потоки
Запитання 31: Множина варіантів
Для динамічної зміни кількості потоків використовується наступна команда
export OMP_DYNAMIC=true
export OPEN_mp_DYNAMIC=true
export DYNAMIC=true
export OMP_SET_DYNAMIC=true
Запитання 32: Множина варіантів
Дізнатися значення змінної OMP_DYNAMIC можна за допомогою функції
omp_get_dynamic()
omp_get_parallel_dynamic()
omp_get_dynamic_laer()
omp_get_dn_dynamic_l()
Запитання 33: Множина варіантів
Функція omp_get_max_threads()
повертає максимально допустиме число потоків
повертає максимальне значення кожного з потоків
повертає максимально допустиме значення процесів
повертає ранг процесів
Запитання 34: Множина варіантів
Функція omp_get_num_procs():
Повертає кількість процесів
Повертає номер процесу
Повертає чергу процесів
Повертає кількість потоків
Запитання 35: Множина варіантів
Чи можна керувати вкладеними паралельними ділянками?
Так за допомогою OMP_NESTED
Так за допомогою OMP_INTEGSET
Так за допомогою OMP_DYNAMIC
Ні
Запитання 36: Множина варіантів
Що виконує нижче наведений код ?
#include <stdio.h>
#include <omp.h>
void mode(void){
if(omp_in_parallel()) printf("Паралельна ділянка\n");
else printf("Послідовна ділянка\n");
}
int main(int argc, char *argv[])
{
mode();