51
reduction(оператор: список) – определяется оператор - операции (
+, -, *, / и т. п.)
или функции, для которых будут вычисляться
соответствующие
частичные
значения
в
параллельных
потоках
последующего
параллельного
структурного
блока;
кроме
того,
определяется список локальных переменных, в котором будут сохраняться
соответствующие
частичные
значения;
после
завершения
всех
параллельных процессов частичные значения складываются (вычитаются,
перемножаются и т. п.), и результат сохраняется в
одноименной общей
переменной [3,5].
Пример 3.2.
int main()
{
int n = 0;
#pragma omp parallel reduction (+: count)
{
n++;
printf("Текущее значение n: %d\n", count);
}
return 0;
}
В данном примере каждая нить инициализирует переменную n
значением 0. Затем все нити увеличивают это значение на 1. При выходе
из параллельной области значение n будет равно количеству порожденных
нитей.
В OpenMP предусмотрены функции
для работы с системным
таймером. Функция
omp_get_wtime() возвращает в вызвавшей нити
астрономическое время в секундах (вещественное число двойной
точности), прошедшее с некоторого момента в прошлом. Если некоторый
участок программы окружить
вызовами данной функции, то разность
возвращаемых значений покажет время работы данного участка.
Гарантируется, что момент времени, используемый в качестве точки
отсчета, не будет изменён за время существования процесса. Таймеры
разных нитей могут быть не синхронизированы и
выдавать различные
значения.
Функция
omp_get_wtick() возвращает в вызвавшей нити разрешение
таймера в секундах. Это время можно рассматривать как меру точности
таймера.
Достарыңызбен бөлісу: