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

Класс, обеспечивающий возможность выполнения вычислений на GPU по технологии Nvidia CUDA. More...

#include <Gpu2D.h>

Collaboration diagram for VM2D::Gpu:

Public Member Functions

 Gpu (const World2D &W_)
 Конструктор More...
 
 ~Gpu ()
 
void setAccelCoeff (double cft_)
 Установка коэффициента разгона потока More...
 
void setCollapseCoeff (double pos_, double refLength_)
 Установка правой границы самого правого профиля (для организации увеличения радиуса коллапса) More...
 
void setMaxGamma (double gam_)
 Установка максимально допустимой циркуляции вихря More...
 
void setSchemeSwitcher (int schemeSwitcher_)
 Установка переключателя расчетных схем More...
 

Private Attributes

const World2DW
 Константная ссылка на решаемую задачу More...
 

Detailed Description

Класс, обеспечивающий возможность выполнения вычислений на GPU по технологии Nvidia CUDA.

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

Definition at line 67 of file Gpu2D.h.

Constructor & Destructor Documentation

Gpu::Gpu ( const World2D W_)

Конструктор

Parameters
[in]W_константная ссылка на решаемую задачу

Definition at line 57 of file Gpu2D.cpp.

58  : W(W_)
59 {
60 #if defined(__CUDACC__) || defined(USE_CUDA)
61 
62 
63 // Откомментировать следующую строку, если запускается счет на кластере, каждый узел которого
64 // имеет несколько видеокарт, при этом хочется одновременно решать несколько задач --- каждую на своей видеокарте ---
65 // каждая задача по своему номеру, деленному по модулю числа видеокарт на узле будет привязана к своей видеокарте;
66 // на каждый узел при этом отправлять СТОЛЬКО MPI-нитей, СКОЛЬКО ТАМ ВИДЕОКАРТ;
67 // число задач НАСТОЯТЕЛЬНО РЕКОМЕНДУЕТСЯ ВЫБИРАТЬ ТОЧНО РАВНЫМ СУММАРНОМУ ЧИСЛУ ВИДЕОКАРТ,
68 // т.е. чтобы все задачи стартовали сразу же.
69 //
70 // Uncomment the following string if the program runs on the computer cluster with several graphic cards on every node
71 // and you want to solve several tasks simultaneously --- EVERY TASK ON ITS OWN GRAPHIC CARD;
72 // every task will be associated with separate graphic card;
73 // send THE SAME AMOUNT OF MPI-THREADS for the node as THE NUMBER OF GRAPHIC CARDS on this node;
74 // IT IS STRONGLY RECOMMENDED TO CHOOSE THE NUMBER OF TASKS EXACTLY EQUAL TO TOTAL VIDEO CARDs NUMBERS,
75 // i.e. to start all the tasks simultaneously.
76 
77 //cuDevice(W.getPassport().problemNumber % 4); //The index of the used video card will be equal to the task number
78  // in the task list (to modulo 4 --- number of graphic cards on each node)
79 
80 
81  cuSetConstants(sizeof(Vortex2D)/sizeof(double), Vortex2D::offsPos / sizeof(double), Vortex2D::offsGam / sizeof(double) );
82 
83  n_CUDA_wake = 0;
84  n_CUDA_bodies = 0;
85  n_CUDA_source = 0;
86  n_CUDA_afls = 0;
87 
88  n_CUDA_velVP = 0;
89 #endif
90 }
const World2D & W
Константная ссылка на решаемую задачу
Definition: Gpu2D.h:71
Класс, опеделяющий двумерный вихревой элемент
Definition: Vortex2D.h:51
Gpu::~Gpu ( )

Definition at line 93 of file Gpu2D.cpp.

