База ответов ИНТУИТ

Intel Parallel Programming Professional (Introduction)

<<- Назад к вопросам

В программе на OpenMP распараллелен следующий цикл
#pragma omp for(i = 0; i < 1000; i++) for (j = 0; j < 1000; j++)   с[i] += a[i][j] * b[j];
Является ли данная параллельная реализация корректной?

(Отметьте один правильный вариант ответа.)

Варианты ответа
нет, в программе будут гонки данных по счетчикам циклов i и j
да
нет, в программе будет гонка данных по массиву c
нет, счетчик цикла i должен быть локализован, например, с использованием параметра private(i). Счетчик j будет локализован автоматически
нет, счетчик цикла j должен быть локализован, например, с использованием параметра private(j). Счетчик i будет локализован автоматически(Верный ответ)
Похожие вопросы
В программе на OpenMP распараллелен следующий цикл
#pragma omp parallel for for (i = 0; i < 1000; i++) for (j = 0; j < 1000; j++)   с[i] += a[i][j] * b[j];
Является ли данная параллельная реализация корректной?
В программе на OpenMP распараллелен следующий цикл, где выполнение функции f() может занимать существенно разное время в зависимости от значения входного аргумента
#pragma omp for(i = 0; i < 1000; i++)   с += func(i);
Каким образом можно добиться наилучшей балансировки вычислительной нагрузки между потоками?
В программе на OpenMP имеется вычислительный блок, содержащий два вложенных цикла с независимыми итерациями. Требуется распараллелить его с помощью OpenMP. Количество итераций внешнего цикла 1000, внутреннего – 1000000. Какой цикл выгоднее распараллелить: внешний или внутренний?
Имеется следующий код на OpenMP
double a = 10.0;#pragma omp parallel private(a){ ...}
Можно ли средствами OpenMP сделать так, чтобы локальные копии переменной а в каждом потоке имели то же значение, что и исходная переменная a?
Пусть написана следующая параллельная программа:
int *a;#pragma omp parallel{ #pragma omp sections  {   #pragma omp section   {     a = new int [10];     delete [] a;   }   #pragma omp section   {     a = new int [10];     delete [] a;   } }}
Какие проблемы могут наблюдаться при выполнении параллельной программы?
Пусть написана следующая параллельная программа:
#pragma omp parallel{ int *a; #pragma omp sections  {   #pragma omp section   {     a = new int [10];     delete [] a;   }   #pragma omp section   {     a = new int [10];     delete [] a;   } }}
Какие проблемы могут наблюдаться при выполнении параллельной программы?
Пусть написана следующая параллельная программа:
#pragma omp parallel{sum = 0;#pragma omp for for(int i = 0; i < 100; i++)   sum++;}
Какие проблемы могут наблюдаться при выполнении параллельной программы?
Пусть написана следующая параллельная программа:
int *a;#pragma omp parallel{…#pragma omp critical= new int [10];…}
Какие проблемы могут наблюдаться при выполнении параллельной программы?
Пусть написана следующая параллельная программа:
int sum = 0;#pragma omp parallel for(int i = 0; i < 100; i++)   #pragma omp critical   sum++;
Какие проблемы могут наблюдаться при выполнении параллельной программы?
Пусть написана следующая параллельная программа:
int sum = 0;#pragma omp parallel for(int i = 0; i < 100; i++)   #pragma omp single   sum++;
Какие проблемы могут наблюдаться при выполнении параллельной программы?