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



Pdf көрінісі
бет37/53
Дата07.06.2023
өлшемі6.58 Mb.
#474796
1   ...   33   34   35   36   37   38   39   40   ...   53
ParProg MPI OpenMP

Пример 3.7. 
#include 
#include  
int main()
{
#pragma omp parallel
{
printf("Сообщение 1\n");
#pragma omp single nowait
{
printf("Одна нить\n");


57 
}
printf("Сообщение 2\n");
}
return 0; 

 
Данный пример иллюстрирует применение директивы single
вместе с опцией nowait. Сначала все нити напечатают текст "Сообщение 
1", при этом одна нить (не обязательно нить-мастер) дополнительно
напечатает текст "Одна нить". Остальные нити, не дожидаясь завершения 
выполнения области single, напечатают текст "Сообщение 2". Таким
образом, первое появление "Сообщение 2" в выводе может встретиться 
как до текста "Одна нить", так и после него. Если убрать опцию nowait, то 
по окончании области single произойдёт барьерная синхронизация, и ни 
одна выдача "Сообщение 2" не может появиться до выдачи "Одна нить". 
Директива master  выделяет участок кода, который будет выполнен 
только нитью-мастером. Остальные нити просто пропускают данный 
участок и продолжают работу с оператора, расположенного следом за 
ним. Неявной синхронизации данная директива не предполагает. 
#pragma omp master 
 
Пример 3.8. 
#include 
#include  
int main()
{
int n;
#pragma omp parallel private(n)
{
n=1;
#pragma omp master
{
n=omp_get_thread_num();
}
printf("Значение n: %d\n", n);

}
return 0; 



58 
Пример показывает, что все потоки параллельной области выведут 
на экран 1, а главный поток выведет на экран свой номер, то есть 0.


Достарыңызбен бөлісу:
1   ...   33   34   35   36   37   38   39   40   ...   53




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

    Басты бет