Go to the documentation of this file.
   19#ifndef OPM_GPUBUFFER_HEADER_HPP 
   20#define OPM_GPUBUFFER_HEADER_HPP 
   21#include <dune/common/fvector.hh> 
   22#include <dune/istl/bvector.hh> 
   25#include <opm/common/ErrorMacros.hpp> 
   30#include <cuda_runtime.h> 
   60    using size_type = size_t;  
   71    GpuBuffer( const GpuBuffer<T>& other);  
   82    explicit GpuBuffer( const std::vector<T>& data);  
   87    GpuBuffer() =  default;  
   94    explicit GpuBuffer( const size_t numberOfElements);  
  106    GpuBuffer( const T* dataOnHost,  const size_t numberOfElements);  
  111    virtual ~GpuBuffer();  
  121    const T* data()  const;  
  130    template < int BlockDimension>  
  131    void copyFromHost( const Dune::BlockVector<Dune::FieldVector<T, BlockDimension>>& bvector)  
  134        if (m_numberOfElements != bvector.size()) {  
  135            OPM_THROW(std::runtime_error,  
  136                      fmt::format( "Given incompatible vector size. GpuBuffer has size {}, \n" 
  137                                  "however, BlockVector has N() = {}, and size = {}.",  
  142        const auto dataPointer =  static_cast<const T* >(&(bvector[0][0]));  
  143        copyFromHost(dataPointer, m_numberOfElements);  
  153    template < int BlockDimension>  
  154    void copyToHost(Dune::BlockVector<Dune::FieldVector<T, BlockDimension>>& bvector)  const 
  157        if (m_numberOfElements != bvector.size()) {  
  158            OPM_THROW(std::runtime_error,  
  159                      fmt::format( "Given incompatible vector size. GpuBuffer has size {},\n however, the BlockVector " 
  160                                  "has has N() = {}, and size() = {}.",  
  165        const auto dataPointer =  static_cast<T* >(&(bvector[0][0]));  
  166        copyToHost(dataPointer, m_numberOfElements);  
  176    void copyFromHost( const T* dataPointer,  size_t numberOfElements);  
  185    void copyToHost(T* dataPointer,  size_t numberOfElements)  const;  
  194    void copyFromHost( const std::vector<T>& data);  
  203    void copyToHost(std::vector<T>& data)  const;  
  209    size_type size()  const;  
  221    std::vector<T> asStdVector()  const;  
  224    T* m_dataOnDevice =  nullptr;  
  225    size_t m_numberOfElements = 0;  
  227    void assertSameSize( const GpuBuffer<T>& other)  const;  
  228    void assertSameSize( size_t size)  const;  
  230    void assertHasElements()  const;  
  237GpuView<const T>  make_view( const GpuBuffer<T>&);  
Definition: AmgxInterface.hpp:38  
PointerView< T > make_view(const std::shared_ptr< T > &ptr) Definition: gpu_smart_pointer.hpp:318  
  
  
 
    
     |