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

Intel Parallel Programming Professional (Introduction)

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

В программе на OpenMP распараллелен следующий цикл, где выполнение функции f() может занимать существенно разное время в зависимости от значения входного аргумента
#pragma omp for(i = 0; i < 1000; i++)   с += func(i);
Каким образом можно добиться наилучшей балансировки вычислительной нагрузки между потоками?

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

Варианты ответа
использовать статическое расписание вида #pragma omp for schedule(static, chunk). Значение chunk подобрать экспериментально
использовать динамическое расписание вида #pragma omp for schedule(dynamic, chunk). Значение chunk взять равным 10
средствами OpenMP балансировку улучшить невозможно
использовать статическое расписание вида #pragma omp for schedule(static, chunk). Значение chunk взять равным 10
использовать динамическое расписание вида #pragma omp for schedule(dynamic, chunk). Значение chunk подобрать экспериментально(Верный ответ)
Похожие вопросы
В программе на OpenMP распараллелен следующий цикл
#pragma omp for(i = 0; i < 1000; i++) for (j = 0; j < 1000; j++)   с[i] += a[i][j] * b[j];
Является ли данная параллельная реализация корректной?
В программе на OpenMP распараллелен следующий цикл
#pragma omp parallel for for (i = 0; i < 1000; i++) for (j = 0; j < 1000; j++)   с[i] += a[i][j] * b[j];
Является ли данная параллельная реализация корректной?
Какова цель балансировки нагрузки между потоками:
К чему приводит неравномерное распределение вычислительной нагрузки между потоками?
Признаками наличия неравномерной вычислительной нагрузки между потоками являются:
Имеется следующий код на OpenMP
double a = 10.0;#pragma omp parallel private(a){ ...}
Можно ли средствами OpenMP сделать так, чтобы локальные копии переменной а в каждом потоке имели то же значение, что и исходная переменная a?
В программе на OpenMP имеется вычислительный блок, содержащий два вложенных цикла с независимыми итерациями. Требуется распараллелить его с помощью OpenMP. Количество итераций внешнего цикла 1000, внутреннего – 1000000. Какой цикл выгоднее распараллелить: внешний или внутренний?
В OpenMP-программе имеется два распараллеленных цикла. Возможна ли ситуация, когда один поток закончит выполнение обоих циклов, в то время как другой поток все еще выполняет код первого цикла, при условии что все потоки запущены средствами OpenMP?
В OpenMP-программе имеются две параллельные области. Возможна ли ситуация, когда один поток закончит выполнение обеих параллельных областей, в то время как другой поток все еще выполняет код первой параллельной области, при условии что все потоки запущены средствами OpenMP?
Для распределения итераций цикла между потоками необходимо использовать следующую директиву OpenMP: