Главная /
Параллельное программирование с OpenMP /
Найдите ошибку в следующем фрагменте программы: #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) {
Найдите ошибку в следующем фрагменте программы:
#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];
}
}
вопрос
Правильный ответ:
чтение общих переменных
А[iam]
и B[iam]
в операторах вида A[iam]>0
и B[iam]>0
выполняется без какой-либо синхронизации
изменение общей переменной sum внутри критических секций
update_a
и update_b
может выполняться одновременно несколькими нитями, поскольку названия критических секций отличаются
в данном фрагменте программы ошибки нет
Сложность вопроса
93
Сложность курса: Параллельное программирование с OpenMP
28
Оценить вопрос
Комментарии:
Аноним
Я провалил зачёт, за что я не углядел этот крутой сайт с решениями с тестами intuit в начале сессии
21 дек 2019
Аноним
Я провалил зачёт, почему я не углядел этот крутой сайт с ответами по тестам интуит в начале сессии
08 авг 2018
Другие ответы на вопросы из темы программирование интуит.
- # Причинная модель консистентности памяти определяется следующим условием:
- # Найдите ошибку в следующем фрагменте программы: #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; } }
- # Определите способ распределения витков цикла между нитями для следующего фрагмента программы: #define N 100 #include "omp.h" void work(int i); int main () { #pragma omp parallel { omp_set_schedule (omp_sched_dynamic); #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 single a = 0; #pragma omp for for (i = 0; i < 10; i++) { a += i; } } }
- # Реализация технологии Intel Cluster OpenMP стала возможной, поскольку в OpenMP используется: