Главная /
Параллельное программирование с OpenMP /
Найдите ошибку в следующем фрагменте программы: int i, j; #pragma omp parallel default(shared) { #pragma omp for collapse (2) for (i=0; i<n; i++) { work_with_i (i); for (j=0; j < n; j++) work(i, j); } }
Найдите ошибку в следующем фрагменте программы:
int i, j;
#pragma omp parallel default(shared)
{
#pragma omp for collapse (2)
for (i=0; i<n; i++) {
work_with_i (i);
for (j=0; j < n; j++)
work(i, j);
}
}
вопрос
Правильный ответ:
в результате использования клаузы
default(shared)
, счетчики циклов - переменные i
и j
являются общими для всех нитей
между заголовками циклов указан вызов процедуры
work_with_i
(клауза collapsе
может быть использована только распределения витков тесно-вложенных циклов)
в данном фрагменте программы ошибки нет
Сложность вопроса
86
Сложность курса: Параллельное программирование с OpenMP
28
Оценить вопрос
Комментарии:
Аноним
Кто гуглит вот эти ответы с интуитом? Это же очень просты вопросы
27 фев 2020
Аноним
Я помощник профессора! Тотчас уничтожьте сайт с ответами на интуит. Умоляю
04 июн 2018
Другие ответы на вопросы из темы программирование интуит.
- # Пусть W(x)a – операция записи в переменную x значения a. Пусть R(x)a – операция чтения переменной x, где a – прочитанное значение переменной x. Пусть S - операция синхронизации. Следующая последовательность событий: P1: W(x)aW(x)bSP2:R(x)aR(x)bSP3:R(x)bR(x)aS
- # Способ распределения витков цикла между нитями группы задается при помощи клаузы schedule(<алгоритм планирования>[,<число итераций>]). Найдите ошибку в следующем фрагменте программы: #pragma omp parallel default(shared) { int i; #pragma omp for schedule(dynamic, omp_get_thread_num()) for (i=0; i<n; i++) { work(i); } }
- # Найдите ошибку в следующем фрагменте программы: #define N 10 int A[N],B[N],tmp; #pragma omp parallel default(shared) num_threads(10) { int iam=omp_get_thread_num(); tmp=A[iam]; B[iam]=tmp; }
- # Определите количество нитей, между которыми будет распределена работа в параллельной области: #define N 100 #include "omp.h" void work(int i); int main () { omp_set_num_threads(2); #pragma omp parallel num_threads(4) { #pragma omp for for (int i=0;i<N;i++) work (i); } }
- # Найдите ошибку в следующем фрагменте программы: int main (void){ int a, i; #pragma omp parallel shared(a) private(i) { #pragma omp master a = 0; #pragma omp for reduction(+:a) for (i = 0; i < 10; i++) { a += i; } } }