- •Оглавление
- •Директивы
- •Примеры
- •Примеры
- •Примеры
- •Примеры
- •Примеры
- •Пример
- •Примеры
- •Примеры
- •Примеры
- •Синхронизация
- •Синхронизация
- •Пример
- •Пример
- •Пример
- •Пример
- •Пример
- •Пример
- •Пирмер
- •Пример условной компиляции
- •Вопросы
- •Пример условной компиляции
- •Терминология
- •Терминология
- •Терминология
- •Терминология
- •Терминология
- •Терминология
- •Терминология
- •Терминология
- •Конец
Примеры
sum = 0;
for (i=0; i < 100; i++)
{
sum += array[i];
// этапеременнаядолжнабытьобщаядля получениякорректного результата,
// однако также должнабытьи индивидуальнойдляобеспечениядоступа несколькихпотоков.
} |
53 |
ОсновыOpenMP
Для разрешенияэтой ситуациивOpenMP предоставляетсявыражениеreduction, которое применяетсядляэффективного сочетанияматематического уменьшения однойилинесколькихпеременныхв цикле.
Вследующемциклеиспользуется выражениеreductionдляполучения правильныхрезультатов.
54
Примеры
sum = 0;
#pragma omp parallel for reduction(+:sum) for (i=0; i < 100; i++)
{
sum += array[i];
}
55
ОсновыOpenMP
Информацияопланированиицикла передаетсявOpenMPспомощью директивыparallel,имеющейследующий формат.
1 #pragma omp parallel for schedule(kind [, chunk size])
56
Четыре различных типа
планирования цикла в OpenMP,