Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #include "cmtkDeviceMemoryCUDA.h"
00032
00033 #include <GPU/cmtkCUDA.h>
00034
00035 #include <cuda_runtime_api.h>
00036
00037 namespace
00038 cmtk
00039 {
00040
00041 DeviceMemoryCUDA
00042 ::DeviceMemoryCUDA( const size_t nBytes, const size_t padToMultiple )
00043 {
00044 this->m_NumberOfBytesAllocated = (((nBytes-1) / padToMultiple)+1) * padToMultiple;
00045
00046 cmtkCheckCallCUDA( cudaMalloc( &(this->m_PointerDevice), this->m_NumberOfBytesAllocated ) );
00047 }
00048
00049 DeviceMemoryCUDA
00050 ::~DeviceMemoryCUDA()
00051 {
00052 if ( this->m_PointerDevice )
00053 cmtkCheckCallCUDA( cudaFree( this->m_PointerDevice ) );
00054 }
00055
00056 void
00057 DeviceMemoryCUDA
00058 ::CopyToDevice( const void *const srcPtrHost, const size_t nBytes )
00059 {
00060 cmtkCheckCallCUDA( cudaMemcpy( this->m_PointerDevice, srcPtrHost, nBytes, cudaMemcpyHostToDevice ) );
00061 }
00062
00063 void
00064 DeviceMemoryCUDA
00065 ::CopyToHost( void *const dstPtrHost, const size_t nBytes ) const
00066 {
00067 cmtkCheckCallCUDA( cudaMemcpy( dstPtrHost, this->m_PointerDevice, nBytes, cudaMemcpyDeviceToHost ) );
00068 }
00069
00070 void
00071 DeviceMemoryCUDA
00072 ::CopyOnDevice( const Self& srcPtrDevice, const size_t nBytes )
00073 {
00074 cmtkCheckCallCUDA( cudaMemcpy( this->m_PointerDevice, srcPtrDevice.m_PointerDevice, nBytes, cudaMemcpyDeviceToDevice ) );
00075 }
00076
00077 void
00078 DeviceMemoryCUDA
00079 ::Memset( const int value, const size_t nBytes )
00080 {
00081 cmtkCheckCallCUDA( cudaMemset( this->m_PointerDevice, value, nBytes ) );
00082 }
00083
00084 }