Главная /
Параллельное программирование с OpenMP /
Выберите наиболее походящую оптимизацию, которая позволит сократить время выполнения следующего фрагмента программы: #include <omp.h> #include <stdio.h> #define N 100 int c[N]; int val= 1; int main (void) { omp_set_num_threads (8); #pragma omp
Выберите наиболее походящую оптимизацию, которая позволит сократить время выполнения следующего фрагмента программы:
#include <omp.h>
#include <stdio.h>
#define N 100
int c[N];
int val= 1;
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 = val && (c[i]<100);
}
}
printf (“Result=%4.2f\n”, val);
}
вопрос
Правильный ответ:
вместо директивы
critical использовать механизм семафоров (omp_set_lock/omp_unset_lock)
заменить директиву
critical на директиву critical (<имя_критической_секции>)
добавить к директиве
for клаузу reduction(&&:val) и убрать директиву critical Сложность вопроса
75
Сложность курса: Параллельное программирование с OpenMP
28
Оценить вопрос
Комментарии:
Аноним
Благодарю за тесты по intiut'у.
09 окт 2018
Другие ответы на вопросы из темы программирование интуит.
- # Найдите ошибку в следующем фрагменте программы: #define N 10 int icount; #pragma omp threadprivate(icount) #pragma omp parallel { #pragma omp for for (icount=0; icount<N; icount++) { … } }
- # Найдите ошибку в следующем фрагменте программы: 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); } }
- # Пусть следующая программа скомпилирована компилятором, поддерживающим вложенный параллелизм. #include <stdio.h> #include "omp.h" int counter; int main() { counter=0; omp_set_nested(0); #pragma omp parallel num_threads(2) { #pragma omp parallel num_threads(2) { #pragma omp atomic counter++; } } printf("Counter=%d\n",counter); } Определите значение переменной counter по завершении выполнения этой программы:
- # Найдите ошибку в следующем фрагменте программы: #define N 1000 float a[N], b[N]; int main (void){ int i; #pragma omp parallel { #pragma omp for for (i=0; i<N-1; i++) { a[i] = b[i] + b[i+1]; } a[i]=b[i]; } }
- # При использовании гибридной модели параллельного программирования DVM/OpenMP: