игра брюс 2048
Главная / Программирование / Параллельное программирование с 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)aW(x)bS
P2:R(x)aR(x)bS
P3:R(x)bR(x)aS

Ответ:

 (1) допустима при слабой модели консистентности  

 (2) не допустима при слабой модели консистентности  

 (3) допустима при модели консистентности по выходу  


Номер 2
Пусть W(x)a – операция записи в переменную x значения a. Пусть R(x)a – операция чтения переменной x, где a – прочитанное значение переменной x. Пусть S - операция синхронизации. Следующая последовательность событий:
 
P1: W(x)aW(x)bS
P2:SR(x)a

Ответ:

 (1) допустима при слабой модели консистентности  

 (2) не допустима при слабой модели консистентности  

 (3) допустима при модели консистентности по выходу  


Номер 3
Пусть W(x)a – операция записи в переменную x значения a. Пусть R(x)a – операция чтения переменной x, где a – прочитанное значение переменной x. Следующая последовательность событий:
 
P1: W(x)aW(x)c
P2:R(x)aW(x)b
P3:R(x)aR(x)cR(x)b
P4:R(x)aR(x)bR(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) в данном фрагменте программы ошибки нет 




Главная / Программирование / Параллельное программирование с OpenMP / Тест 2