Главная / Программирование /
Параллельное программирование с OpenMP / Тест 3
Параллельное программирование с OpenMP - тест 3
Упражнение 1:
Номер 1
Использование операторов перехода (goto
) в структурном блоке OpenMP возможно:
Ответ:
 (1) если оператор перехода не выводит за пределы блока
 
 (2) поскольку в стандарте нет никаких ограничений на операторы перехода
 
 (3) в некоторых OpenMP-компиляторах (зависит от реализации)
 
Номер 2
Использование оператора exit
в структурном блоке OpenMP:
Ответ:
 (1) запрещено в стандарте
 
 (2) разрешено в стандарте
 
 (3) возможно в некоторых OpenMP-компиляторах (зависит от реализации)
 
Номер 3
Исполняемыми директивами в OpenMP являются:
Ответ:
 (1) barrier
 
 (2) taskwait
 
 (3) threadprivate
 
Упражнение 2:
Номер 1
Параллельная область в OpenMP создается при помощи:
Ответ:
 (1) вызова функции omp_set_max_active_levels
 
 (2) вызова функции omp_set_num_threads
 
 (3) директивы parallel
 
Номер 2
Функция omp_get_num_threads
возвращает:
Ответ:
 (1) количество нитей в текущей параллельной области
 
 (2) максимально возможное количество нитей, которые могут быть использованы при выполнении всей программы
 
 (3) номер нити в группе
 
Номер 3
Функция omp_get_thread_num
возвращает:
Ответ:
 (1) уникальный идентификатор нити
 
 (2) номер нити в группе
 
 (3) количество нитей в текущей параллельной области
 
Упражнение 3:
Номер 1
При реализации компилятором редукционного оператора, описанного при помощи клаузы reduction (+: sum)
, где переменная sum
имеет тип integer
, для каждой нити создается локальная копия переменной sum
, начальное значение которой будет инициализировано:
Ответ:
 (1) 0 
 (2) -MAXINT (минимально возможное целое число)
 
 (3) MAXINT (максимально возможное целое число)
 
Номер 2
При реализации компилятором редукционного оператора, описанного при помощи клаузы reduction (*: prod)
, где переменная prod
имеет тип integer
, для каждой нити создается локальная копия переменной prod, начальное значение которой будет инициализировано:
Ответ:
 (1) 1 
 (2) 0 
 (3) MAXINT (максимально возможное целое число)
 
Номер 3
При реализации компилятором редукционного оператора, описанного при помощи клаузы reduction (-: sub)
, где переменная sub
имеет тип integer
, для каждой нити создается локальная копия переменной sub
, начальное значение которой будет инициализировано:
Ответ:
 (1) -MAXINT (минимально возможное целое число)
 
 (2) 0 
 (3) MAXINT (максимально возможное целое число)
 
Упражнение 4:
Номер 1
Клауза copyin
:
Ответ:
 (1) может быть использована только для переменных, указанных в клаузе private
 
 (2) может быть использована только для переменных, указанных в директиве threadprivate
 
 (3) может быть использована как для переменных указанных в директиве threadprivate
, так и для переменных, указанных в клаузе private
 
Номер 2
Клауза num_threads
задает:
Ответ:
 (1) максимально возможное число нитей, которые будут созданы при входе в параллельную область
 
 (2) число нитей, которые обязательно будут созданы при входе в параллельную область
 
 (3) максимально возможное количество нитей, которые могут быть использованы при выполнении всей программы
 
Номер 3
Найдите ошибку в следующем фрагменте программы:
#define N 10
int i;
#pragma omp parallel firstprivate(i) lastprivate(i)
{
for (i=0; i<N; i++) {
…
}
}
Ответ:
 (1) одна и та же переменная не может быть указана в клаузах firstprivate
и lastprivate
одновременно
 
 (2) клауза lastprivate
не может использоваться в директиве parallel
 
 (3) клауза firstprivate
не может использоваться в директиве parallel
 
Упражнение 5:
Номер 1
Рассмотрим фрагмент OpenMP-программы:
#include <omp.h>
int n=1;
int main (void)
{
omp_set_nested(1);
omp_set_dynamic(1);
omp_set_num_threads(2);
#pragma omp parallel if (n>10)
{/*параллельная область*/
…
}
}
Для выполнения параллельной области будет создана группа нитей, состоящая из:
Ответ:
 (1) 1-ой нити
 
 (2) 2-х нитей
 
 (3) нескольких нитей (количество создаваемых нитей зависит от переменной окружения OMP_NUM_THREADS
)
 
Номер 2
Рассмотрим фрагмент OpenMP-программы:
#include <omp.h>
int main (void)
{
omp_set_nested(0);
omp_set_max_active_levels(8);
omp_set_num_threads(2);
#pragma omp parallel
{
omp_set_num_threads(2);
#pragma omp parallel
{ /*вложенная параллельная область*/
…
}
}
}
Для выполнения вложенной параллельной области будет создана группа нитей, состоящая из:
Ответ:
 (1) 1-ой нити
 
 (2) 2-х нитей
 
 (3) нескольких нитей (количество создаваемых нитей зависит от переменной окружения OMP_NUM_THREADS
)
 
Номер 3
Пусть перед входом в параллельную область вызывается функция omp_set_num_threads
. Пусть в директиве создания этой параллельной области указана клауза num_threads
. Количество создаваемых нитей будет:
Ответ:
 (1) определяться клаузой num_threads
 
 (2) определяться вызовом функции omp_set_num_threads
 
 (3) зависеть от реализации компилятора