如何在 BLAS 中复制跨步矩阵?
How can I copy a strided matrix in BLAS?
BLAS 级别 3 Matrix/Matrix 例程采用参数 lda
、ldb
等,据我所知,这些参数允许传递 'strided' 矩阵。例如,如果我有以下 2 x 2 列主矩阵:
|1 2|
|3 4|
|x x|
其中 x 是我想要忽略的数据,我可以使用参数 m = 2, n = 2, lda=3
(对于列主矩阵)来表示它。
我的问题是,可以使用 BLAS 例程复制此类矩阵吗?
如果步幅等于矩阵维数(即矩阵未跨步),则使用 向量复制 过程很简单,例如dcopy(m*n,A,1,B,1)
做到这一点。 当矩阵元素不连续时,有没有办法做到这一点,即 lda/stride != m
我能想到的一种方法是重复调用 dcopy
并增加偏移量,同时保持 incrx
参数等于 m。看起来效率不高。或者 dgemm
B = I 和 C = 0.
请查看此文档:
http://www.netlib.org/lapack/explore-3.1.1-html/slacpy.f.html
SLACPY( UPLO, M, N, A, LDA, B, LDB )
例如,对于从 A 的全部或部分到 B 的单精度实数矩阵,以上内容可以满足您的需求。它的使用相当简单。当然,您会找到所有风格 D、C、Z
的实现
BLAS 级别 3 Matrix/Matrix 例程采用参数 lda
、ldb
等,据我所知,这些参数允许传递 'strided' 矩阵。例如,如果我有以下 2 x 2 列主矩阵:
|1 2|
|3 4|
|x x|
其中 x 是我想要忽略的数据,我可以使用参数 m = 2, n = 2, lda=3
(对于列主矩阵)来表示它。
我的问题是,可以使用 BLAS 例程复制此类矩阵吗?
如果步幅等于矩阵维数(即矩阵未跨步),则使用 向量复制 过程很简单,例如dcopy(m*n,A,1,B,1)
做到这一点。 当矩阵元素不连续时,有没有办法做到这一点,即 lda/stride != m
我能想到的一种方法是重复调用 dcopy
并增加偏移量,同时保持 incrx
参数等于 m。看起来效率不高。或者 dgemm
B = I 和 C = 0.
请查看此文档:
http://www.netlib.org/lapack/explore-3.1.1-html/slacpy.f.html
SLACPY( UPLO, M, N, A, LDA, B, LDB )
例如,对于从 A 的全部或部分到 B 的单精度实数矩阵,以上内容可以满足您的需求。它的使用相当简单。当然,您会找到所有风格 D、C、Z
的实现