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 |