Н., Пескова Е. Е., Шаманаев П. А. Основы параллельного программирования с использованием технологий mpi и openmp учебное пособие саранск издательство свмо 2013 2



Pdf көрінісі
бет32/53
Дата07.06.2023
өлшемі6.58 Mb.
#474796
1   ...   28   29   30   31   32   33   34   35   ...   53
ParProg MPI OpenMP

firstprivate(список)задает список переменных, для которых 
порождается локальная копия для каждой нити, значения этих 
переменных инициализируются их значениями в нити-мастере. 
copyin(список) – определяет список локальных переменных
которым присваиваются значения из одноименных общих переменных, 
заданных в глобальном потоке.


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() возвращает в вызвавшей нити разрешение 
таймера в секундах. Это время можно рассматривать как меру точности 
таймера. 


Достарыңызбен бөлісу:
1   ...   28   29   30   31   32   33   34   35   ...   53




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет