|
|
| DSP_mat_mul | |
4.6 Matrix |
|
|
|
|
| Matrix Multiplication | |||
DSP_mat_mul | ||||
Function |
|
|
| |
| void DSP_mat_mul(const short * restrict x, int r1, int c1, const short * restrict | |||
|
| y, int c2, short * restrict r, int qs) | ||
Arguments |
| x [r1*c1] | Pointer to input matrix of size r1*c1. | |
|
| r1 | Number of rows in matrix x. | |
|
| c1 | Number of columns in matrix x. Also number of rows in y. | |
|
| y [c1*c2] | Pointer to input matrix of size c1*c2. | |
|
| c2 | Number of columns in matrix y. | |
|
| r [r1*c2] | Pointer to output matrix of size r1*c2. | |
|
| qs | Final right−shift to apply to the result. | |
Description |
| This function computes the expression “r = x * y” for the matrices x and y. The | ||
|
| columnar dimension of x must match the row dimension of y. The resulting | ||
|
| matrix has the same number of rows as x and the same number of columns as | ||
|
| y. |
|
|
|
| The values stored in the matrices are assumed to be | ||
|
| values. All intermediate sums are retained to | ||
|
| checking is performed. The results are | ||
|
| amount, and then truncated to 16 bits. | ||
Algorithm |
| This is the C equivalent of the assembly code without restrictions. Note that the | ||
|
| assembly code is hand optimized and restrictions may apply. |
void DSP_mat_mul(short *x, int r1, int c1, short *y, int c2, short *r, int qs)
{
int i, j, k; int sum;
/* −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− */ /* Multiply each row in x by each column in y. The */ /* product of row m in x and column n in y is placed */
/* in position (m,n) in the result.*/ /* −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− */
C64x+ DSPLIB Reference |