В данном раздели приведены задания для закрепления полученных знаний по технологии программирования параллельных компьютеров OPEN MP.
Задание 1. В коде допущена ошибка. Необходимо исправить данный код.
int a = 0; #pragma оmр parallel private(a) { a++; }
Задание 2. Определить ожидаемый результат, если число потоков по умолчанию равно 3.
int a; #pragma оmр parallel private(a) { а = 0; #pragma omp for for (int i = 0; i < 10; i++) { #pragma omp atomic a++; } #pragma omp critical { Cout<<«a=« << a; } }
Задание 3. Определить результат выполнения.
int a; #pragma оmр parallel private(a) { а = 0; #pragma оmр barrier #pragma оmр sections { #pragma оmр section { #pragma оmр atomic a+= 100; } #pragma оmр section { #pragma оmр atomic a+=1; } } #pragma оmр critical { cout<< «a = «<<a << endl; } }
Задание 4. Найти ошибку в коде:
int a[4096], b [4096]; int i; #pragma оmр parallel sections { #pragma оmр section { for (i = 0; i < 4096; ++i) a [i] = 1; } #pragma оmр section { for (i = 0; i < 4096; ++i) b [i] = 2; } } for (i = 0; i < 4096; i++) { if (a [i] != 1|| b [i]!= 2) { printf («Error\n»); break; } } if(i == 4096) printf («OK\n»);
Задание 5. Объяснить участок программы и результаты ее выполнения.
#pragma opm parallel for num_threads(4) for (int i = 0;i<a*a; i++) { int b = i + i; printf («thread # = %d\ti = %d\tb= %d\n», omp_get_thread_num (), i, b);