L1 Data mover¶
The L1 data mover modules are used to move matrix and vector data between their on-chip storage and the input/output streams of the computation modules. These data movers are intended to be used in conjunction with computation modules to form the HLS implementations for BLAS level 1 and 2 functions. Users can find this usage in uut_top.cpp files of the BLAS function name folders under directory L1/tests.
1. Matrix storage format¶
The following matrix storage formats are supported by L1 data mover modules.
- row-based storage in a contiguous array
- packed storage for symmetric and triangular matrices
- banded storage for banded matrices
For symmetric, triangular and banded storage, both Up and Lo storage modes are supported. More details about each storage format can be found in xf_blas/L1/matrix_storage.
2. Data mover APIs¶
sbmSuper2Stream¶
template <typename t_DataType, unsigned int t_ParEntries, unsigned int t_ParBlocks = 1> void sbmSuper2Stream(unsigned int p_n, unsigned int p_k, t_DataType* p_a, hls::stream<WideType<t_DataType, t_ParEntries>>& p_out)
sbmSuper2Stream function that moves symmetric banded matrix with super diagonals from memory to stream
Parameters:
t_DataType | the data type of the matrix entries |
t_ParEntries | number of parallelly processed entries in the matrix |
t_ParBlocks | number of t_ParEntries, p_n must be multiple t_ParEntries * t_ParBlocks |
p_n | number of rows/cols in a square matrix |
p_k | number of superdiagonals |
p_a | a p_n x p_n symmetric banded matrix with on-chip column-major storage and corresponding 0 paddings |
p_out | output stream, which is row-aligned with 0 paddings along subdiagonals |
sbmSub2Stream¶
template <typename t_DataType, unsigned int t_ParEntries, unsigned int t_ParBlocks = 1> void sbmSub2Stream(unsigned int p_n, unsigned int p_k, t_DataType* p_a, hls::stream<WideType<t_DataType, t_ParEntries>>& p_out)
sbmSub2Stream function that moves symmetric banded matrix with sub diagonals from memory to stream
Parameters:
t_DataType | the data type of the matrix entries |
t_ParEntries | number of parallelly processed entries in the matrix |
t_ParBlocks | number of t_ParEntries, p_n must be multiple t_ParEntries * t_ParBlocks |
p_n | number of rows/cols in a square matrix |
p_k | number of subdiagonals |
p_a | a p_n x p_n symmetric banded matrix with on-chip column-major storage and corresponding 0 paddings |
p_out | output stream, which is row-aligned with 0 paddings along subdiagonals |
gbm2Stream¶
template <typename t_DataType, unsigned int t_ParEntries, unsigned int t_ParBlocks = 1> void gbm2Stream(unsigned int p_n, unsigned int p_kl, unsigned int p_ku, t_DataType* p_a, hls::stream<WideType<t_DataType, t_ParEntries>>& p_out)
gbm2Stream function that moves symmetric banded matrix with from memory to stream
Parameters:
t_DataType | the data type of the matrix entries |
t_ParEntries | number of parallelly processed entries in the matrix |
t_ParBlocks | number of t_ParEntries, p_n must be multiple t_ParEntries * t_ParBlocks |
p_n | number of rows/cols in a square matrix |
p_kl | number of subdiagonals |
p_ku | number of superdiagonals |
p_a | a p_m x p_n symmetric banded matrix with on-chip column-major storage and corresponding 0 paddings |
p_out | output stream, which is row-aligned with 0 paddings along subdiagonals |
vec2GbMatStream¶
template <typename t_DataType, unsigned int t_ParEntries> void vec2GbMatStream(unsigned int p_n, unsigned int p_kl, unsigned int p_ku, t_DataType* p_x, hls::stream<WideType<t_DataType, t_ParEntries>>& p_out)
vec2SbMatStream function that moves vector from memory to stream that matches the sbMat2Stream outputs
Parameters:
t_DataType | the data type of the matrix entries |
t_ParEntries | number of parallelly processed entries in the matrix |
p_n | number of rows/cols in a square matrix |
p_ku | number of superdiagonals |
p_kl | number of subdiagonals |
p_x | vector input |
p_out | output stream, which matches the outputs of gbMat2Stream or sbMat2Stream |
tbmSuper2Stream¶
template <typename t_DataType, unsigned int t_ParEntries, unsigned int t_ParBlocks = 1> void tbmSuper2Stream(unsigned int p_n, unsigned int p_k, t_DataType* p_a, hls::stream<WideType<t_DataType, t_ParEntries>>& p_out)
tbmSuper2Stream function that moves triangular banded matrix with super diagonals from memory to stream
Parameters:
t_DataType | the data type of the matrix entries |
t_ParEntries | number of parallelly processed entries in the matrix |
t_ParBlocks | number of t_ParEntries, p_n must be multiple t_ParEntries * t_ParBlocks |
p_n | number of rows/cols in a square matrix |
p_k | number of superdiagonals |
p_a | a p_n x p_n triangular banded matrix with on-chip column-major storage and corresponding 0 paddings |
p_out | output stream, which is row-aligned with 0 paddings along subdiagonals |
tbmSub2Stream¶
template <typename t_DataType, unsigned int t_ParEntries, unsigned int t_ParBlocks = 1> void tbmSub2Stream(unsigned int p_n, unsigned int p_k, t_DataType* p_a, hls::stream<WideType<t_DataType, t_ParEntries>>& p_out)
tbmSub2Stream function that moves triangular banded matrix with sub diagonals from memory to stream
Parameters:
t_DataType | the data type of the matrix entries |
t_ParEntries | number of parallelly processed entries in the matrix |
t_ParBlocks | number of t_ParEntries, p_n must be multiple t_ParEntries * t_ParBlocks |
p_n | number of rows/cols in a square matrix |
p_k | number of subdiagonals |
p_a | a p_n x p_n triangular banded matrix with on-chip column-major storage and corresponding 0 paddings |
p_out | output stream, which is row-aligned with 0 paddings along subdiagonals |
vec2TbUpMatStream¶
template <typename t_DataType, unsigned int t_ParEntries> void vec2TbUpMatStream(unsigned int p_n, unsigned int p_k, t_DataType* p_x, hls::stream<WideType<t_DataType, t_ParEntries>>& p_out)
vec2TbUpMatStream function that moves vector from memory to stream that matches the sbMat2Stream outputs
Parameters:
t_DataType | the data type of the matrix entries |
t_ParEntries | number of parallelly processed entries in the matrix |
p_n | number of rows/cols in a square matrix |
p_k | number of super/sub-diagonals |
p_x | vector input |
p_out | output stream |
vec2TbLoMatStream¶
template <typename t_DataType, unsigned int t_ParEntries> void vec2TbLoMatStream(unsigned int p_n, unsigned int p_k, t_DataType* p_x, hls::stream<WideType<t_DataType, t_ParEntries>>& p_out)
vec2TbLoMatStream function that moves vector from memory to stream that matches the sbMat2Stream outputs
Parameters:
t_DataType | the data type of the matrix entries |
t_ParEntries | number of parallelly processed entries in the matrix |
p_n | number of rows/cols in a square matrix |
p_k | number of sub-diagonals |
p_x | vector input |
p_out | output stream |
gem2Stream¶
template <typename t_DataType, unsigned int t_ParEntries> void gem2Stream(unsigned int p_m, unsigned int p_n, t_DataType* p_in, hls::stream<WideType<t_DataType, t_ParEntries>>& p_out)
gem2Stream function that moves row-major matrix from memory to stream
Parameters:
t_DataType | the data type of the matrix entries |
t_ParEntries | number of parallelly processed entries in the matrix |
p_m | number of rows in a matrix |
p_n | number of cols in a matrix |
p_in | a p_m x p_n matrix with on-chip row-major storage |
p_out | output stream |
vec2GemStream¶
template <typename t_DataType, unsigned int t_ParEntries> void vec2GemStream(unsigned int p_m, unsigned int p_n, t_DataType* p_in, hls::stream<WideType<t_DataType, t_ParEntries>>& p_out)
vec2GemStream function that moves vector from memory to stream that matches the gem2Stream outputs
Parameters:
t_DataType | the data type of the matrix entries |
t_ParEntries | number of parallelly processed entries in the matrix |
p_m | number of rows in a matrix |
p_n | number of cols in a matrix |
p_in | vector input |
p_out | output stream |
symUp2Stream¶
template <typename t_DataType, unsigned int t_ParEntries> void symUp2Stream(unsigned int p_n, t_DataType* p_a, hls::stream<WideType<t_DataType, t_ParEntries>>& p_out)
symUp2Stream function that moves super-symmetric matrix from memory to stream
Parameters:
t_DataType | the data type of the matrix entries |
t_ParEntries | number of parallel processed entries in the matrix |
p_n | number of rows/cols in a symmetric matrix |
p_a | point to a p_n x p_n symmetric matrix |
p_out | output stream |
symLo2Stream¶
template <typename t_DataType, unsigned int t_ParEntries> void symLo2Stream(unsigned int p_n, t_DataType* p_a, hls::stream<WideType<t_DataType, t_ParEntries>>& p_out)
symLo2Stream function that moves sub-symmetric matrix from memory to stream
Parameters:
t_DataType | the data type of the matrix entries |
t_ParEntries | number of parallel processed entries in the matrix |
p_n | number of rows/cols in a symmetric matrix |
p_a | point to a p_n x p_n symmetric matrix |
p_out | output stream |
spmUp2Stream¶
template <typename t_DataType, unsigned int t_ParEntries> void spmUp2Stream(unsigned int p_n, t_DataType* p_a, hls::stream<WideType<t_DataType, t_ParEntries>>& p_out)
spmUp2Stream function that moves packed super-symmetric matrix from memory to stream
Parameters:
t_DataType | the data type of the matrix entries |
t_ParEntries | number of parallel processed entries in the matrix |
p_n | number of rows/cols in a symmetric matrix |
p_a | point to a p_n x p_n symmetric matrix |
p_out | output stream |
spmLo2Stream¶
template <typename t_DataType, unsigned int t_ParEntries> void spmLo2Stream(unsigned int p_n, t_DataType* p_a, hls::stream<WideType<t_DataType, t_ParEntries>>& p_out)
spmLo2Stream function that moves packed sub-symmetric matrix from memory to stream
Parameters:
t_DataType | the data type of the matrix entries |
t_ParEntries | number of parallel processed entries in the matrix |
p_n | number of rows/cols in a symmetric matrix |
p_a | point to a p_n x p_n symmetric matrix |
p_out | output stream |
vec2SymStream¶
template <typename t_DataType, unsigned int t_ParEntries> void vec2SymStream(unsigned int p_n, t_DataType* p_x, hls::stream<WideType<t_DataType, t_ParEntries>>& p_out)
vec2SymStream function that moves vector from memory to stream that matches the symatrix matrix data mover outputs
Parameters:
t_DataType | the data type of the matrix entries |
t_ParEntries | number of parallelly processed entries in the matrix |
p_n | number of rows/cols in a square matrix |
p_x | vector input |
p_out | output stream |
trmUp2Stream¶
template <typename t_DataType, unsigned int t_ParEntries> void trmUp2Stream(unsigned int p_n, t_DataType* p_a, hls::stream<WideType<t_DataType, t_ParEntries>>& p_out)
trmUp2Stream function that read the super-triangular matrix from memory to stream
Parameters:
t_DataType | the data type of the matrix entries |
t_ParEntries | the number of parallelly processed entries in the matrix |
p_n | number of rows/cols in a symmetric matrix |
p_a | memory location of a p_n x p_n symmetric matrix |
p_out | the streams of matrix entries |
trmLo2Stream¶
template <typename t_DataType, unsigned int t_ParEntries> void trmLo2Stream(unsigned int p_n, t_DataType* p_a, hls::stream<WideType<t_DataType, t_ParEntries>>& p_out)
trmLo2Stream function that read the sub-tridiagonal matrix with from memory to stream
Parameters:
t_DataType | the data type of the matrix entries |
t_ParEntries | the number of parallelly processed entries in the matrix |
p_n | number of rows/cols in a symmetric matrix |
p_a | memory location of a p_n x p_n symmetric matrix |
p_out | the streams of matrix entries |
tpmUp2Stream¶
template <typename t_DataType, unsigned int t_ParEntries> void tpmUp2Stream(unsigned int p_n, t_DataType* p_a, hls::stream<WideType<t_DataType, t_ParEntries>>& p_out)
tpmUp2Stream function that read the packed super-triangular matrix from memory to stream
Parameters:
t_DataType | the data type of the matrix entries |
t_ParEntries | the number of parallelly processed entries in the matrix |
p_n | number of rows/cols in a symmetric matrix |
p_a | memory location of a p_n x p_n symmetric matrix |
p_out | the streams of matrix entries |
tpmLo2Stream¶
template <typename t_DataType, unsigned int t_ParEntries> void tpmLo2Stream(unsigned int p_n, t_DataType* p_a, hls::stream<WideType<t_DataType, t_ParEntries>>& p_out)
tpmLo2Stream function that read the packed sub-symmetric matrix with from memory to stream
Parameters:
t_DataType | the data type of the matrix entries |
t_ParEntries | the number of parallelly processed entries in the matrix |
p_n | number of rows/cols in a symmetric matrix |
p_a | memory location of a p_n x p_n symmetric matrix |
p_out | the streams of matrix entries |
vec2TrmUpStream¶
template <typename t_DataType, unsigned int t_ParEntries> void vec2TrmUpStream(unsigned int p_n, t_DataType* p_x, hls::stream<WideType<t_DataType, t_ParEntries>>& p_out)
vec2TrmUpStream function that moves vector from memory to stream that matches the trmUp2Stream/tpmUp2Stream outputs
Parameters:
t_DataType | the data type of the matrix entries |
t_ParEntries | number of parallelly processed entries in the matrix |
p_n | number of rows/cols in a square matrix |
p_x | vector input |
p_out | output stream |
vec2TrmLoStream¶
template <typename t_DataType, unsigned int t_ParEntries> void vec2TrmLoStream(unsigned int p_n, t_DataType* p_x, hls::stream<WideType<t_DataType, t_ParEntries>>& p_out)
vec2TrmLoStream function that moves vector from memory to stream that matches the trmLo2Stream/tpmLo2Stream outputs
Parameters:
t_DataType | the data type of the matrix entries |
t_ParEntries | number of parallelly processed entries in the matrix |
p_n | number of rows/cols in a square matrix |
p_x | vector input |
p_out | output stream |
readVec2Stream¶
template <typename t_DataType, unsigned int t_ParEntries> void readVec2Stream(t_DataType* p_in, unsigned int p_n, hls::stream<WideType<t_DataType, t_ParEntries>>& p_out)
readVec2Stream function that moves vector from memory to stream
Parameters:
t_DataType | the data type of the matrix entries |
t_ParEntries | number of parallelly processed entries in the matrix |
p_n | number of entries in a vectpr |
p_in | vector input |
p_out | output stream |
writeStream2Vec¶
template <typename t_DataType, unsigned int t_ParEntries> void writeStream2Vec(hls::stream<WideType<t_DataType, t_ParEntries>>& p_in, unsigned int p_n, t_DataType* p_out)
writeStream2Vec function that moves vector from stream to vector
Parameters:
t_DataType | the data type of the matrix entries |
t_ParEntries | number of parallelly processed entries in the matrix |
p_n | number of entries in a vectpr |
p_in | vector stream input |
p_out | vector output memory |