39 #ifndef ECUDA_IMPL_HOST_IMPLEMENTATION_HPP
40 #define ECUDA_IMPL_HOST_IMPLEMENTATION_HPP
65 cudaMemcpyDeviceToDevice,
66 cudaMemcpyDeviceToHost,
67 cudaMemcpyHostToDevice
70 cudaError_t cudaFree(
void* devPtr )
72 delete []
reinterpret_cast<char*
>(devPtr);
76 inline cudaError_t cudaFreeHost(
void* devPtr ) {
return cudaFree( devPtr ); }
78 void cudaSetDevice(
int ) {}
80 cudaError_t cudaMalloc(
void** devPtr,
size_t size )
82 *devPtr = std::allocator<char>().allocate( size );
86 #define cudaHostAllocDefault 0x00
87 #define cudaHostAllocPortable 0x01
88 #define cudaHostAllocMapped 0x02
89 #define cudaHostAllocWriteCombined 0x04
91 inline cudaError_t cudaHostAlloc(
void** ptr,
size_t size,
unsigned flags = 0 ) {
return cudaMalloc( ptr, size ); }
93 cudaError_t cudaMallocPitch(
void** devPtr,
size_t* pitch,
size_t width,
size_t height )
96 *pitch += (*pitch % 16);
97 if( ( width % *pitch ) == 0 ) {
101 *devPtr = std::allocator<char>().allocate( (*pitch)*height );
105 cudaError_t
cudaMemcpy(
void* dst,
const void* src,
size_t count, cudaMemcpyKind )
107 std::copy( reinterpret_cast<const char*>(src), reinterpret_cast<const char*>(src)+count, reinterpret_cast<char*>(dst) );
111 cudaError_t
cudaMemcpy2D(
void* dst,
size_t dpitch,
const void* src,
size_t spitch,
size_t width,
size_t height, cudaMemcpyKind )
113 char* pDst =
reinterpret_cast<char*
>(dst);
114 const char* pSrc =
reinterpret_cast<const char*
>(src);
115 for(
size_t i = 0; i < height; ++i, pDst += dpitch, pSrc += spitch )
std::copy( pSrc, pSrc+width, pDst );
119 cudaError_t
cudaMemcpyToSymbol(
const char* dest,
const void* src,
size_t count,
size_t offset = 0, cudaMemcpyKind = cudaMemcpyHostToDevice )
121 char* pDst =
const_cast<char*
>(dest);
123 const char* pSrc =
reinterpret_cast<const char*
>(src);
128 cudaError_t
cudaMemset(
void* devPtr,
int value,
size_t count )
130 char* p =
static_cast<char*
>(devPtr);
131 for(
size_t i = 0; i < count; ++i, ++p ) *p = static_cast<char>(value);
135 cudaError_t
cudaMemset2D(
void* devPtr,
size_t pitch,
int value,
size_t width,
size_t height )
137 char* p =
static_cast<char*
>(devPtr);
138 for( std::size_t i = 0; i < height; ++i ) {
139 for( std::size_t j = 0; j < pitch; ++j, ++p ) if( j < width ) *p = static_cast<char>(value);
153 typedef impl::cudaEvent* cudaEvent_t;
155 typedef int cudaStream_t;
157 cudaError_t cudaEventCreate( cudaEvent_t* event )
159 *
event =
new impl::cudaEvent;
163 cudaError_t cudaEventCreateWithFlags( cudaEvent_t* event,
unsigned ) {
return cudaEventCreate(event); }
165 cudaError_t cudaEventRecord( cudaEvent_t event, cudaStream_t = 0 )
167 event->time = std::clock();
171 cudaError_t cudaEventQuery( cudaEvent_t ) {
return cudaSuccess; }
173 cudaError_t cudaEventDestroy( cudaEvent_t event )
175 if( event )
delete event;
179 cudaError_t cudaEventSynchronize( cudaEvent_t event ) {
return cudaSuccess; }
181 cudaError_t cudaEventElapsedTime(
float* ms, cudaEvent_t start, cudaEvent_t end )
183 *ms =
static_cast<double>( end->time - start->time ) / static_cast<double>(CLOCKS_PER_SEC) *
static_cast<double>(1000);
187 struct cudaDeviceProp {};
189 cudaError_t cudaGetDeviceProperties( cudaDeviceProp*,
int ) {
return cudaSuccess; }
191 cudaError_t cudaDriverGetVersion(
int* driverVersion ) { *driverVersion = 0;
return cudaSuccess; }
193 cudaError_t cudaRuntimeGetVersion(
int* runtimeVersion ) { *runtimeVersion = 0;
return cudaSuccess; }
195 cudaError_t cudaGetDeviceCount(
int* count ) { *count = 0;
return cudaSuccess; }
200 #endif // ECUDA_IMPL_HOST_IMPLEMENTATION_HPP
__HOST__ __DEVICE__ OutputIterator copy(InputIterator first, InputIterator last, OutputIterator result)
Replacement for std::copy.
cudaError_t cudaMemset(char *devPtr, const char &value, const size_t count)
Re-implementation of CUDA API function cudaMemset that enforces a single-byte value.
cudaError_t cudaMemset2D(char *devPtr, const size_t pitch, const char &value, const size_t width, const size_t height)
Re-implementation of CUDA API function cudaMemset2D that enforces a single-byte value.
cudaError_t cudaMemcpyToSymbol(T *dest, const T *src, size_t count=1, size_t offset=0, enum cudaMemcpyKind kind=cudaMemcpyHostToDevice)
cudaError_t cudaMemcpy(T *dest, const T *src, const size_t count, cudaMemcpyKind kind)
Wrapper around CUDA API function cudaMemcpy.
cudaError_t cudaMemcpy2D(T *dest, const size_t dpitch, const T *src, const size_t spitch, const size_t width, const size_t height, cudaMemcpyKind kind)
Wrapper around CUDA API function cudaMemcpy2D.
ECUDA_SUPPRESS_HD_WARNINGS __HOST__ __DEVICE__ ecuda::iterator_traits< InputIterator >::difference_type count(InputIterator first, InputIterator last, const T &value)