Главная /
Параллельное программирование с OpenMP /
Найдите ошибку в следующем фрагменте программы: 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); } }
Найдите ошибку в следующем фрагменте программы:
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);
}
}
вопрос
Правильный ответ:
в результате использования клаузы
default(shared)
, счетчики циклов - переменные i
и j
являются общими для всех нитей
граница вложенного цикла зависит от индексной переменной внешнего цикла (клауза
collapsе
может быть использована только распределения витков циклов с прямоугольным индексным пространством)
в данном фрагменте программы ошибки нет
Сложность вопроса
85
Сложность курса: Параллельное программирование с OpenMP
28
Оценить вопрос
Комментарии:
Аноним
Благодарю за гдз по интуиту.
22 ноя 2018
Аноним
Зачёт всё. Лечу пить отмечать победу над тестом интут
25 май 2016
Другие ответы на вопросы из темы программирование интуит.
- # Способ распределения витков цикла между нитями группы задается при помощи клаузы schedule(<алгоритм планирования>[,<число итераций>]). Найдите ошибку в следующем фрагменте программы: #pragma omp parallel default(shared) { int i; #pragma omp for schedule(static, omp_get_thread_num()) for (i=0; i<n; i++) { work(i); } }
- # Определите способ распределения витков цикла между нитями для следующего фрагмента программы: #define N 100 #include "omp.h" void work(int i); int main () { #pragma omp parallel { omp_set_schedule (omp_sched_static); #pragma omp for for (int i=0;i<N;i++) work (i); } }
- # Определите значение переменной team_size по завершении выполнения следующей программы: #include <stdio.h> #include "omp.h" int main() { int team_size; team_size=omp_get_team_size(omp_get_level ()); printf("Team Size=%d\n",team_size); }
- # Выберите наилучшую стратегию распределения витков цикла между нитями, которая для следующего фрагмента программы даст минимальное время выполнения: #include <omp.h> #include<stdio.h> #include<stdlib.h> #include <time.h> #define msec 1000 int main (void){ srand (time(NULL)); omp_set_num_threads (8); #pragma omp parallel { #pragma omp for schedule (runtime) for(int i=0; i<100;i++) { sleep (rand()*msec); } } }
- # Выберите наиболее походящую оптимизацию, которая позволит сократить время выполнения следующего фрагмента программы: #include <omp.h> #include <unistd.h> #define msec 1000 int main (void){ int i; omp_set_num_threads (8); #pragma omp parallel for for (i=0; i<80; i++) sleep (msec); #pragma omp parallel for for (i=0; i<80; i++) sleep (msec); }