cmtkDeviceMemoryCUDA.cxx

Go to the documentation of this file.
00001 /*
00002 //
00003 //  Copyright 2010 SRI International
00004 //
00005 //  This file is part of the Computational Morphometry Toolkit.
00006 //
00007 //  http://www.nitrc.org/projects/cmtk/
00008 //
00009 //  The Computational Morphometry Toolkit is free software: you can
00010 //  redistribute it and/or modify it under the terms of the GNU General Public
00011 //  License as published by the Free Software Foundation, either version 3 of
00012 //  the License, or (at your option) any later version.
00013 //
00014 //  The Computational Morphometry Toolkit is distributed in the hope that it
00015 //  will be useful, but WITHOUT ANY WARRANTY; without even the implied
00016 //  warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00017 //  GNU General Public License for more details.
00018 //
00019 //  You should have received a copy of the GNU General Public License along
00020 //  with the Computational Morphometry Toolkit.  If not, see
00021 //  <http://www.gnu.org/licenses/>.
00022 //
00023 //  $Revision: 2398 $
00024 //
00025 //  $LastChangedDate: 2010-10-05 14:54:37 -0700 (Tue, 05 Oct 2010) $
00026 //
00027 //  $LastChangedBy: torstenrohlfing $
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 } // namespace cmtk
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines