Namespace providing routines for handling the different memory domains. More...
Namespaces | |
cpu_ram | |
Provides implementations for handling memory buffers in CPU RAM. | |
cuda | |
Provides implementations for handling CUDA memory buffers. | |
detail | |
Implementation details for the generic memory backend interface. | |
opencl | |
Provides implementations for handling OpenCL memory buffers. | |
Classes | |
class | mem_handle |
Main abstraction class for multiple memory domains. Represents a buffer in either main RAM, an OpenCL context, or a CUDA device. More... | |
class | typesafe_host_array |
Helper class implementing an array on the host. Default case: No conversion necessary. More... | |
class | typesafe_host_array< T, true > |
Special host array type for conversion between OpenCL types and pure CPU types. More... | |
Functions | |
memory_types | default_memory_type () |
Returns the default memory type for the given configuration. More... | |
memory_types | default_memory_type (memory_types new_memory_type) |
Sets the default memory type for the given configuration. More... | |
void | finish () |
Synchronizes the execution. finish() will only return after all compute kernels (CUDA, OpenCL) have completed. More... | |
void | memory_create (mem_handle &handle, vcl_size_t size_in_bytes, viennacl::context const &ctx, const void *host_ptr=NULL) |
Creates an array of the specified size. If the second argument is provided, the buffer is initialized with data from that pointer. More... | |
void | memory_copy (mem_handle const &src_buffer, mem_handle &dst_buffer, vcl_size_t src_offset, vcl_size_t dst_offset, vcl_size_t bytes_to_copy) |
Copies 'bytes_to_copy' bytes from address 'src_buffer + src_offset' to memory starting at address 'dst_buffer + dst_offset'. More... | |
void | memory_shallow_copy (mem_handle const &src_buffer, mem_handle &dst_buffer) |
A 'shallow' copy operation from an initialized buffer to an uninitialized buffer. The uninitialized buffer just copies the raw handle. More... | |
void | memory_write (mem_handle &dst_buffer, vcl_size_t dst_offset, vcl_size_t bytes_to_write, const void *ptr, bool async=false) |
Writes data from main RAM identified by 'ptr' to the buffer identified by 'dst_buffer'. More... | |
void | memory_read (mem_handle const &src_buffer, vcl_size_t src_offset, vcl_size_t bytes_to_read, void *ptr, bool async=false) |
Reads data from a buffer back to main RAM. More... | |
template<typename DataType > | |
void | switch_memory_context (mem_handle &handle, viennacl::context new_ctx) |
Switches the active memory domain within a memory handle. Data is copied if the new active domain differs from the old one. Memory in the source handle is not free'd. More... | |
template<typename DataType > | |
void | typesafe_memory_copy (mem_handle const &handle_src, mem_handle &handle_dst) |
Copies data of the provided 'DataType' from 'handle_src' to 'handle_dst' and converts the data if the binary representation of 'DataType' among the memory domains differs. More... | |
Namespace providing routines for handling the different memory domains.
|
inline |
Returns the default memory type for the given configuration.
CUDA has precedence over OpenCL, which has precedence over main memory. Depends on which VIENNACL_WITH_{CUDA/OPENCL/OPENMP} macros are defined.
Definition at line 73 of file mem_handle.hpp.
|
inline |
Sets the default memory type for the given configuration.
Make sure the respective new memory type is enabled. For example, passing CUDA_MEMORY if no CUDA backend is selected will result in exceptions being thrown as soon as you try to allocate buffers.
Definition at line 80 of file mem_handle.hpp.
|
inline |
Synchronizes the execution. finish() will only return after all compute kernels (CUDA, OpenCL) have completed.
Definition at line 54 of file memory.hpp.
|
inline |
Copies 'bytes_to_copy' bytes from address 'src_buffer + src_offset' to memory starting at address 'dst_buffer + dst_offset'.
This is the generic version for CPU RAM, CUDA, and OpenCL. Copies the memory in the currently active memory domain.
src_buffer | A smart pointer to the begin of an allocated buffer |
dst_buffer | A smart pointer to the end of an allocated buffer |
src_offset | Offset of the first byte to be written from the address given by 'src_buffer' (in bytes) |
dst_offset | Offset of the first byte to be written to the address given by 'dst_buffer' (in bytes) |
bytes_to_copy | Number of bytes to be copied |
Definition at line 140 of file memory.hpp.
|
inline |
Creates an array of the specified size. If the second argument is provided, the buffer is initialized with data from that pointer.
This is the generic version for CPU RAM, CUDA, and OpenCL. Creates the memory in the currently active memory domain.
handle | The generic wrapper handle for multiple memory domains which will hold the new buffer. |
size_in_bytes | Number of bytes to allocate |
ctx | Optional context in which the matrix is created (one out of multiple OpenCL contexts, CUDA, host) |
host_ptr | Pointer to data which will be copied to the new array. Must point to at least 'size_in_bytes' bytes of data. |
Definition at line 87 of file memory.hpp.
|
inline |
Reads data from a buffer back to main RAM.
This is the generic version for CPU RAM, CUDA, and OpenCL. Reads the memory from the currently active memory domain.
src_buffer | A smart pointer to the beginning of an allocated source buffer |
src_offset | Offset of the first byte to be read from the beginning of src_buffer (in bytes_ |
bytes_to_read | Number of bytes to be read |
ptr | Location in main RAM where to read data should be written to |
async | Whether the operation should be asynchronous |
Definition at line 261 of file memory.hpp.
|
inline |
A 'shallow' copy operation from an initialized buffer to an uninitialized buffer. The uninitialized buffer just copies the raw handle.
Definition at line 177 of file memory.hpp.
|
inline |
Writes data from main RAM identified by 'ptr' to the buffer identified by 'dst_buffer'.
This is the generic version for CPU RAM, CUDA, and OpenCL. Writes the memory in the currently active memory domain.
dst_buffer | A smart pointer to the beginning of an allocated buffer |
dst_offset | Offset of the first written byte from the beginning of 'dst_buffer' (in bytes) |
bytes_to_write | Number of bytes to be written |
ptr | Pointer to the first byte to be written |
async | Whether the operation should be asynchronous |
Definition at line 220 of file memory.hpp.
void viennacl::backend::switch_memory_context | ( | mem_handle & | handle, |
viennacl::context | new_ctx | ||
) |
Switches the active memory domain within a memory handle. Data is copied if the new active domain differs from the old one. Memory in the source handle is not free'd.
Definition at line 368 of file memory.hpp.
void viennacl::backend::typesafe_memory_copy | ( | mem_handle const & | handle_src, |
mem_handle & | handle_dst | ||
) |
Copies data of the provided 'DataType' from 'handle_src' to 'handle_dst' and converts the data if the binary representation of 'DataType' among the memory domains differs.
Definition at line 470 of file memory.hpp.