VM2D  1.12
Vortex methods for 2D flows simulation
VMlib::Parallel Class Reference

Класс, опеделяющий параметры исполнения задачи в параллельном MPI-режиме More...

#include <Parallel.h>

Public Member Functions

parProp SplitMPIone (size_t n, bool bcastAll=false) const
 Распределение задач по процессорам More...
 
parProp SplitMPI (size_t n, bool bcastAll=false) const
 Распределение задач по процессорам More...
 

Public Attributes

int commWork
 Коммуникатор для решения конкретной задачи More...
 
int myidWork
 Локальный номер процессора, решающего конкретную задачу More...
 
int nProcWork
 Число процессоров, решающих конкретную задачу More...
 

Detailed Description

Класс, опеделяющий параметры исполнения задачи в параллельном MPI-режиме

Author
Марчевский Илья Константинович
Сокол Ксения Сергеевна
Рятина Евгения Павловна
Колганова Александра Олеговна 1.12
Date
14 января 2024 г.

Definition at line 83 of file Parallel.h.

Member Function Documentation

parProp Parallel::SplitMPI ( size_t  n,
bool  bcastAll = false 
) const

Распределение задач по процессорам

Parameters
[in]nчисло распределяемых витков цикла
[in]bcastAllпризнак рассылки всей информации всем процессорам (по умолчанию false)
Returns
структуру типа parProp, заполненную для текущего процессора

Definition at line 94 of file Parallel.cpp.

95 {
96  parProp par;
97 
98  par.totalLen = static_cast<int>(n);
99 
100 #ifdef USE_MPI
101  MPI_Bcast(&par.totalLen, 1, MPI_INT, 0, commWork);
102 #endif
103 
104  if (myidWork == 0)
105  {
106  par.len.clear();
107  par.disp.clear();
108 
109  int nPerP = static_cast<int>(n / nProcWork);
110 
111  for (int s = 0; s < nProcWork - 1; ++s)
112  {
113  par.len.push_back(nPerP);
114  par.disp.push_back(s*nPerP);
115  }
116 
117  par.len.push_back(static_cast<int>(n) - nPerP * (nProcWork - 1));
118  par.disp.push_back(nPerP * (nProcWork - 1));
119  }
120 
121 #ifdef USE_MPI
122  MPI_Scatter(par.len.data(), 1, MPI_INT, &par.myLen, 1, MPI_INT, 0, commWork);
123  MPI_Scatter(par.disp.data(), 1, MPI_INT, &par.myDisp, 1, MPI_INT, 0, commWork);
124 #else
125  par.myLen = par.len[0];
126  par.myDisp = par.disp[0];
127 #endif
128 
129 #ifdef USE_MPI
130  if (bcastAll)
131  {
132  if (myidWork != 0)
133  {
134  par.len.resize(nProcWork);
135  par.disp.resize(nProcWork);
136  }
137  MPI_Bcast(par.len.data(), nProcWork, MPI_INT, 0, commWork);
138  MPI_Bcast(par.disp.data(), nProcWork, MPI_INT, 0, commWork);
139  }
140 #endif
141 
142  return par;
143 
144 }//SplitMPI(...)
int totalLen
Общее число витков, разделенное между всеми процессорами
Definition: Parallel.h:69
int myDisp
Индекс первого витка из числа витков, предназначенных текущему процессору
Definition: Parallel.h:66
int myidWork
Локальный номер процессора, решающего конкретную задачу
Definition: Parallel.h:94
std::vector< int > len
Список из чисел витков циклов, предназначенных для каждого процессора
Definition: Parallel.h:57
int commWork
Коммуникатор для решения конкретной задачи
Definition: Parallel.h:90
int myLen
Число витков, предназначенное текущему процессору
Definition: Parallel.h:63
std::vector< int > disp
Список, определяющий номер витка цикла, с которого должен начинать работу данный процессор ...
Definition: Parallel.h:60
Стрктура, содержащая параметры исполнения задачи в параллельном MPI-режиме
Definition: Parallel.h:54
int nProcWork
Число процессоров, решающих конкретную задачу
Definition: Parallel.h:97
parProp Parallel::SplitMPIone ( size_t  n,
bool  bcastAll = false 
) const

Распределение задач по процессорам

Parameters
[in]nчисло распределяемых витков цикла
[in]bcastAllпризнак рассылки всей информации всем процессорам (по умолчанию false)
Returns
структуру типа parProp, заполненную для текущего процессора

Definition at line 42 of file Parallel.cpp.

43 {
44  parProp par;
45 
46  par.totalLen = static_cast<int>(n);
47 
48 #ifdef USE_MPI
49  MPI_Bcast(&par.totalLen, 1, MPI_INT, 0, commWork);
50 #endif
51 
52  if (myidWork == 0)
53  {
54  par.len.clear();
55  par.disp.clear();
56 
57  par.len.push_back(static_cast<int>(n));
58  par.disp.push_back(0);
59 
60  for (int s = 1; s < nProcWork; ++s)
61  {
62  par.len.push_back(0);
63  par.disp.push_back(static_cast<int>(n-1));
64  }
65  }
66 
67 #ifdef USE_MPI
68  MPI_Scatter(par.len.data(), 1, MPI_INT, &par.myLen, 1, MPI_INT, 0, commWork);
69  MPI_Scatter(par.disp.data(), 1, MPI_INT, &par.myDisp, 1, MPI_INT, 0, commWork);
70 #else
71  par.myLen = par.len[0];
72  par.myDisp = par.disp[0];
73 #endif
74 
75 #ifdef USE_MPI
76  if (bcastAll)
77  {
78  if (myidWork != 0)
79  {
80  par.len.resize(nProcWork);
81  par.disp.resize(nProcWork);
82  }
83  MPI_Bcast(par.len.data(), nProcWork, MPI_INT, 0, commWork);
84  MPI_Bcast(par.disp.data(), nProcWork, MPI_INT, 0, commWork);
85  }
86 #endif
87 
88  return par;
89 
90 }//SplitMPIone(...)
int totalLen
Общее число витков, разделенное между всеми процессорами
Definition: Parallel.h:69
int myDisp
Индекс первого витка из числа витков, предназначенных текущему процессору
Definition: Parallel.h:66
int myidWork
Локальный номер процессора, решающего конкретную задачу
Definition: Parallel.h:94
std::vector< int > len
Список из чисел витков циклов, предназначенных для каждого процессора
Definition: Parallel.h:57
int commWork
Коммуникатор для решения конкретной задачи
Definition: Parallel.h:90
int myLen
Число витков, предназначенное текущему процессору
Definition: Parallel.h:63
std::vector< int > disp
Список, определяющий номер витка цикла, с которого должен начинать работу данный процессор ...
Definition: Parallel.h:60
Стрктура, содержащая параметры исполнения задачи в параллельном MPI-режиме
Definition: Parallel.h:54
int nProcWork
Число процессоров, решающих конкретную задачу
Definition: Parallel.h:97

Member Data Documentation

int VMlib::Parallel::commWork

Коммуникатор для решения конкретной задачи

Definition at line 90 of file Parallel.h.

int VMlib::Parallel::myidWork

Локальный номер процессора, решающего конкретную задачу

Definition at line 94 of file Parallel.h.

int VMlib::Parallel::nProcWork

Число процессоров, решающих конкретную задачу

Definition at line 97 of file Parallel.h.


The documentation for this class was generated from the following files: