|
SkePU 1.0
|
A matrix container class (2D matrix), internally uses 1D container (std::vector) to store elements in a contiguous memory allocations. More...
#include <matrix.h>
Classes | |
| class | iterator |
| An matrix iterator class that tranverses row-wise. More... | |
| class | proxy_elem |
| A proxy class representing one element of Matrix. More... | |
Public Member Functions | |
| T * | GetArrayRep () |
| void | randomize (int min=0, int max=RAND_MAX) |
| Randomizes the Matrix. | |
| void | save (const std::string &filename) |
| Saves content of Matrix to a file. | |
| void | load (const std::string &filename, int rowWidth, int numRows=0) |
| Loads the Matrix from a file. | |
| ~Matrix () | |
| Matrix (size_type _rows, size_type _cols) | |
| Matrix (size_type _rows, size_type _cols, const T &val) | |
| Matrix (const Matrix< T > ©) | |
| size_type | size () const |
| size_type | total_rows () const |
| size_type | total_cols () const |
| void | change_layout () |
| void | resize (size_type _rows, size_type _cols, T val=T()) |
| Matrix< T > & | operator= (Matrix< T > &other) |
| Matrix< T > & | operator= (const T &elem) |
| bool | operator== (const Matrix< T > &c1) |
| bool | operator!= (const Matrix< T > &c1) |
| bool | operator< (const Matrix< T > &c1) |
| bool | operator> (const Matrix< T > &c1) |
| bool | operator<= (const Matrix< T > &c1) |
| bool | operator>= (const Matrix< T > &c1) |
| Matrix< T > & | subsection (size_type row, size_type col, size_type rowWidth, size_type colWidth) |
| iterator | begin () |
| const_iterator | begin () const |
| iterator | begin (unsigned row) |
| const_iterator | begin (unsigned row) const |
| iterator | end () |
| const_iterator | end () const |
| iterator | end (unsigned row) |
| const_iterator | end (unsigned row) const |
| size_type | capacity () const |
| void | flush () |
| bool | empty () const |
| proxy_elem | at (size_type row, size_type col) |
| const T & | at (size_type row, size_type col) const |
| size_type | row_back (size_type row) |
| const T & | row_back (size_type row) const |
| size_type | row_front (size_type row) |
| const T & | row_front (size_type row) const |
| proxy_elem | col_back (size_type col) |
| const T & | col_back (size_type col) const |
| proxy_elem | col_front (size_type col) |
| const T & | col_front (size_type col) const |
| void | clear () |
| void | swap (Matrix< T > &from) |
| device_pointer_type_cl | updateDevice_CL (T *start, size_type rows, size_type cols, Device_CL *device, bool copy) |
| Update device with matrix content. | |
| device_pointer_type_cl | updateDevice_CL (T *start, size_type cols, Device_CL *device, bool copy) |
| Update device with matrix content. | |
| void | flush_CL () |
| Flushes the matrix. | |
| device_pointer_type_cu | updateDevice_CU (T *start, size_type rows, size_type cols, int deviceID, bool copy, bool usePitch=false) |
| Update device with matrix content. | |
| device_pointer_type_cu | updateDevice_CU (T *start, size_type cols, int deviceID, bool copy) |
| Update device with matrix content. | |
| void | flush_CU () |
| Flushes the matrix. | |
| const T & | operator() (const size_type row, const size_type col) const |
| T & | operator() (const size_type row, const size_type col) |
| T & | operator() (const size_type index) |
| const T & | operator[] (const size_type index) const |
| T & | operator[] (const size_type index) |
| void | transpose_CPU () |
| A method to take Matrix transpose on CPU backend. | |
| void | transpose_OMP () |
| A method to take Matrix transpose on OpenMP backend. | |
| void | transpose_CU (Device_CU *device) |
| A method to take Matrix transpose on CUDA backend. Always uses 1 CUDA GPU for transpose even if multiple GPUs are available. | |
| void | transpose_CL (int deviceID) |
| A method to take Matrix transpose on OpenCL backend. Always uses 1 OpenCL device for transpose even if multiple OpenCL devices are available. | |
| void | updateHost () const |
| void | invalidateDevice () |
| void | updateHostAndInvalidateDevice () |
| const Matrix< T > & | operator+= (const Matrix< T > &rhs) |
| const Matrix< T > & | operator+= (const T &rhs) |
| const Matrix< T > & | operator-= (const Matrix< T > &rhs) |
| const Matrix< T > & | operator-= (const T &rhs) |
| const Matrix< T > & | operator*= (const Matrix< T > &rhs) |
| const Matrix< T > & | operator*= (const T &rhs) |
| const Matrix< T > & | operator/= (const Matrix< T > &rhs) |
| const Matrix< T > & | operator/= (const T &rhs) |
| const Matrix< T > & | operator%= (const Matrix< T > &rhs) |
| const Matrix< T > & | operator%= (const T &rhs) |
Friends | |
| std::ostream & | operator<< (std::ostream &os, Matrix< T > &matrix) |
| Overloaded stream operator, for testing purposes. | |
A matrix container class (2D matrix), internally uses 1D container (std::vector) to store elements in a contiguous memory allocations.
A skepu::Matrix is a 2D container that internally stores in a 1D std::vector to store elements in a contiguous memory allocations. Its interface and behaviour is largely compatible with skepu::Vector and std::vector but with some additions and variations. Instead of the regular element, it sometimes returns a proxy element so it can distinguish between reads and writes. It also keeps track of which parts of it are currently allocated and uploaded to the GPU. If a computation is done, changing the matrix in the GPU memory, it is not directly transferred back to the host memory. Instead, the Matrix waits until an element is accessed before any copying is done.
It also implements support for allocating and de-allocating page-locked memory using cudaMallocHost and cudaFreeHost. This could help is running asynchronous operations especially when using multiple CUDA devices. It can be enabled by defining USE_PINNED_MEMORY flag in the skeleton program.
| skepu::Matrix< T >::~Matrix | ( | ) | [inline] |
Destructor, used to deallocate memory mainly, device memory.
| skepu::Matrix< T >::Matrix | ( | size_type | _rows, |
| size_type | _cols | ||
| ) | [inline] |
Constructor, used to allocate memory ($_rows * _cols$).
| _rows | Number of rows in the matrix. |
| _cols | Number of columns in the matrix. |
| skepu::Matrix< T >::Matrix | ( | size_type | _rows, |
| size_type | _cols, | ||
| const T & | val | ||
| ) | [inline] |
Constructor, used to allocate memory ($_rows * _cols$). With a value ot initialize all elements.
| _rows | Number of rows in the matrix. |
| _cols | Number of columns in the matrix. |
| val | A value to initialize all elements. |
| skepu::Matrix< T >::Matrix | ( | const Matrix< T > & | copy | ) | [inline] |
Copy Constructor, used to assign copy of another matrix.
| copy | Matrix that is being assigned. |
Update the matrix before assigning it to assign latest copy.
References skepu::Matrix< T >::updateHost().

