Лекция: Устранение информационных зависимостей в циклах средствами OpenMP, директива reduction.

Информационные зависимости. Зависимости по данным (a=1;b=a). Зависимости по управлению (if(a){ x=c+d; y=1;}). Информационные зависимости в цикле:

for(j = 0; j < n; j ++) { a[j] = a[j – 1] + a[j – 2]; }

Опция reduction определяет что на выходе из параллельного блока переменная получит комбинированное значение. Пример:

#pragma omp for reduction(+: x)

Допустимы следующие операции: +, *, -, &, |, ^, &&, ||

Опция reduction определяет значение переменных, входящих в список ее аргументов, на главном потоке после завершения параллельного участка как результат выполнения редуктивной операции. На каждом из потоков, выполняющих параллельный участок, переменная инициализируется значением, соответствующим редуктивной операции .

Пусть параллельный участок выполнялся n потоками, и до него переменная имела значение v. Если в конце выполнения параллельного участка локальные копии переменной a имели значения v1, …, vn, то после параллельного участка переменная a на главном потоке получит значение, равное ( v x v1 x v2 x … x vn ). Инициализация для reduction:

Операция Значение

 

+ 0

* 1

— 0

& 0

| 0

^ 0

&& 1

|| 0

#pragma omp parallel for reduction(+:s)

for(i = 0; i < n; i ++){

s += g(a + i * h + 0.5 * h);

}

Итого: OpenMP – удобное средство разработки программ для общей памяти. Основные достоинства:

Высокая скорость разработки параллельных програм, Стандартизованный интерфейс, поддерживаемый ведущими разработчиками трансляторов.

Недостатки: Только для общей памяти (среда cluster OpenMP не получила распространения)

Отсутствует низкоуровневый контроль за создаваемыми потоками

еще рефераты
Еще работы по информатике