Зависимости по данным
При распараллеливании программ, написанных с использованием OpenMP, надо стремиться к максимально большей независимости параллельных потоков друг от друга. При этом следует избегать ситуаций, когда одни параллельные потоки используют данные из других. Если таких ситуаций нет, то говорят, что параллельные потоки независимы по данным.
Таким образом, при разработке параллельных программ с применением OpenMP важно, анализируя параллельные алгоритмы, находить в них зависимости по данным и стараться устранять их по мере возможности. Часто зависимости по данным между петлями циклов могут быть исключены с помощью модификации алгоритмов. Ниже представлен пример цикла с зависимостью по данным между петлями цикла.
int c = 2;
for (i = 1; i<5; i++)
a[i] = a[i-1]*c;
Далее представлено элементарное распараллеливание этого цикла:
#pragma omp parallel sections
{
#pragma omp section
a[1] = c*a[0];
#pragma omp section
a[2] = c*c*a[0];
#pragma omp section
a[3] = c*c*c*a[0];
#pragma omp section
a[4] = c*c*c*c*a[0];
}
Задания
Для всех заданий:
· Входные данные (векторы, матрицы) представляются в виде файлов.
· Коэффициенты, граничные значения, дополнительные параметры задаются как аргументы в командной строке.
· Типы переменных (кроме счетчиков итераций), элементы массивов - float, double.
· Выходные данные (массивы, суммарные значения) сохраняются в файле/файлах.
· Для каждого из заданий необходимо определить время выполнения программы, обработки параллельного задания, на однопроцессорной, n-процессорной системах, по возможности, для массивов 100, 1000, 2000, 4000, 6000, 8000, 10000 элементов.
· В каждом задании проводить анализ ускорения параллельных вычислений, вычислений в целом.
· Определите ускорение обработки параллельного блока (отношение времени при последовательном выполнении к времени при параллельном).
0. Написать программу, использующую критические секции для организации условной обработки: подсчет кол-ва положительных, отрицательных и нулевых значений массива.Дата добавления: 2015-02-03; просмотров: 707;