Newer
Older
/***************************************************************************
-------------------
begin : Jul 11, 2013
copyright : (C) 2013 by Tomas Oberhuber
email : tomas.oberhuber@fjfi.cvut.cz
***************************************************************************/
/* See Copyright Notice in tnl/Copyright */
#include <TNL/Math.h>
#include <TNL/Config/ConfigDescription.h>
#include <TNL/Config/ParameterContainer.h>
#include <TNL/Devices/CudaDeviceInfo.h>
Jakub Klinkovský
committed
SmartPointersRegister Cuda::smartPointersRegister;
Timer Cuda::smartPointersSynchronizationTimer;
Jakub Klinkovský
committed
return String( "Devices::Cuda" );
int Cuda::getNumberOfBlocks( const int threads,
Jakub Klinkovský
committed
const int blockSize )
{
return roundUpDivision( threads, blockSize );
}
int Cuda::getNumberOfGrids( const int blocks,
Jakub Klinkovský
committed
const int gridSize )
{
return roundUpDivision( blocks, gridSize );
}
Jakub Klinkovský
committed
void Cuda::configSetup( Config::ConfigDescription& config,
const String& prefix )
// FIXME: HAVE_CUDA is never defined in .cpp files
Jakub Klinkovský
committed
config.addEntry< int >( prefix + "cuda-device", "Choose CUDA device to run the computation.", 0 );
Jakub Klinkovský
committed
config.addEntry< int >( prefix + "cuda-device", "Choose CUDA device to run the computation (not supported on this system).", 0 );
Jakub Klinkovský
committed
bool Cuda::setup( const Config::ParameterContainer& parameters,
Jakub Klinkovský
committed
const String& prefix )
// FIXME: HAVE_CUDA is never defined in .cpp files
int cudaDevice = parameters.getParameter< int >( prefix + "cuda-device" );
if( cudaSetDevice( cudaDevice ) != cudaSuccess )
{
std::cerr << "I cannot activate CUDA device number " << cudaDevice << "." << std::endl;
return false;
}
smartPointersSynchronizationTimer.reset();
smartPointersSynchronizationTimer.stop();
void Cuda::insertSmartPointer( SmartPointer* pointer )
Jakub Klinkovský
committed
smartPointersRegister.insert( pointer, Devices::CudaDeviceInfo::getActiveDevice() );
void Cuda::removeSmartPointer( SmartPointer* pointer )
Jakub Klinkovský
committed
smartPointersRegister.remove( pointer, Devices::CudaDeviceInfo::getActiveDevice() );
Jakub Klinkovský
committed
bool Cuda::synchronizeDevice( int deviceId )
{
Tomáš Oberhuber
committed
#ifdef HAVE_CUDA_UNIFIED_MEMORY
return true;
#else
Jakub Klinkovský
committed
if( deviceId < 0 )
deviceId = Devices::CudaDeviceInfo::getActiveDevice();
smartPointersSynchronizationTimer.start();
bool b = smartPointersRegister.synchronizeDevice( deviceId );
smartPointersSynchronizationTimer.stop();
return b;
Tomáš Oberhuber
committed
#endif