| Matrix< T >::proxy_elem skepu::Matrix< T >::at | ( | size_type | row, |
| size_type | col | ||
| ) |
Please refer to the documentation of std::vector.
Returns a proxy_elem instead of an ordinary element. The proxy_elem usually behaves like an ordinary, but there might be exceptions.
| const T & skepu::Matrix< T >::at | ( | size_type | row, |
| size_type | col | ||
| ) | const |
Please refer to the documentation of std::vector. Uses row and col instead of single index.
| row | Index of row to get. |
| col | Index of column to get. |
| Matrix< T >::const_iterator skepu::Matrix< T >::begin | ( | ) | const |
Please refer to the documentation of std::vector and skepu::Matrix::iterator.
| Matrix< T >::iterator skepu::Matrix< T >::begin | ( | unsigned | row | ) |
Please refer to the documentation of std::vector and skepu::Matrix::iterator. Uses row to get an iterator for that row.
| row | The index of row from where to start iterator. |
| Matrix< T >::const_iterator skepu::Matrix< T >::begin | ( | unsigned | row | ) | const |
Please refer to the documentation of std::vector and skepu::Matrix::iterator. Uses row to get an iterator for that row.
| row | The index of row from where to start iterator. |
| Matrix< T >::iterator skepu::Matrix< T >::begin | ( | ) |
Please refer to the documentation of std::vector and skepu::Matrix::iterator.
| Matrix< T >::size_type skepu::Matrix< T >::capacity | ( | ) | const |
Please refer to the documentation of std::vector.
| void skepu::Matrix< T >::change_layout | ( | ) | [inline] |
A small utility to change rows and columns numbers with each other. A Matrix (4x7) will become (7x4) after this function call without changing the actual values. Not similar to transpose where you actually change the values.
| void skepu::Matrix< T >::clear | ( | ) |
Please refer to the documentation of std::vector. Invalidates all copies before clear.
| Matrix< T >::proxy_elem skepu::Matrix< T >::col_back | ( | size_type | col | ) |
Returns proxy of last element in column.
Returns a proxy_elem instead of an ordinary element. The proxy_elem usually behaves like an ordinary, but there might be exceptions. col Index of the column.
| const T & skepu::Matrix< T >::col_back | ( | size_type | col | ) | const |
Returns last element in column.
col Index of the column.
| Matrix< T >::proxy_elem skepu::Matrix< T >::col_front | ( | size_type | col | ) |
Returns proxy of first element in column.
Returns a proxy_elem instead of an ordinary element. The proxy_elem usually behaves like an ordinary, but there might be exceptions. col Index of the column.
| const T & skepu::Matrix< T >::col_front | ( | size_type | col | ) | const |
Returns last element in column.
col Index of the column.
| bool skepu::Matrix< T >::empty | ( | ) | const |
Please refer to the documentation of std::vector.
| Matrix< T >::const_iterator skepu::Matrix< T >::end | ( | ) | const |
Please refer to the documentation of std::vector and skepu::Matrix::iterator.
| Matrix< T >::iterator skepu::Matrix< T >::end | ( | unsigned | row | ) |
Please refer to the documentation of std::vector and skepu::Matrix::iterator. Get iterator to last element of row.
| row | Index of row the iterator will point to the last element. |
| Matrix< T >::const_iterator skepu::Matrix< T >::end | ( | unsigned | row | ) | const |
Please refer to the documentation of std::vector and skepu::Matrix::iterator. Get iterator to last element of row.
| row | Index of row the iterator will point to the last element. |
| Matrix< T >::iterator skepu::Matrix< T >::end | ( | ) |
Please refer to the documentation of std::vector and skepu::Matrix::iterator.
| void skepu::Matrix< T >::flush | ( | ) |
Flushes the matrix, synchronizing it with the device then release all device allocations.
| void skepu::Matrix< T >::flush_CL | ( | ) |
Flushes the matrix.
First it updates the matrix from all its device allocations, then it releases all allocations.
| void skepu::Matrix< T >::flush_CU | ( | ) |
Flushes the matrix.
First it updates the matrix from all its device allocations, then it releases all allocations.
| T* skepu::Matrix< T >::GetArrayRep | ( | ) | [inline] |
Get array representation
| void skepu::Matrix< T >::invalidateDevice | ( | ) | [inline] |
Invalidates all device data that this matrix has allocated.
| void skepu::Matrix< T >::load | ( | const std::string & | filename, |
| int | rowWidth, | ||
| int | numRows = 0 |
||
| ) | [inline] |
Loads the Matrix from a file.
Reads a variable number of elements from a file. In the file, all elemets should be in ASCII on one line with whitespace between each element. Mainly for testing purposes.
| filename | Name of file to save to. |
| rowWidth | The width of a row. All rows get same amount of width. |
| numRows | The number of rows to be loaded. Default value 0 means all rows. |
References skepu::Matrix< T >::clear(), skepu::Matrix< T >::invalidateDevice(), and skepu::Matrix< T >::size().

| bool skepu::Matrix< T >::operator!= | ( | const Matrix< T > & | c1 | ) |
Please refer to the documentation of std::vector.
References skepu::Matrix< T >::updateHost().

| const Matrix< T > & skepu::Matrix< T >::operator%= | ( | const Matrix< T > & | rhs | ) |
Taking Mod with rhs matrix, element wise to current matrix. Two matrices must be of same size.
| rhs | The value which is used in taking mod to current matrix. |
References skepu::Matrix< T >::updateHost().

| const Matrix< T > & skepu::Matrix< T >::operator%= | ( | const T & | rhs | ) |
Taking Mod with a scalar value to all elements in the current matrix.
| rhs | The value which is used in taking mod to current matrix. |
| const T & skepu::Matrix< T >::operator() | ( | const size_type | row, |
| const size_type | col | ||
| ) | const |
Behaves like operator[] and unlike skepu::Vector, it cares about synchronizing with device. Can be used when accessing to access elements row and column wise.
| T & skepu::Matrix< T >::operator() | ( | const size_type | row, |
| const size_type | col | ||
| ) |
Behaves like operator[] and unlike skepu::Vector, it cares about synchronizing with device. Can be used when accessing to access elements row and column wise.
| T & skepu::Matrix< T >::operator() | ( | const size_type | index | ) |
Behaves like operator[] but does not care about synchronizing with device. Can be used when accessing many elements quickly so that no synchronization overhead effects performance. Make sure to properly synch with device by calling updateHost etc before use.
| index | Index of element assuming continuous Matrix row-wise storage. To facilitate access using single indexing |
| const Matrix< T > & skepu::Matrix< T >::operator*= | ( | const Matrix< T > & | rhs | ) |
Multiplies rhs matrix operation element wise to current matrix. Two matrices must be of same size. NB it is not matrix multiplication
| rhs | The matrix which is used in multiplication to current matrix. |
References skepu::Matrix< T >::updateHost().

| const Matrix< T > & skepu::Matrix< T >::operator*= | ( | const T & | rhs | ) |
Multiplies a scalar value to all elements in the current matrix.
| rhs | The value which is used in multiplication to current matrix. |
| const Matrix< T > & skepu::Matrix< T >::operator+= | ( | const Matrix< T > & | rhs | ) |
Add rhs matrix operation element wise to current matrix. Two matrices must be of same size.
| rhs | The matrix which is used in addition to current matrix. |
References skepu::Matrix< T >::updateHost().

| const Matrix< T > & skepu::Matrix< T >::operator+= | ( | const T & | rhs | ) |
Adds a scalar value to all elements in the current matrix.
| rhs | The value which is used in addition to current matrix. |
| const Matrix< T > & skepu::Matrix< T >::operator-= | ( | const Matrix< T > & | rhs | ) |
Subtract rhs matrix operation element wise to current matrix. Two matrices must be of same size.
| rhs | The matrix which is used in subtraction to current matrix. |
References skepu::Matrix< T >::updateHost().

| const Matrix< T > & skepu::Matrix< T >::operator-= | ( | const T & | rhs | ) |
Subtracts a scalar value to all elements in the current matrix.
| rhs | The value which is used in subtraction to current matrix. |
| const Matrix< T > & skepu::Matrix< T >::operator/= | ( | const Matrix< T > & | rhs | ) |
Divides rhs matrix operation element wise to current matrix. Two matrices must be of same size. NB it is not matrix multiplication
| rhs | The matrix which is used in division to current matrix. |
References skepu::Matrix< T >::updateHost().

| const Matrix< T > & skepu::Matrix< T >::operator/= | ( | const T & | rhs | ) |
Divides a scalar value to all elements in the current matrix.
| rhs | The value which is used in division to current matrix. |
| bool skepu::Matrix< T >::operator< | ( | const Matrix< T > & | c1 | ) |
Please refer to the documentation of std::vector.
References skepu::Matrix< T >::updateHost().

| bool skepu::Matrix< T >::operator<= | ( | const Matrix< T > & | c1 | ) |
Please refer to the documentation of std::vector.
References skepu::Matrix< T >::updateHost().

| Matrix< T > & skepu::Matrix< T >::operator= | ( | Matrix< T > & | other | ) |
copy matrix,,, copy row and column count as well along with data
References skepu::Matrix< T >::updateHost().

