STORMM Source Documentation
Loading...
Searching...
No Matches
hybrid_util.h
1// -*-c++-*-
2#ifndef STORMM_HYBRID_UTIL_H
3#define STORMM_HYBRID_UTIL_H
4
5#include "copyright.h"
6#include "DataTypes/common_types.h"
7#include "DataTypes/stormm_vector_types.h"
8#include "gpu_details.h"
9#include "hybrid.h"
10#ifdef STORMM_USE_HPC
11# include "hpc_hybrid_util.h"
12#endif
13
14namespace stormm {
15namespace card {
16
17using data_types::isHpcVectorType;
18using data_types::isFloatingPointScalarType;
19using data_types::isSignedIntegralScalarType;
20using data_types::isUnsignedIntegralScalarType;
21
32void confirmCpuMemory(HybridFormat tfmt, const std::string &message,
33 const char* class_caller = nullptr,
34 const char* method_caller = nullptr);
35
39void confirmGpuMemory(HybridFormat tfmt, const std::string &message,
40 const char* class_caller = nullptr,
41 const char* method_caller = nullptr);
42
43#ifdef STORMM_USE_HPC
46void confirmHostVisibleToGpu(HybridFormat tfmt, const std::string &message,
47 const char* class_caller, const char* method_caller);
48
62void markCopyInstructions(HybridFormat dest_format, HybridFormat orig_format, bool *do_hhc,
63 bool *do_hdc, bool *do_dhc, bool *do_ddc, bool *use_kernel);
64#endif
65
73void checkFormatCompatibility(HybridTargetLevel request, HybridFormat native,
74 const char* class_caller, const char* method_caller);
75
85size_t screenHybridTransfer(size_t destination_size, size_t original_size, size_t length,
86 size_t destination_offset, size_t original_offset, const char* caller);
87
103template <typename T>
104void deepCopy(Hybrid<T> *destination, const Hybrid<T> &original, size_t length = 0,
105 size_t destination_offset = 0, size_t original_offset = 0,
106 const GpuDetails &gpu = null_gpu);
107
108template <typename T>
109void deepCopy(Hybrid<T> *destination, const Hybrid<T> &original, const GpuDetails &gpu,
110 size_t length = 0, size_t destination_offset = 0, size_t original_offset = 0);
112
128template <typename Tdest, typename Torig>
129void deepRecast(Hybrid<Tdest> *destination, const Hybrid<Torig> &original, double scale,
130 size_t length = 0, size_t destination_offset = 0, size_t original_offset = 0,
131 const GpuDetails &gpu = null_gpu);
132
133template <typename Tdest, typename Torig>
134void deepRecast(Hybrid<Tdest> *destination, const Hybrid<Torig> &original,
135 const Hybrid<int> &overflow, double scale, size_t length = 0,
136 size_t destination_offset = 0, size_t original_offset = 0,
137 const GpuDetails &gpu = null_gpu);
139
140} // namespace card
141} // namespace stormm
142
143#include "hybrid_util.tpp"
144
145#endif
Pertinent aspects of one particular GPU. Condensing the data for each GPU in this manner helps to ens...
Definition gpu_details.h:27
An evolution of GpuBuffer in pmemd.cuda, the Composite array has elements that are accessible from ei...
Definition hybrid.h:202