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



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

Пример 3.14. 
#include 
#include 
int main() 

 
int, i, n; 
 
 
#pragma omp parallel

n=omp_get_thread_num(); 
printf("Работает нить с номером %d\n", n); 
#pragma omp barrier; 
printf("Тест закончен\n"); 

return 0; 

 
В данном примере вывод номера каждой нити будет происходить в 
произвольном порядке, а вывод строки «Тест закончен» будет следовать 
строго после вывода номеров нитей. 
Директивы ordered определяют блок внутри тела цикла, который 
должен выполняться в том порядке, в котором итерации идут в 
последовательном цикле. 
#pragma omp ordered структурированный блок 
 
Блок операторов относится к самому внутреннему из объемлющих 
циклов, а в параллельном цикле должна быть задана опция ordered. Нить, 
выполняющая первую итерацию цикла, выполняет операции данного 
блока. Нить, выполняющая любую следующую итерацию, должна сначала 
дождаться 
выполнения 
всех 
операций 
блока 
всеми 
нитями, 


69 
выполняющими предыдущие итерации. Может использоваться, например, 
для упорядочения вывода от параллельных нитей. 
Пример 3.15. 
#include 
#include 
int main()
{
int i, A[10];
for (i=0;i<10;i++) 
{A[i]=i;} 
#pragma omp parallel private (i)shared (A) 
{
#pragma omp for ordered
for (i = 0; i < 10; i++)

#pragma omp ordered 

printf("Значение А[%d]=%d\n", i, A[i]);
}}}
return 0;} 
В данном примере в результате использования директивы ordered 
вывод элементов массива А происходит в порядке возрастания индексов 
элементов. 


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




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

    Басты бет