From bdb302be663e50cb391e0db79c3baf14b59b04da Mon Sep 17 00:00:00 2001 From: TeseoSanJose Date: Tue, 11 Feb 2025 09:48:07 +0000 Subject: [PATCH] Solves Hadrons compilation error adding extra templates --- Grid/threads/Accelerator.h | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/Grid/threads/Accelerator.h b/Grid/threads/Accelerator.h index c28ca201..9ae282f2 100644 --- a/Grid/threads/Accelerator.h +++ b/Grid/threads/Accelerator.h @@ -215,7 +215,7 @@ inline void *acceleratorAllocHost(size_t bytes) auto err = cudaMallocHost((void **)&ptr,bytes); if( err != cudaSuccess ) { ptr = (void *) NULL; - printf(" cudaMallocHost failed for %d %s \n",bytes,cudaGetErrorString(err)); + printf(" cudaMallocHost failed for %ld %s \n",bytes,cudaGetErrorString(err)); assert(0); } return ptr; @@ -226,7 +226,7 @@ inline void *acceleratorAllocShared(size_t bytes) auto err = cudaMallocManaged((void **)&ptr,bytes); if( err != cudaSuccess ) { ptr = (void *) NULL; - printf(" cudaMallocManaged failed for %d %s \n",bytes,cudaGetErrorString(err)); + printf(" cudaMallocManaged failed for %ld %s \n",bytes,cudaGetErrorString(err)); assert(0); } return ptr; @@ -237,7 +237,7 @@ inline void *acceleratorAllocDevice(size_t bytes) auto err = cudaMalloc((void **)&ptr,bytes); if( err != cudaSuccess ) { ptr = (void *) NULL; - printf(" cudaMalloc failed for %d %s \n",bytes,cudaGetErrorString(err)); + printf(" cudaMalloc failed for %ld %s \n",bytes,cudaGetErrorString(err)); } return ptr; }; @@ -245,7 +245,8 @@ inline void *acceleratorAllocDevice(size_t bytes) inline void acceleratorFreeShared(void *ptr){ cudaFree(ptr);}; inline void acceleratorFreeDevice(void *ptr){ cudaFree(ptr);}; inline void acceleratorFreeHost(void *ptr){ cudaFree(ptr);}; -inline void acceleratorCopyToDevice(void *from,void *to,size_t bytes) { cudaMemcpy(to,from,bytes, cudaMemcpyHostToDevice);} +inline void acceleratorCopyToDevice(void *from, void *to, size_t bytes) { cudaMemcpy(to,from,bytes, cudaMemcpyHostToDevice);} +inline void acceleratorCopyToDevice(const void *from, void *to, size_t bytes) {cudaMemcpy(to,from,bytes, cudaMemcpyHostToDevice);} inline void acceleratorCopyFromDevice(void *from,void *to,size_t bytes){ cudaMemcpy(to,from,bytes, cudaMemcpyDeviceToHost);} inline void acceleratorCopyToDeviceAsync(void *from, void *to, size_t bytes, cudaStream_t stream = copyStream) { cudaMemcpyAsync(to,from,bytes, cudaMemcpyHostToDevice, stream);} inline void acceleratorCopyFromDeviceAsync(void *from, void *to, size_t bytes, cudaStream_t stream = copyStream) { cudaMemcpyAsync(to,from,bytes, cudaMemcpyDeviceToHost, stream);} @@ -649,7 +650,7 @@ accelerator_inline void acceleratorFence(void) return; } -inline void acceleratorCopyDeviceToDevice(void *from,void *to,size_t bytes) +inline void acceleratorCopyDeviceToDevice(void *from,void *to, size_t bytes) { acceleratorCopyDeviceToDeviceAsynch(from,to,bytes); acceleratorCopySynchronise(); @@ -657,7 +658,11 @@ inline void acceleratorCopyDeviceToDevice(void *from,void *to,size_t bytes) template void acceleratorPut(T& dev,T&host) { - acceleratorCopyToDevice(&host,&dev,sizeof(T)); + acceleratorCopyToDevice(&host, &dev, sizeof(T)); +} +template void acceleratorPut(T& dev, const T& host) +{ + acceleratorCopyToDevice(&host, &dev, sizeof(T)); } template T acceleratorGet(T& dev) {