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



Pdf көрінісі
бет44/53
Дата07.06.2023
өлшемі6.58 Mb.
#474796
1   ...   40   41   42   43   44   45   46   47   ...   53
ParProg MPI OpenMP

reduction(оператор: список) – определяется оператор - операции ( 
+, -, *, / и т. п.) или функции, для которых будут вычисляться 
соответствующие 
частичные 
значения 
в 
параллельных 
потоках 
последующего 
параллельного 
структурного 
блока; 
кроме 
того, 
определяется список локальных переменных, в котором будут сохраняться 
соответствующие 
частичные 
значения; 
после 
завершения 
всех 
параллельных процессов частичные значения складываются (вычитаются, 
перемножаются и т. п.), и результат сохраняется в одноименной общей 
переменной. 
nowait – в конце блока секций происходит неявная барьерная 
синхронизация 
параллельно 
работающих 
нитей: 
их 
дальнейшее 
выполнение происходит только тогда, когда все они достигнут данной 
точки; если в подобной задержке нет необходимости, опция nowait 
позволяет нитям, уже дошедшим до конца своих секций, продолжить 
выполнение без синхронизации с остальными. 
Перед первым участком кода в блоке sections директива section не 
обязательна. Какие именно будут задействованы нити для выполнения 
секции, не специфицируется. Если количество нитей больше количества 
секций, то некоторые нити не будут задействованы. Если же количество 
секций больше количества нитей, то некоторые нити выполнят больше 
одной секции [3,9]. 
Пример 3.12. 
#include  
#include  
int main() 
{
int n = 0; 
#pragma omp parallel
{
#pragma omp sections lastprivate(n)
{
#pragma omp section
{
n = 1;
}
#pragma omp section
{
n = 2;
}
#pragma omp section


65 
{
n = 3;
}
}
printf("Значение n на нити %d: %d\n", omp_get_thread_num(), n);
}
printf("Значение n в последовательной области: %d\n", n);
return 0; 

В данном примере опция lastprivate используется вместе с 
директивой sections. Переменная n объявлена как lastprivate переменная. 
Три нити, выполняющие секции section, присваивают своей локальной 
копии n разные значения. По выходе из области sections значение n из 
последней секции присваивается локальным копиям во всех нитях, 
поэтому все нити напечатают число 3. Это же значение сохранится для 
переменной n и в последовательной области.


Достарыңызбен бөлісу:
1   ...   40   41   42   43   44   45   46   47   ...   53




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

    Басты бет