Главная /
Параллельное программирование с OpenMP /
Найдите ошибку в следующем фрагменте программы: #define N 10 float c[N]; float sum = 0.0; #pragma omp parallel shared(sum, c) { #pragma omp for reduction (+: sum) nowait for (int i=0; i<N; i++) { sum += c[i]; } #pragma omp single printf ('Sum of array=
Найдите ошибку в следующем фрагменте программы:
#define N 10
float c[N];
float sum = 0.0;
#pragma omp parallel shared(sum, c)
{
#pragma omp for reduction (+: sum) nowait
for (int i=0; i<N; i++) {
sum += c[i];
}
#pragma omp single
printf (“Sum of array=%4.2f\n”, sum);
}
вопрос
Правильный ответ:
редукционная переменная sum объявлена общей(
shared
)
в директиве
for
нельзя одновременно указать клаузу reduction
и клаузу nowait
до использования значения редукционной переменной
sum
в операторе печати в блоке single
отсутствует барьерная синхронизация нитей
Сложность вопроса
85
Сложность курса: Параллельное программирование с OpenMP
28
Оценить вопрос
Комментарии:
Аноним
Кто ищет эти вопросы по интуит? Это же не сложно
09 дек 2020
Другие ответы на вопросы из темы программирование интуит.
- # PRAM модель консистентности памяти определяется следующим условием:
- # Найдите ошибку в следующем фрагменте программы: #pragma omp parallel default(shared) { int i, j; #pragma omp for for (i=0; i<n; i++) { #pragma omp for 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++) { for (j=0; j < i; j++) work(i, j); } }
- # Найдите ошибку в следующем фрагменте программы: #define N 10 int A[N],B[N], sum; #pragma omp parallel default(shared) num_threads(10) { int iam=omp_get_thread_num(); if (A[iam] > 0) { #pragma omp critical (update_a) sum +=A[iam]; } if (B[iam] > 0) { #pragma omp critical (update_b) sum +=B[iam]; } }
- # Переменные, которые разделяются нитями, и доступ к которым обрабатывается в технологии Intel Cluster OpenMP механизмом DSM, могут быть заданы при помощи: