VirtualFluids
0.2.0
Parallel CFD LBM Solver
Loading...
Searching...
No Matches
CudaStreamManager.cpp
Go to the documentation of this file.
1
//=======================================================================================
2
// ____ ____ __ ______ __________ __ __ __ __
3
// \ \ | | | | | _ \ |___ ___| | | | | / \ | |
4
// \ \ | | | | | |_) | | | | | | | / \ | |
5
// \ \ | | | | | _ / | | | | | | / /\ \ | |
6
// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____
7
// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______|
8
// \ \ | | ________________________________________________________________
9
// \ \ | | | ______________________________________________________________|
10
// \ \| | | | __ __ __ __ ______ _______
11
// \ | | |_____ | | | | | | | | | _ \ / _____)
12
// \ | | _____| | | | | | | | | | | \ \ \_______
13
// \ | | | | |_____ | \_/ | | | | |_/ / _____ |
14
// \ _____| |__| |________| \_______/ |__| |______/ (_______/
15
//
16
// This file is part of VirtualFluids. VirtualFluids is free software: you can
17
// redistribute it and/or modify it under the terms of the GNU General Public
18
// License as published by the Free Software Foundation, either version 3 of
19
// the License, or (at your option) any later version.
20
//
21
// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
22
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
23
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
24
// for more details.
25
//
26
// SPDX-License-Identifier: GPL-3.0-or-later
27
// SPDX-FileCopyrightText: Copyright © VirtualFluids Project contributors, see AUTHORS.md in root folder
28
//
32
//=======================================================================================
33
#include "
CudaStreamManager.h
"
34
#include <helper_cuda.h>
35
#include <iostream>
36
37
namespace
vf::gpu
{
38
39
int
CudaStreamManager::registerAndLaunchStream
(
CudaStreamIndex
streamIndex)
40
{
41
if
(streamIndex ==
CudaStreamIndex::Legacy
)
return
0;
42
43
cudaStream_t
new_stream
=
nullptr
;
44
cudaStreamCreate
(&
new_stream
);
45
cudaStreams.emplace(streamIndex,
new_stream
);
46
return
int
(cudaStreams.count(streamIndex) - 1);
47
}
48
49
void
CudaStreamManager::terminateStreams
()
50
{
51
for
(
auto
&
stream
: cudaStreams)
52
cudaStreamDestroy
(
stream
.second);
53
}
54
55
cudaStream_t
&
CudaStreamManager::getStream
(
CudaStreamIndex
streamIndex,
uint
multiStreamIndex
)
56
{
57
if
(streamIndex ==
CudaStreamIndex::Legacy
)
return
legacyStream;
58
if
(
streamIsRegistered
(streamIndex))
59
{
60
auto
it
= cudaStreams.find(streamIndex);
61
for
(
uint
idx
=0;
idx
<
multiStreamIndex
;
idx
++)
it
++;
62
return
it
->second;
63
}
64
return
legacyStream;
65
}
66
67
bool
CudaStreamManager::streamIsRegistered
(
CudaStreamIndex
streamIndex)
68
{
69
return
cudaStreams.count(streamIndex) > 0;
70
}
71
72
void
CudaStreamManager::createCudaEvents
()
73
{
74
checkCudaErrors
(
cudaEventCreateWithFlags
(&startBulkKernel,
cudaEventDisableTiming
));
75
}
76
77
void
CudaStreamManager::destroyCudaEvents
()
78
{
79
checkCudaErrors
(
cudaEventDestroy
(startBulkKernel));
80
}
81
82
void
CudaStreamManager::triggerStartBulkKernel
(
CudaStreamIndex
streamIndex,
uint
multiStreamIndex
)
83
{
84
checkCudaErrors
(
cudaEventRecord
(startBulkKernel,
getStream
(streamIndex,
multiStreamIndex
)));
85
}
86
87
void
CudaStreamManager::waitOnStartBulkKernelEvent
(
CudaStreamIndex
streamIndex,
uint
multiStreamIndex
)
88
{
89
checkCudaErrors
(
cudaStreamWaitEvent
(
getStream
(streamIndex,
multiStreamIndex
), startBulkKernel));
90
}
91
92
}
93
CudaStreamManager.h
vf::gpu::CudaStreamManager::createCudaEvents
void createCudaEvents()
Definition
CudaStreamManager.cpp:72
vf::gpu::CudaStreamManager::terminateStreams
void terminateStreams()
Definition
CudaStreamManager.cpp:49
vf::gpu::CudaStreamManager::triggerStartBulkKernel
void triggerStartBulkKernel(CudaStreamIndex streamIndex, uint multiStreamIndex=0)
Definition
CudaStreamManager.cpp:82
vf::gpu::CudaStreamManager::destroyCudaEvents
void destroyCudaEvents()
Definition
CudaStreamManager.cpp:77
vf::gpu::CudaStreamManager::streamIsRegistered
bool streamIsRegistered(CudaStreamIndex streamIndex)
Definition
CudaStreamManager.cpp:67
vf::gpu::CudaStreamManager::getStream
cudaStream_t & getStream(CudaStreamIndex streamIndex, uint multiStreamIndex=0)
Definition
CudaStreamManager.cpp:55
vf::gpu::CudaStreamManager::waitOnStartBulkKernelEvent
void waitOnStartBulkKernelEvent(CudaStreamIndex streamIndex, uint multiStreamIndex=0)
Definition
CudaStreamManager.cpp:87
vf::gpu::CudaStreamManager::registerAndLaunchStream
int registerAndLaunchStream(CudaStreamIndex streamIndex)
Definition
CudaStreamManager.cpp:39
SPtr
std::shared_ptr< T > SPtr
Definition
PointerDefinitions.h:39
uint
unsigned int uint
Definition
DataTypes.h:47
vf::gpu
Definition
AdvectionDiffusion.h:43
vf::gpu::CudaStreamIndex
CudaStreamIndex
Definition
CudaStreamManager.h:44
vf::gpu::CudaStreamIndex::Legacy
@ Legacy
src
gpu
core
Cuda
CudaStreamManager.cpp
Generated on Thu Aug 13 2026 00:03:25 for VirtualFluids by
1.9.8