Главная / Программирование /
Параллельное программирование с OpenMP / Тест 2
Параллельное программирование с OpenMP - тест 2
Упражнение 1:
Номер 1
Строгая модель консистентности памяти определяется следующим условием:
Ответ:
 (1) все обращения к ячейкам памяти абсолютно упорядочены во времени
 
 (2) все процессы наблюдают все обращения к ячейкам памяти в одном и том же порядке. Обращения не упорядочены по времени
 
 (3) все процессы наблюдают все обращения к ячейкам памяти, связанные причинно-следственной связью в одном и том же порядке
 
Номер 2
Последовательная модель консистентности памяти определяется следующим условием:
Ответ:
 (1) все обращения к ячейкам памяти абсолютно упорядочены во времени
 
 (2) все процессы наблюдают все обращения к ячейкам памяти в одном и том же порядке. Обращения не упорядочены по времени
 
 (3) все процессы наблюдают все обращения к ячейкам памяти, связанные причинно-следственной связью в одном и том же порядке
 
Номер 3
Причинная модель консистентности памяти определяется следующим условием:
Ответ:
 (1) все процессы наблюдают все обращения к ячейкам памяти в одном и том же порядке. Обращения не упорядочены по времени
 
 (2) все процессы наблюдают все обращения к ячейкам памяти, связанные причинно-следственной связью в одном и том же порядке
 
 (3) все процессы наблюдают операции записи любого процесса в порядке их выполнения. Операции записи различных процессов могут наблюдаться разными процессами в разном порядке
 
Упражнение 2:
Номер 1
PRAM модель консистентности памяти определяется следующим условием:
Ответ:
 (1) все процессы наблюдают все обращения к ячейкам памяти в одном и том же порядке. Обращения не упорядочены по времени
 
 (2) все процессы наблюдают все обращения к ячейкам памяти, связанные причинно-следственной связью в одном и том же порядке
 
 (3) все процессы наблюдают операции записи любого процесса в порядке их выполнения. Операции записи различных процессов могут наблюдаться разными процессами в разном порядке
 
Номер 2
Процессорная модель консистентности памяти определяется следующим условием:
Ответ:
 (1) все процессы наблюдают все обращения к ячейкам памяти в одном и том же порядке. Обращения не упорядочены по времени
 
 (2) все процессы наблюдают операции записи любого процесса в порядке их выполнения. Операции записи различных процессов могут наблюдаться разными процессами в разном порядке
 
 (3) все процессы наблюдают операции записи любого процесса в порядке их выполнения. Для каждой переменной существует общее согласие относительно порядка, в котором процессы модифицируют эту переменную. Операции записи различных процессов могут наблюдаться разными процессами в разном порядке
 
Номер 3
Слабая модель консистентности памяти определяется следующим условием:
Ответ:
 (1) совместно используемые данные могут считаться консистентными только после операции синхронизации;
 
 (2) совместно используемые данные могут считаться консистентными после выхода из критической области
 
 (3) совместно используемые данные, относящиеся к данной критической области, становятся консистентными при входе в эту область
 
Упражнение 3:
Номер 1
Пусть W(x)a – операция записи в переменную x значения a. Пусть R(x)a – операция чтения переменной x, где a – прочитанное значение переменной x. Пусть S - операция синхронизации. Следующая последовательность событий:
P1: W(x)a | W(x)b | S | | | |
|---|
P2: | | | R(x)a | R(x)b | S |
|---|
P3: | | | R(x)b | R(x)a | S |
|---|
Ответ:
 (1) допустима при слабой модели консистентности
 
 (2) не допустима при слабой модели консистентности
 
 (3) допустима при модели консистентности по выходу
 
Номер 2
Пусть W(x)a – операция записи в переменную x значения a. Пусть R(x)a – операция чтения переменной x, где a – прочитанное значение переменной x. Пусть S - операция синхронизации. Следующая последовательность событий:
Ответ:
 (1) допустима при слабой модели консистентности
 
 (2) не допустима при слабой модели консистентности
 
 (3) допустима при модели консистентности по выходу
 
Номер 3
Пусть W(x)a – операция записи в переменную x значения a. Пусть R(x)a – операция чтения переменной x, где a – прочитанное значение переменной x. Следующая последовательность событий:
P1: W(x)a | | | W(x)c | | |
|---|
P2: | R(x)a | W(x)b | | | |
|---|
P3: | R(x)a | | | R(x)c | R(x)b |
|---|
P4: | R(x)a | | | R(x)b | R(x)c |
|---|
Ответ:
 (1) допустима при строгой модели консистентности
 
 (2) допустима при причинной модели консистентности
 
 (3) допустима при последовательной модели консистентности
 
Упражнение 4:
Номер 1
Найдите ошибку в следующем фрагменте программы:
#define N 10
int i;
#pragma omp parallel
{
int tmp = 0;
#pragma omp for private(tmp)
for (i=0; i<N; i++) {
tmp += i;
}
}
Ответ:
 (1) не определен класс для переменной i (отсутствует клауза private (i))
 
 (2) начальное значение переменной tmp в параллельном цикле не определено
 
 (3) в данном фрагменте программы ошибки нет
 
Номер 2
Найдите ошибку в следующем фрагменте программы:
#define N 10
int i;
int tmp = 0;
#pragma omp parallel
{
#pragma omp for firstprivate(tmp) lastprivate(tmp)
for (i=0; i<N; i++) {
if (i != N - 1 ) tmp += i;
}
}
Ответ:
 (1) одна и та же переменная не может быть указана в клаузах firstprivate и lastprivate одновременно
 
 (2) не определен класс для переменной i (отсутствует клауза private (i))
 
 (3) по завершении выполнения цикла значение переменой tmp не определено
 
Упражнение 5:
Номер 1
Определите класс по умолчанию для переменной numt:
int i=0;
int numt = omp_get_max_threads();
#pragma omp parallel for
for(i=0; i< numt; i++)
Work(i);
Ответ:
 (1) private 
 (2) shared 
 (3) threadprivate 
Номер 2
Найдите ошибку в следующем фрагменте программы:
#define N 10
int icount;
#pragma omp threadprivate(icount)
#pragma omp parallel
{
#pragma omp for
for (icount=0; icount<N; icount++) {
…
}
}
Ответ:
 (1) только статические переменные могут быть указаны в директиве threadprivate (static int icount)
 
 (2) в качестве индексной переменной цикла, распределяемого между нитями при помощи директивы for, не могут использоваться переменные, указанные в директиве threadprivate
 
 (3) в данном фрагменте программы ошибки нет
 
Номер 3
Найдите ошибку в следующем фрагменте программы:
int i=0;
int numt = omp_get_max_threads();
#pragma omp parallel default (none) private (i)
{
#pragma omp for
for(i=0; i< numt; i++) Work(i);
}
Ответ:
 (1) не описан класс для переменной numt. Необходимо добавить спецификацию shared(numt)
 
 (2) не описан класс для переменной numt. Необходимо добавить спецификацию private(numt) 
 (3) в данном фрагменте программы ошибки нет