Главная /
Параллельное программирование с OpenMP /
Найдите ошибку в следующем фрагменте программы: int numt=0; #pragma omp parallel { #pragma omp critical { numt=omp_get_num_threads(); #pragma omp barrier #pragma omp flush (numt) } }
Найдите ошибку в следующем фрагменте программы:
int numt=0;
#pragma omp parallel
{
#pragma omp critical
{
numt=omp_get_num_threads();
#pragma omp barrier
#pragma omp flush (numt)
}
}
вопрос
Правильный ответ:
директива
barrier
не может быть использована внутри критической секции (конструкции critical
)
директива
flush
не может быть использована внутри критической секции (конструкции critical
)
в данном фрагменте программы ошибки нет
Сложность вопроса
86
Сложность курса: Параллельное программирование с OpenMP
28
Оценить вопрос
Комментарии:
Аноним
Большое спасибо за ответы по интуиту.
27 сен 2017
Аноним
Это очень простой решебник по интуиту.
24 дек 2016
Другие ответы на вопросы из темы программирование интуит.
- # Функция omp_get_num_threads возвращает:
- # При реализации компилятором редукционного оператора, описанного при помощи клаузы reduction (*: prod), где переменная prod имеет тип integer, для каждой нити создается локальная копия переменной prod, начальное значение которой будет инициализировано:
- # Найдите ошибку в следующем фрагменте программы: #pragma omp parallel default(shared) { int i, j; #pragma omp for for (i=0; i<n; i++) { #pragma omp parallel private (i,n) { #pragma omp for for (j=0; j<n; j++) work(i, j); } } }
- # Пусть следующая программа скомпилирована компилятором, поддерживающим вложенный параллелизм. #include <stdio.h> #include "omp.h" int counter; int main() { counter=0; omp_set_nested(1); #pragma omp parallel num_threads(2) { if (omp_get_thread_num() == 0) { #pragma omp parallel num_threads(2) { #pragma omp atomic counter++; } } } printf("Counter=%d\n",counter); } Определите значение переменной counter по завершении выполнения этой программы:
- # Выберите наиболее походящую оптимизацию, которая позволит сократить время выполнения следующего фрагмента программы: #include <omp.h> #include <stdio.h> #define N 100 int c[N]; int val = 0; int main (void) { omp_set_num_threads (8); #pragma omp parallel shared(val, c) { #pragma omp for for (int i=0; i<N; i++) { #pragma omp critical val ^= c[i]; } } printf (“Result=%d\n”, var); }