94 {
95 #if defined(__CUDACC__) || defined(USE_CUDA)
96  ReleaseDevMem(W.getWake().devVtxPtr, 1);
97  ReleaseDevMem(W.getWake().devVelPtr, 2);
98  ReleaseDevMem(W.getWake().devRadPtr, 3);
99  ReleaseDevMem(W.getWake().devI0Ptr, 4);
100  ReleaseDevMem(W.getWake().devI1Ptr, 5);
101  ReleaseDevMem(W.getWake().devI2Ptr, 6);
102  ReleaseDevMem(W.getWake().devI3Ptr, 7);
103 
104  ReleaseDevMem(W.getWake().devMeshPtr, 8);
105  ReleaseDevMem(W.getWake().devNeiPtr, 9);
106 
107  if (W.getSource().vtx.size() > 0)
108  ReleaseDevMem(W.getSource().devVtxPtr, 10);
109 
110  for (size_t s = 0; s < 1/*n_CUDA_afls*/; ++s)
111  {
112  ReleaseDevMem(W.getBoundary(s).virtualWake.devVtxPtr, 11);
113  ReleaseDevMem(W.getBoundary(s).virtualWake.devVelPtr, 12);
114  ReleaseDevMem(W.getBoundary(s).virtualWake.devRadPtr, 13);
115  ReleaseDevMem(W.getBoundary(s).virtualWake.devI0Ptr, 14);
116  ReleaseDevMem(W.getBoundary(s).virtualWake.devI1Ptr, 15);
117  ReleaseDevMem(W.getBoundary(s).virtualWake.devI2Ptr, 16);
118  ReleaseDevMem(W.getBoundary(s).virtualWake.devI3Ptr, 17);
119 
120  ReleaseDevMem(W.getBoundary(s).afl.devRPtr, 18);
121  ReleaseDevMem(W.getBoundary(s).afl.devRhsPtr, 19);
122  ReleaseDevMem(W.getBoundary(s).afl.devRhsLinPtr, 191);
123 
124  ReleaseDevMem(W.getBoundary(s).afl.devFreeVortexSheetPtr, 20);
125  ReleaseDevMem(W.getBoundary(s).afl.devAttachedVortexSheetPtr, 21);
126  ReleaseDevMem(W.getBoundary(s).afl.devAttachedSourceSheetPtr, 22);
127 
128  ReleaseDevMem(W.getBoundary(s).afl.devMeanEpsOverPanelPtr, 23);
129  ReleaseDevMem(W.getBoundary(s).afl.devViscousStressesPtr, 24);
130  }
131 
132  if (n_CUDA_afls)
133  {
134  ReleaseDevMem(dev_ptr_nPanels, 25);
135  ReleaseDevMem(dev_ptr_nVortices, 26);
136 
137  ReleaseDevMem(dev_ptr_ptr_vtx, 27);
138  ReleaseDevMem(dev_ptr_ptr_vel, 28);
139  ReleaseDevMem(dev_ptr_ptr_rad, 29);
140  ReleaseDevMem(dev_ptr_ptr_i0, 30);
141  ReleaseDevMem(dev_ptr_ptr_i1, 31);
142  ReleaseDevMem(dev_ptr_ptr_i2, 32);
143  ReleaseDevMem(dev_ptr_ptr_i3, 33);
144 
145  ReleaseDevMem(dev_ptr_ptr_r, 34);
146  ReleaseDevMem(dev_ptr_ptr_rhs, 35);
147 
148  ReleaseDevMem(dev_ptr_ptr_freeVortexSheet, 36);
149  ReleaseDevMem(dev_ptr_ptr_attachedVortexSheet, 37);
150  ReleaseDevMem(dev_ptr_ptr_attachedSourceSheet, 38);
151 
152  ReleaseDevMem(dev_ptr_ptr_meanEpsOverPanel, 39);
153 
154  ReleaseDevMem(dev_ptr_ptr_viscousStresses, 40);
155  }
156 
157  if (W.getMeasureVP().getWakeVP().vtx.size())
158  {
159  ReleaseDevMem(W.getMeasureVP().getWakeVP().devVtxPtr, 41);
160  ReleaseDevMem(W.getMeasureVP().getWakeVP().devVelPtr, 42);
161  ReleaseDevMem(W.getMeasureVP().getWakeVP().devRadPtr, 43);
162  }
163 #endif
164 }
const Wake & getWake() const
Возврат константной ссылки на вихревой след
Definition: World2D.h:197
const WakeDataBase & getSource() const
Возврат константной ссылки на источники в области течения
Definition: World2D.h:207
const Boundary & getBoundary(size_t i) const
Возврат константной ссылки на объект граничного условия
Definition: World2D.h:153
const MeasureVP & getMeasureVP() const
Возврат константной ссылки на measureVP.
Definition: World2D.h:175
std::vector< Vortex2D > vtx
Список вихревых элементов
const World2D & W
Константная ссылка на решаемую задачу
Definition: Gpu2D.h:71
VirtualWake virtualWake
Виртуальный вихревой след конкретного профиля
Definition: Boundary2D.h:85
const WakeDataBase & getWakeVP() const
Возврат wakeVP.
Definition: MeasureVP2D.h:120
const Airfoil & afl
Definition: Boundary2D.h:76

Here is the call graph for this function:

Member Function Documentation

void VM2D::Gpu::setAccelCoeff ( double  cft_)
inline

Установка коэффициента разгона потока

Parameters
[in]cft_множитель, соответствующий степени разгона потока

Definition at line 241 of file Gpu2D.h.

242  {
243 #if defined(__CUDACC__) || defined(USE_CUDA)
244  cuSetAccelCoeff(cft_);
245 #endif
246  }

Here is the caller graph for this function:

void VM2D::Gpu::setCollapseCoeff ( double  pos_,
double  refLength_ 
)
inline

Установка правой границы самого правого профиля (для организации увеличения радиуса коллапса)

Parameters
[in]pos_абсцисса правой границы самого правого профиля
[in]refLength_характерная длина, на которой происходит увеличение радиуса коллапса

Definition at line 253 of file Gpu2D.h.

254  {
255 #if defined(__CUDACC__) || defined(USE_CUDA)
256  cuSetCollapseCoeff(pos_, refLength_);
257 #endif
258  }

Here is the caller graph for this function:

void VM2D::Gpu::setMaxGamma ( double  gam_)
inline

Установка максимально допустимой циркуляции вихря

Parameters
[in]gam_максимально допустимая циркуляция вихря

Definition at line 264 of file Gpu2D.h.

265  {
266 #if defined(__CUDACC__) || defined(USE_CUDA)
267  cuSetMaxGamma(gam_);
268 #endif
269  }

Here is the caller graph for this function:

void VM2D::Gpu::setSchemeSwitcher ( int  schemeSwitcher_)
inline

Установка переключателя расчетных схем

Parameters
[in]schemeSwitcher_тип схемы
  • schemeSwitcher = 1 – кусочно-постоянная схема
  • schemeSwitcher = 2 – кусочно-линейная схема
  • schemeSwitcher = 11 – схема типа МДВ

Definition at line 278 of file Gpu2D.h.

279  {
280 #if defined(__CUDACC__) || defined(USE_CUDA)
281  cuSetSchemeSwitcher(schemeSwitcher_, 1);
282 #endif
283  }

Here is the caller graph for this function:

Member Data Documentation

const World2D& VM2D::Gpu::W
private

Константная ссылка на решаемую задачу

Definition at line 71 of file Gpu2D.h.


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