3 #include "CudaMemory.cuh" 4 #include "cuda_macro.h" 5 #include "util/cudify/cudify.hpp" 8 #define CUDA_EVENT 0x1201 17 if (
hm != NULL &&
dm != NULL)
22 CUDA_SAFE_CALL(hipMemcpy(
dm,
hm,
sz,hipMemcpyHostToDevice));
24 CUDA_SAFE_CALL(cudaMemcpy(
dm,
hm,
sz,cudaMemcpyHostToDevice));
44 CUDA_SAFE_CALL(hipMalloc(&
dm,
sz));
45 #elif defined(CUDIFY_USE_CUDA) 46 CUDA_SAFE_CALL(cudaMalloc(&
dm,
sz));
50 dm =
new unsigned char[
sz];
51 #ifdef GARBAGE_INJECTOR 61 std::cout << __FILE__ <<
":" << __LINE__ <<
" error FATAL: using allocate to resize the memory, please use resize." << std::endl;
68 #if defined(GARBAGE_INJECTOR) && !defined(CUDA_ON_CPU) 69 CUDA_SAFE_CALL(cudaMemset(
dm,-1,
sz))
86 CUDA_SAFE_CALL(hipFree(
dm));
87 #elif defined(CUDIFY_USE_CUDA) 88 CUDA_SAFE_CALL(cudaFree(
dm));
90 delete [] (
unsigned char *)
dm;
99 CUDA_SAFE_CALL(hipHostFree(
hm));
100 #elif defined(CUDIFY_USE_CUDA) 101 CUDA_SAFE_CALL(cudaFreeHost(
hm));
103 delete [] (
unsigned char *)
hm;
122 CUDA_SAFE_CALL(hipMemcpy(((
unsigned char *)
dm)+offset,((
unsigned char *)ptr)+start,(stop-start),hipMemcpyDeviceToDevice));
124 CUDA_SAFE_CALL(cudaMemcpy(((
unsigned char *)
dm)+offset,((
unsigned char *)ptr)+start,(stop-start),cudaMemcpyDeviceToDevice));
138 CUDA_SAFE_CALL(hipHostMalloc(&
hm,
sz,hipHostMallocMapped))
139 #elif defined(CUDIFY_USE_CUDA) 140 CUDA_SAFE_CALL(cudaHostAlloc(&
hm,
sz,cudaHostAllocMapped))
142 hm =
new unsigned char[
sz];
143 #ifdef GARBAGE_INJECTOR 167 CUDA_SAFE_CALL(hipHostGetDevicePointer(&dvp,
hm,0));
171 CUDA_SAFE_CALL(cudaHostGetDevicePointer(&dvp,
hm,0));
193 std::cerr <<
"Error " << __LINE__ << __FILE__ <<
": source buffer is too big to copy";
199 CUDA_SAFE_CALL(hipMemcpy(
dm,m.
dm,m.
sz,hipMemcpyDeviceToDevice));
201 CUDA_SAFE_CALL(cudaMemcpy(
dm,m.
dm,m.
sz,cudaMemcpyDeviceToDevice));
217 const CudaMemory * ofpm = dynamic_cast<const CudaMemory *>(&m);
281 CUDA_SAFE_CALL(hipMalloc(&tdm,
sz));
282 #elif defined(CUDIFY_USE_CUDA) 283 CUDA_SAFE_CALL(cudaMalloc(&tdm,
sz));
285 tdm =
new unsigned char [
sz];
286 #ifdef GARBAGE_INJECTOR 291 #ifdef GARBAGE_INJECTOR 293 CUDA_SAFE_CALL(hipMemset(tdm,-1,
sz));
294 #elif defined(CUDIFY_USE_CUDA) 295 CUDA_SAFE_CALL(cudaMemset(tdm,-1,
sz));
313 CUDA_SAFE_CALL(hipHostMalloc(&thm,
sz,hipHostMallocMapped));
314 #elif defined(CUDIFY_USE_CUDA) 315 CUDA_SAFE_CALL(cudaHostAlloc(&thm,
sz,cudaHostAllocMapped));
317 thm =
new unsigned char [
sz];
318 #ifdef GARBAGE_INJECTOR 375 CUDA_SAFE_CALL(hipMemcpy(
hm,
dm,
sz,hipMemcpyDeviceToHost));
377 CUDA_SAFE_CALL(cudaMemcpy(
hm,
dm,
sz,cudaMemcpyDeviceToHost));
397 CUDA_SAFE_CALL(hipMemcpy(mem.
hm,
dm,mem.
sz,hipMemcpyDeviceToHost));
399 CUDA_SAFE_CALL(cudaMemcpy(mem.
hm,
dm,mem.
sz,cudaMemcpyDeviceToHost));
419 CUDA_SAFE_CALL(hipMemcpy(
dm,mem.
hm,mem.
sz,hipMemcpyHostToDevice));
421 CUDA_SAFE_CALL(cudaMemcpy(
dm,mem.
hm,mem.
sz,cudaMemcpyHostToDevice));
433 CUDA_SAFE_CALL(hipMemcpy(((
unsigned char *)
dm)+start,((
unsigned char *)
hm)+start,(stop-start),hipMemcpyHostToDevice));
435 CUDA_SAFE_CALL(cudaMemcpy(((
unsigned char *)
dm)+start,((
unsigned char *)
hm)+start,(stop-start),cudaMemcpyHostToDevice));
452 CUDA_SAFE_CALL(hipMemcpy(((
unsigned char *)
hm)+start,((
unsigned char *)
dm)+start,(stop-start),hipMemcpyDeviceToHost));
454 CUDA_SAFE_CALL(cudaMemcpy(((
unsigned char *)
hm)+start,((
unsigned char *)
dm)+start,(stop-start),cudaMemcpyDeviceToHost));
482 CUDA_SAFE_CALL(hipMemset(
dm,c,
size()));
483 #elif defined(CUDIFY_USE_CUDA) 484 CUDA_SAFE_CALL(cudaMemset(
dm,c,
size()));
516 CUDA_SAFE_CALL(hipMemcpy(
dm,
hm,
sz,hipMemcpyHostToDevice));
518 CUDA_SAFE_CALL(cudaMemcpy(
dm,
hm,
sz,cudaMemcpyHostToDevice));
void allocate_host(size_t sz) const
Allocate an host buffer.
bool copyFromPointer(const void *ptr)
copy from Pointer to GPU
virtual bool allocate(size_t sz)
allocate memory
virtual void hostToDevice()
Move memory from host to device.
virtual void * getPointer()
get a readable pointer with the data
void swap(CudaMemory &mem)
Swap the memory.
size_t ref_cnt
Reference counter.
virtual void fill(unsigned char c)
fill the buffer with a byte
virtual void * getDevicePointer()
get a readable pointer with the data
void deviceToDevice(void *ptr, size_t start, size_t stop, size_t offset)
copy memory from device to device
virtual bool copy(const memory &m)
copy from a General device
virtual bool flush()
flush the memory
size_t sz
Size of the memory.
virtual bool resize(size_t sz)
resize the momory allocated
virtual size_t size() const
the the size of the allocated memory
bool copyDeviceToDevice(const CudaMemory &m)
copy from GPU to GPU buffer directly
virtual void deviceToHost()
Move memory from device to host.
bool is_hm_sync
Is the host memory synchronized with the GPU memory.
virtual void * getPointer()=0
return a data pointer
virtual void destroy()
destroy memory