| Matrix< T > & skepu::Matrix< T >::operator= | ( | const T & | elem | ) |
To initialize a matrix with soem scalar value.
| elem | The element you want to assign to all matrix. |
| bool skepu::Matrix< T >::operator== | ( | const Matrix< T > & | c1 | ) |
Please refer to the documentation of std::vector.
References skepu::Matrix< T >::updateHost().

| bool skepu::Matrix< T >::operator> | ( | const Matrix< T > & | c1 | ) |
Please refer to the documentation of std::vector.
References skepu::Matrix< T >::updateHost().

| bool skepu::Matrix< T >::operator>= | ( | const Matrix< T > & | c1 | ) |
Please refer to the documentation of std::vector.
References skepu::Matrix< T >::updateHost().

| T & skepu::Matrix< T >::operator[] | ( | const size_type | index | ) |
A operator[] that care about synchronizing with device. Can be used when accessing elements considering consecutive storage
| index | Index of element assuming continuous Matrix row-wise storage. To facilitate access using single indexing |
| const T & skepu::Matrix< T >::operator[] | ( | const size_type | index | ) | const |
A operator[] that care about synchronizing with device. Can be used when accessing elements considering consecutive storage
| index | Index of element assuming continuous Matrix row-wise storage. To facilitate access using single indexing |
| void skepu::Matrix< T >::randomize | ( | int | min = 0, |
| int | max = RAND_MAX |
||
| ) | [inline] |
Randomizes the Matrix.
Sets each element of the Matrix to a random number between min and max. The numbers are generated as integers but are cast to the type of the matrix.
| min | The smallest number an element can become. |
| max | The largest number an element can become. |
References skepu::Matrix< T >::invalidateDevice(), skepu::max(), skepu::min(), and skepu::Matrix< T >::size().

| void skepu::Matrix< T >::resize | ( | size_type | _rows, |
| size_type | _cols, | ||
| T | val = T() |
||
| ) |
resize matrix,,, invalidates all copies before resizing.
References skepu::min().

| Matrix< T >::size_type skepu::Matrix< T >::row_back | ( | size_type | row | ) |
Return index of last element of row.
| row | Index of the row. |
| const T & skepu::Matrix< T >::row_back | ( | size_type | row | ) | const |
Return last element of row.
| row | Index of the row. |
| Matrix< T >::size_type skepu::Matrix< T >::row_front | ( | size_type | row | ) |
Return index of first element of row in 1D container.
| row | Index of the row. |
| const T & skepu::Matrix< T >::row_front | ( | size_type | row | ) | const |
Return first element of row.
| row | Index of the row. |
| void skepu::Matrix< T >::save | ( | const std::string & | filename | ) | [inline] |
Saves content of Matrix to a file.
Outputs the matrix as text on one line with space between elements to the specified file. Mainly for testing purposes.
| filename | Name of file to save to. |
References skepu::Matrix< T >::updateHost().

| size_type skepu::Matrix< T >::size | ( | ) | const [inline] |
| Matrix< T > & skepu::Matrix< T >::subsection | ( | size_type | row, |
| size_type | col, | ||
| size_type | rowWidth, | ||
| size_type | colWidth | ||
| ) |
To get a subsection of matrix. This will creat a separate copy.
| row | Index of row to get. |
| rowWidth | Width of the row of new Matrix. |
| col | Index of column to get. |
| colWidth | Width of column of new Matrix. |
References skepu::Matrix< T >::at(), skepu::Matrix< T >::total_cols(), and skepu::Matrix< T >::total_rows().

| void skepu::Matrix< T >::swap | ( | Matrix< T > & | from | ) |
Please refer to the documentation of std::vector. Updates and invalidate both Matrices before swapping.
References skepu::Matrix< T >::updateHostAndInvalidateDevice().

