33 #ifndef GPU_MEMORY_VIENNACL_H__ 34 #define GPU_MEMORY_VIENNACL_H__ 39 #include <viennacl/vector.hpp> 40 #include <viennacl/matrix.hpp> 51 struct GPUMemoryViennaCL :
public GPUMemoryBase<T>
53 friend class LinalgBackendViennaCL;
55 typedef viennacl::backend::mem_handle VCLMemoryArray;
56 typedef viennacl::vector_base<T, std::size_t, std::ptrdiff_t> VCLVectorBase;
59 #if VIENNACL_VERSION >= 10600 60 typedef viennacl::matrix_base<T, std::size_t, std::ptrdiff_t> VCLMatrixBase;
62 typedef viennacl::matrix_base<T, viennacl::column_major, std::size_t, std::ptrdiff_t> VCLMatrixBase;
66 GPUMemoryViennaCL() : m_data(new VCLMemoryArray())
75 GPUMemoryViennaCL(
index_t len): m_data(new VCLMemoryArray())
78 viennacl::backend::memory_create(*m_data,
sizeof(T)*len,
86 GPUMemoryViennaCL(GPUMemoryBase<T>* gpu_ptr) : m_data(new VCLMemoryArray())
88 GPUMemoryViennaCL<T>* temp_ptr =
static_cast<GPUMemoryViennaCL<T>*
>(gpu_ptr);
90 m_data = temp_ptr->m_data;
91 m_offset = temp_ptr->m_offset;
99 GPUMemoryBase<T>* clone_vector(GPUMemoryBase<T>* vector,
index_t vlen)
const 101 GPUMemoryViennaCL<T>* src_ptr =
static_cast<GPUMemoryViennaCL<T>*
>(vector);
102 GPUMemoryViennaCL<T>* gpu_ptr =
new GPUMemoryViennaCL<T>();
104 viennacl::backend::memory_create(*(gpu_ptr->m_data),
sizeof(T)*vlen,
105 viennacl::context());
106 viennacl::backend::memory_copy(*(src_ptr->m_data), *(gpu_ptr->m_data),
107 0, 0, vlen*
sizeof(T));
116 VCLVectorBase data_vector(
index_t len)
118 return VCLVectorBase(*m_data, len, m_offset, 1);
128 #if VIENNACL_VERSION >= 10600 129 return VCLMatrixBase(*m_data, nrows, m_offset, 1, nrows, ncols, 0, 1, ncols,
false);
131 return VCLMatrixBase(*m_data, nrows, m_offset, 1, nrows, ncols, 0, 1, ncols);
151 #endif // HAVE_VIENNACL 153 #endif //GPU_MEMORY_VIENNACL_H__
all of classes and functions are contained in the shogun namespace
constexpr size_t CPU_CACHE_LINE_SIZE