Skip to content
Snippets Groups Projects
tnlCuda.cpp 2.39 KiB
Newer Older
  • Learn to ignore specific revisions
  • /***************************************************************************
    
                              tnlCuda.cpp  -  description
    
                                 -------------------
        begin                : Jul 11, 2013
        copyright            : (C) 2013 by Tomas Oberhuber
        email                : tomas.oberhuber@fjfi.cvut.cz
     ***************************************************************************/
    
    /***************************************************************************
     *                                                                         *
     *   This program is free software; you can redistribute it and/or modify  *
     *   it under the terms of the GNU General Public License as published by  *
     *   the Free Software Foundation; either version 2 of the License, or     *
     *   (at your option) any later version.                                   *
     *                                                                         *
     ***************************************************************************/
    
    #include <core/tnlCuda.h>
    
    #include <core/mfuncs.h>
    
    #include <tnlConfig.h>
    
    #include <config/tnlConfigDescription.h>
    #include <config/tnlParameterContainer.h>
    
    
    tnlString tnlCuda :: getDeviceType()
    {
       return tnlString( "tnlCuda" );
    }
    
    int tnlCuda::getGPUTransferBufferSize()
    {
       return 1 << 20;
    }
    
    
    int tnlCuda::getNumberOfBlocks( const int threads,
                                    const int blockSize )
    {
       return roundUpDivision( threads, blockSize );
    }
    
    int tnlCuda::getNumberOfGrids( const int blocks,
                                   const int gridSize )
    {
       return roundUpDivision( blocks, gridSize );
    }
    
    
    /*size_t tnlCuda::getFreeMemory()
    
    void tnlCuda::configSetup( tnlConfigDescription& config, const tnlString& prefix )
    {
    #ifdef HAVE_CUDA
       config.addEntry<  int >( prefix + "cuda-device", "Choose CUDA device to run the computationon.", 0 );
    #else
       config.addEntry<  int >( prefix + "cuda-device", "Choose CUDA device to run the computationon (not supported on this system).", 0 );
    #endif
    }
          
    bool tnlCuda::setup( const tnlParameterContainer& parameters,
                          const tnlString& prefix )
    {
    #ifdef HAVE_CUDA
       int cudaDevice = parameters.getParameter< int >( "cuda-device" );
       if( cudaSetDevice( cudaDevice ) != cudaSuccess )
       {
          std::cerr << "I cannot activate CUDA device number " << cudaDevice << "." << std::endl;
          return false;
       }
    #endif   
       return true;
    }