
все
.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. визначення часу виконання паралельної програми 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. Виконання паралельної ділянки по умові. Входження в паралельну ділянку виконується тільки при виконання деякої умови B. Явне задання кількості потоків, які будуть виконувати паралельну область C. Всім змінним в паралельній області яким явно не присвоєний клас він присвоюється D. Задає список змінних, для яких створюється локальна копія в кожному потоці, початкове значення локальних копій змінних із списку не визначено |
Запитання 23: Множина варіантів
Опція директиви parallel “firstprivate” –
Задає
список змінних, для яких створюється
локальна копія в кожному потоці, локальні
копії змінних ініціюються значеннями
цих змінних в потоці-майстрі
Задає
список змінних, спільних для всіх потоків
Задає
список змінних, оголошених як threadprivate,
які при вході в паралельну область
ініціюються значеннями відповідних
змінних в потоці-майстрі
Задає
оператор і список спільних змінних, для
кожної змінної створюються локальні
копії в кожному потоці, локальні копії
ініціалізуються відповідно типу
оператора
Запитання 24: Множина варіантів
Опція директиви parallel “shared” –
Задає
список змінних, для яких створюється
локальна копія в кожному потоці, локальні
копії змінних ініціюються значеннями
цих змінних в потоці-майстрі
Задає
список змінних, спільних для всіх потоків
Задає
список змінних, оголошених як threadprivate,
які при вході в паралельну область
ініціюються значеннями відповідних
змінних в потоці-майстрі
Задає
оператор і список спільних змінних, для
кожної змінної створюються локальні
копії в кожному потоці, локальні копії
ініціалізуються відповідно типу
оператора
Запитання 25: Множина варіантів
Опція директиви parallel “copyin” –
Задає
список змінних, для яких створюється
локальна копія в кожному потоці, локальні
копії змінних ініціюються значеннями
цих змінних в потоці-майстрі
Задає
список змінних, спільних для всіх потоків
Задає
список змінних, оголошених як threadprivate,
які при вході в паралельну область
ініціюються значеннями відповідних
змінних в потоці-майстрі
Задає
оператор і список спільних змінних, для
кожної змінної створюються локальні
копії в кожному потоці, локальні копії
ініціалізуються відповідно типу
оператора
Запитання 26: Множина варіантів
Опція директиви parallel “reduction” –
Задає
список змінних, для яких створюється
локальна копія в кожному потоці, локальні
копії змінних ініціюються значеннями
цих змінних в потоці-майстрі
Задає
список змінних, спільних для всіх потоків
Задає
список змінних, оголошених як threadprivate,
які при вході в паралельну область
ініціюються значеннями відповідних
змінних в потоці-майстрі
Задає
оператор і список спільних змінних, для
кожної змінної створюються локальні
копії в кожному потоці, локальні копії
ініціалізуються відповідно типу
оператора
Запитання 27: Відповідність (графічне)
Поставте у відповідність опції директиви parallel
|
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();