| size_type skepu::Matrix< T >::total_cols | ( | ) | const [inline] |
| size_type skepu::Matrix< T >::total_rows | ( | ) | const [inline] |
| Matrix< T >::device_pointer_type_cl skepu::Matrix< T >::updateDevice_CL | ( | T * | start, |
| size_type | cols, | ||
| Device_CL * | device, | ||
| bool | copy | ||
| ) |
Update device with matrix content.
Update device with a Matrix range by specifying rowsize only as number of rows is assumed to be 1 in this case. Helper function, useful for scenarios where matrix need to be treated like Vector 1D. If Matrix does not have an allocation on the device for the current range, create a new allocation and if specified, also copy Matrix data to device. Saves newly allocated ranges to m_deviceMemPointers_CL so matrix can keep track of where and what it has stored on devices.
| start | Pointer to first element in range to be updated with device. |
| cols | Number of columns. |
| device | Pointer to the device that should be synched with. |
| copy | Boolean value that tells whether to only allocate or also copy matrix data to device. True copies, False only allocates. |
| Matrix< T >::device_pointer_type_cl skepu::Matrix< T >::updateDevice_CL | ( | T * | start, |
| size_type | rows, | ||
| size_type | cols, | ||
| Device_CL * | device, | ||
| bool | copy | ||
| ) |
Update device with matrix content.
Update device with a Matrix range by specifying rowsize and column size. This allows to create rowwise paritions. If Matrix does not have an allocation on the device for the current range, create a new allocation and if specified, also copy Matrix data to device. Saves newly allocated ranges to m_deviceMemPointers_CL so matrix can keep track of where and what it has stored on devices.
| start | Pointer to first element in range to be updated with device. |
| rows | Number of rows. |
| cols | Number of columns. |
| device | Pointer to the device that should be synched with. |
| copy | Boolean value that tells whether to only allocate or also copy matrix data to device. True copies, False only allocates. |
References skepu::DeviceMemPointer_CL< T >::copyHostToDevice(), and skepu::Device_CL::getDeviceID().

| Matrix< T >::device_pointer_type_cu skepu::Matrix< T >::updateDevice_CU | ( | T * | start, |
| size_type | cols, | ||
| int | deviceID, | ||
| bool | copy | ||
| ) |
Update device with matrix content.
Update device with a Matrix range by specifying rowsize only as number of rows is assumed to be 1 in this case. Helper function, useful for scenarios where matrix need to be treated like Vector 1D. If Matrix does not have an allocation on the device for the current range, create a new allocation and if specified, also copy Matrix data to device. Saves newly allocated ranges to m_deviceMemPointers_CU so matrix can keep track of where and what it has stored on devices.
| start | Pointer to first element in range to be updated with device. |
| cols | Number of columns. |
| deviceID | Integer specififying the device that should be synched with. |
| copy | Boolean value that tells whether to only allocate or also copy matrix data to device. True copies, False only allocates. |
| Matrix< T >::device_pointer_type_cu skepu::Matrix< T >::updateDevice_CU | ( | T * | start, |
| size_type | rows, | ||
| size_type | cols, | ||
| int | deviceID, | ||
| bool | copy, | ||
| bool | usePitch = false |
||
| ) |
Update device with matrix content.
Update device with a Matrix range by specifying rowsize and column size. This allows to create rowwise paritions. If Matrix does not have an allocation on the device for the current range, create a new allocation and if specified, also copy Matrix data to device. Saves newly allocated ranges to m_deviceMemPointers_CU so matrix can keep track of where and what it has stored on devices.
| start | Pointer to first element in range to be updated with device. |
| rows | Number of rows. |
| cols | Number of columns. |
| deviceID | Integer specififying the device that should be synched with. |
| copy | Boolean value that tells whether to only allocate or also copy matrix data to device. True copies, False only allocates. |
| usePitch | To allow 2D CUDA memory allocation which can result in padding inserted to make coalescing work. |
References skepu::DeviceMemPointer_CU< T >::copyHostToDevice(), and skepu::Environment< T >::getInstance().

| void skepu::Matrix< T >::updateHost | ( | ) | const [inline] |
Updates the matrix from its device allocations.
| void skepu::Matrix< T >::updateHostAndInvalidateDevice | ( | ) | [inline] |
First updates the matrix from its device allocations. Then invalidates the data allocated on devices.
| std::ostream& operator<< | ( | std::ostream & | os, |
| Matrix< T > & | matrix | ||
| ) | [friend] |
Overloaded stream operator, for testing purposes.
Outputs the matrix rowwise having one row on each line.
1.7.4