Difference between revisions of "GPU610/DPS915 BLAS Documentation"
(corrected type in title) |
|||
(6 intermediate revisions by 3 users not shown) | |||
Line 7: | Line 7: | ||
Example Page @ [https://scs.senecac.on.ca/~gpu610/pages/content/lines.html GPU/DPS915 Course Site] | Example Page @ [https://scs.senecac.on.ca/~gpu610/pages/content/lines.html GPU/DPS915 Course Site] | ||
− | == | + | ==sgemv== |
* compute the matrix-vector product for a general matrix | * compute the matrix-vector product for a general matrix | ||
Line 36: | Line 36: | ||
'''''lda''''' | '''''lda''''' | ||
− | :is the leading dimension of the array specified by a. The leading dimension must be greater than zero. The leading dimension must be greater than or equal to 1 and greater than or equal to the value specified in m. | + | :is the leading dimension of the array specified by a. The leading dimension must be greater than zero. The leading dimension must be greater than or equal to 1 and greater than or equal to the value specified in m. See the 'Understanding Strides' section below for more information. |
'''''x''''' | '''''x''''' | ||
Line 53: | Line 53: | ||
:is the stride for vector y. It must not be zero. | :is the stride for vector y. It must not be zero. | ||
− | == | + | ==sgemm== |
* perform combined matrix multiplication and addition for general matrices | * perform combined matrix multiplication and addition for general matrices | ||
Line 86: | Line 86: | ||
'''''lda''''' | '''''lda''''' | ||
− | :is the leading dimension of the array specified by a. The leading dimension must be greater than zero. If transa is specified as 'N' or 'n', the leading dimension must be greater than or equal to 1. If transa is specified as 'T' or 't', the leading dimension must be greater than or equal to the value specified in m. | + | :is the leading dimension of the array specified by a. The leading dimension must be greater than zero. If transa is specified as 'N' or 'n', the leading dimension must be greater than or equal to 1. If transa is specified as 'T' or 't', the leading dimension must be greater than or equal to the value specified in m. See the 'Understanding Strides' section below for more information. |
'''''B''''' | '''''B''''' | ||
Line 92: | Line 92: | ||
'''''ldb''''' | '''''ldb''''' | ||
− | :is the leading dimension of the array specified by b. The leading dimension must be greater than zero. If transb is specified as 'N' or 'n', the leading dimension must be greater than or equal to the value specified in m. If transa is specified as 'T' or 't', the leading dimension must be greater than or equal to the value specified in n. | + | :is the leading dimension of the array specified by b. The leading dimension must be greater than zero. If transb is specified as 'N' or 'n', the leading dimension must be greater than or equal to the value specified in m. If transa is specified as 'T' or 't', the leading dimension must be greater than or equal to the value specified in n. See the 'Understanding Strides' section below for more information. |
'''''beta''''' | '''''beta''''' | ||
Line 101: | Line 101: | ||
'''''ldc''''' | '''''ldc''''' | ||
− | :is the leading dimension of the array specified by c. The leading dimension must be greater than zero. If transb is specified as 'N' or 'n', the leading dimension must be greater than or equal to 0 and greater than or equal to the value specified in l. | + | :is the leading dimension of the array specified by c. The leading dimension must be greater than zero. If transb is specified as 'N' or 'n', the leading dimension must be greater than or equal to 0 and greater than or equal to the value specified in l. See the 'Understanding Strides' section below for more information. |
+ | |||
+ | ==Understanding Strides (lda, ldb, ldc)== | ||
+ | |||
+ | The elements of a matrix (i.e a 2D array) are stored contiguously in memory. However, they may be stored in either column-major or row-major fashion. The stride represents the distance in memory between elements in adjacent rows (if row-major) or in adjacent columns (if column-major). This means that the stride is usually equal to the number of rows/columns in the matrix. | ||
+ | |||
+ | <pre> | ||
+ | Matrix A = | ||
+ | [1 2 3] | ||
+ | [4 5 6] | ||
+ | </pre> | ||
+ | Row-major stores values as {1,2,3,4,5,6}<br /> | ||
+ | Stride here is 3 | ||
+ | |||
+ | Col-major stores values as {1, 4, 2, 5, 3, 6}<br /> | ||
+ | Stride here is 2 | ||
+ | <pre> | ||
+ | Matrix B = | ||
+ | [1 2 3] | ||
+ | [4 5 6] | ||
+ | [7 8 9] | ||
+ | </pre> | ||
+ | Col-major storage is {1, 4, 7, 2, 5, 8, 3, 6, 9}<br /> | ||
+ | Stride here is 3 | ||
+ | |||
+ | |||
+ | [http://www.physicsforums.com/showthread.php?t=543110 Source] |
Latest revision as of 23:02, 3 October 2015
BLAS Documentation
Note: This information applies to the gsl_cblas library
There are 2 main functions to use
Example Page @ GPU/DPS915 Course Site
sgemv
- compute the matrix-vector product for a general matrix
void cblas_sgemv (const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE TransA, const int M, const int N, const float alpha, const float *A, const int lda, const float * x, const int incx, const float beta, float * y, const intincy)12 3
order
- Whether matrices are row major order (C-Style) for column major order (Fortran-style). One of enum CblasRowMajor or CblasColMajor.
TransA
- Whether to transpose matrix A. One of enum CblasNoTrans, CBlasTrans.
M
- represents:
- the number of rows in input matrix a
- The number of rows must be greater than or equal to zero, and less than the leading dimension of the matrix a (specified in lda)
N
- represents:
- the number of columns in input matrix a
- The number of columns must be greater than or equal to zero.
alpha
- is the scaling constant for matrix a
A
- is the input matrix of float (for sgemv) or double (for dgemv) values
lda
- is the leading dimension of the array specified by a. The leading dimension must be greater than zero. The leading dimension must be greater than or equal to 1 and greater than or equal to the value specified in m. See the 'Understanding Strides' section below for more information.
x
- is the input vector of float (for sgemv) or double (for dgemv) values.
incx
- is the stride for vector x. It can have any value.
beta
- is the scaling constant for vector y
y
- is the output vector of float (for sgemv) or double (for dgemv) values.
incy
- is the stride for vector y. It must not be zero.
sgemm
- perform combined matrix multiplication and addition for general matrices
void cblas_sgemm (const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB, const int M, const int N, const int K, const float alpha, const float * A, const int lda, const float * B, const int ldb, const float beta, float * C, const intldc)12 3
Order
- Whether matrices are row major order (C-Style) for column major order (Fortran-style). One of enum CblasRowMajor or CblasColMajor.
TransA
- Whether to transpose matrix A. One of enum CblasNoTrans, CBlasTrans, CBlasConjTrans
TransB
- Whether to transpose matrix B. One of enum CblasNoTrans, CBlasTrans, CBlasConjTrans.
M
- is the number of Rows in matrices A and C
- M must be greater than or equal to zero.
N
- is the number of Columns in Matrices B and C
K
- is the number of Columns in matrix A and Rows in matrix B
alpha
- is the scaling constant for matrix a
A
- is the input matrix a of float (for sgemm).
lda
- is the leading dimension of the array specified by a. The leading dimension must be greater than zero. If transa is specified as 'N' or 'n', the leading dimension must be greater than or equal to 1. If transa is specified as 'T' or 't', the leading dimension must be greater than or equal to the value specified in m. See the 'Understanding Strides' section below for more information.
B
- is the input matrix b of float (for sgemm).
ldb
- is the leading dimension of the array specified by b. The leading dimension must be greater than zero. If transb is specified as 'N' or 'n', the leading dimension must be greater than or equal to the value specified in m. If transa is specified as 'T' or 't', the leading dimension must be greater than or equal to the value specified in n. See the 'Understanding Strides' section below for more information.
beta
- is the scaling constant for matrix c
C
- is the output matrix c of float (for sgemm) or double (for dgemm) values.
ldc
- is the leading dimension of the array specified by c. The leading dimension must be greater than zero. If transb is specified as 'N' or 'n', the leading dimension must be greater than or equal to 0 and greater than or equal to the value specified in l. See the 'Understanding Strides' section below for more information.
Understanding Strides (lda, ldb, ldc)
The elements of a matrix (i.e a 2D array) are stored contiguously in memory. However, they may be stored in either column-major or row-major fashion. The stride represents the distance in memory between elements in adjacent rows (if row-major) or in adjacent columns (if column-major). This means that the stride is usually equal to the number of rows/columns in the matrix.
Matrix A = [1 2 3] [4 5 6]
Row-major stores values as {1,2,3,4,5,6}
Stride here is 3
Col-major stores values as {1, 4, 2, 5, 3, 6}
Stride here is 2
Matrix B = [1 2 3] [4 5 6] [7 8 9]
Col-major storage is {1, 4, 7, 2, 5, 8, 3, 6, 9}
Stride here is 3