Главная /
Параллельное программирование с 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 (iam ==0) { #pragma omp critical (update_a) #pragma omp critical (update_b) sum +=A[iam]; } else { #pragma omp critical (update_b) #pr
#define N 10
int A[N],B[N], sum;
#pragma omp parallel default(shared) num_threads(10)
{
int iam=omp_get_thread_num();
if (iam ==0) {
#pragma omp critical (update_a)
#pragma omp critical (update_b)
sum +=A[iam];
} else {
#pragma omp critical (update_b)
#pragma omp critical (update_a)
sum +=B[iam];
}
}
вопрос
Правильный ответ:
критические секции, определяемые директивой
critical
, не могут быть вложены друг в друга
дедлок - взаимная блокировка нитей, возникающая при входе
master
-нитью в критическую секцию с именем update_a
и любой другой нитью в секцию с именем update_b
(в этом случае вложенные критические секции не смогут быть обработаны)
в данном фрагменте программы ошибки нет
Сложность вопроса
75
Сложность курса: Параллельное программирование с OpenMP
28
Оценить вопрос
Комментарии:
Аноним
Это очень заурядный решебник intuit.
05 сен 2019
Аноним
Экзамен прошёл на 4.!!!
02 янв 2017
Другие ответы на вопросы из темы программирование интуит.
- # Клауза num_threads задает:
- # Пусть перед входом в параллельную область вызывается функция omp_set_num_threads. Пусть в директиве создания этой параллельной области указана клауза num_threads. Количество создаваемых нитей будет:
- # Найдите ошибку в следующем фрагменте программы: #pragma omp parallel default(shared) { int i, j; #pragma omp for for (i=0; i<n; i++) { #pragma omp parallel { #pragma omp for shared (i,n) for (j=0; j<n; j++) work(i, j); } } }
- # Определите способ распределения витков цикла между нитями для следующего фрагмента программы: #define N 100 #include "omp.h" void work(int i); int main () { #pragma omp parallel { omp_set_schedule (omp_sched_guided); #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; } } }