QMCPACK
Queue< PlatformKind::CUDA > Class Template Reference
+ Collaboration diagram for Queue< PlatformKind::CUDA >:

Public Member Functions

 Queue ()
 
 ~Queue ()
 
template<class DSC >
void enqueueH2D (DSC &dataset, typename DSC::size_type size=0, typename DSC::size_type offset=0)
 
template<class DSC >
void enqueueD2H (DSC &dataset, typename DSC::size_type size=0, typename DSC::size_type offset=0)
 
void sync ()
 
cudaStream_t getNative ()
 

Private Attributes

cudaStream_t hstream_
 

Detailed Description

template<>
class qmcplusplus::compute::Queue< PlatformKind::CUDA >

Definition at line 25 of file QueueCUDA.hpp.

Constructor & Destructor Documentation

◆ Queue()

Queue ( )
inline

Definition at line 28 of file QueueCUDA.hpp.

References qmcplusplus::cudaErrorCheck(), and cudaStreamCreate.

28 { cudaErrorCheck(cudaStreamCreate(&hstream_), "cudaStreamCreate failed!"); }
#define cudaStreamCreate
Definition: cuda2hip.h:150
cudaErrorCheck(cudaMemcpyAsync(dev_lu.data(), lu.data(), sizeof(decltype(lu)::value_type) *lu.size(), cudaMemcpyHostToDevice, hstream), "cudaMemcpyAsync failed copying log_values to device")

◆ ~Queue()

~Queue ( )
inline

Definition at line 30 of file QueueCUDA.hpp.

References qmcplusplus::cudaErrorCheck(), and cudaStreamDestroy.

30 { cudaErrorCheck(cudaStreamDestroy(hstream_), "cudaStreamDestroy failed!"); }
#define cudaStreamDestroy
Definition: cuda2hip.h:151
cudaErrorCheck(cudaMemcpyAsync(dev_lu.data(), lu.data(), sizeof(decltype(lu)::value_type) *lu.size(), cudaMemcpyHostToDevice, hstream), "cudaMemcpyAsync failed copying log_values to device")

Member Function Documentation

◆ enqueueD2H()

void enqueueD2H ( DSC &  dataset,
typename DSC::size_type  size = 0,
typename DSC::size_type  offset = 0 
)
inline

Definition at line 53 of file QueueCUDA.hpp.

References qmcplusplus::cudaErrorCheck(), cudaMemcpyAsync, and cudaMemcpyDeviceToHost.

54  {
55  if (dataset.data() == dataset.device_data()) return;
56 
57  if (size == 0)
58  {
59  cudaErrorCheck(cudaMemcpyAsync(dataset.data() + offset, dataset.device_data() + offset,
60  dataset.size() * sizeof(typename DSC::value_type), cudaMemcpyDeviceToHost, hstream_),
61  "Queue<PlatformKind::CUDA>::enqueueD2H cudaMemcpyAsync failed!");
62  }
63  else
64  {
65  cudaErrorCheck(cudaMemcpyAsync(dataset.data() + offset, dataset.device_data() + offset,
66  size * sizeof(typename DSC::value_type), cudaMemcpyDeviceToHost, hstream_),
67  "Queue<PlatformKind::CUDA>::enqueueD2H cudaMemcpyAsync failed!");
68  }
69  }
cudaErrorCheck(cudaMemcpyAsync(dev_lu.data(), lu.data(), sizeof(decltype(lu)::value_type) *lu.size(), cudaMemcpyHostToDevice, hstream), "cudaMemcpyAsync failed copying log_values to device")
#define cudaMemcpyDeviceToHost
Definition: cuda2hip.h:138
QMCTraits::FullPrecRealType value_type
#define cudaMemcpyAsync
Definition: cuda2hip.h:136

◆ enqueueH2D()

void enqueueH2D ( DSC &  dataset,
typename DSC::size_type  size = 0,
typename DSC::size_type  offset = 0 
)
inline

Definition at line 34 of file QueueCUDA.hpp.

References qmcplusplus::cudaErrorCheck(), cudaMemcpyAsync, and cudaMemcpyHostToDevice.

35  {
36  if (dataset.data() == dataset.device_data()) return;
37 
38  if (size == 0)
39  {
40  cudaErrorCheck(cudaMemcpyAsync(dataset.device_data() + offset, dataset.data() + offset,
41  dataset.size() * sizeof(typename DSC::value_type), cudaMemcpyHostToDevice, hstream_),
42  "Queue<PlatformKind::CUDA>::enqueueH2D cudaMemcpyAsync failed!");
43  }
44  else
45  {
46  cudaErrorCheck(cudaMemcpyAsync(dataset.device_data() + offset, dataset.data() + offset,
47  size * sizeof(typename DSC::value_type), cudaMemcpyHostToDevice, hstream_),
48  "Queue<PlatformKind::CUDA>::enqueueH2D cudaMemcpyAsync failed!");
49  }
50  }
cudaErrorCheck(cudaMemcpyAsync(dev_lu.data(), lu.data(), sizeof(decltype(lu)::value_type) *lu.size(), cudaMemcpyHostToDevice, hstream), "cudaMemcpyAsync failed copying log_values to device")
#define cudaMemcpyHostToDevice
Definition: cuda2hip.h:139
QMCTraits::FullPrecRealType value_type
#define cudaMemcpyAsync
Definition: cuda2hip.h:136

◆ getNative()

◆ sync()

void sync ( )
inline

Definition at line 71 of file QueueCUDA.hpp.

References qmcplusplus::cudaErrorCheck(), and cudaStreamSynchronize.

Referenced by DelayedUpdateCUDA< T, T_FP >::getInvRow(), DelayedUpdateCUDA< T, T_FP >::initializeInv(), and DelayedUpdateCUDA< T, T_FP >::updateInvMat().

71 { cudaErrorCheck(cudaStreamSynchronize(hstream_), "cudaStreamSynchronize failed!"); }
cudaErrorCheck(cudaMemcpyAsync(dev_lu.data(), lu.data(), sizeof(decltype(lu)::value_type) *lu.size(), cudaMemcpyHostToDevice, hstream), "cudaMemcpyAsync failed copying log_values to device")
#define cudaStreamSynchronize
Definition: cuda2hip.h:152

Member Data Documentation

◆ hstream_

cudaStream_t hstream_
private

Definition at line 76 of file QueueCUDA.hpp.


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