如何在 BLAS 中复制跨步矩阵?

How can I copy a strided matrix in BLAS?

BLAS 级别 3 Matrix/Matrix 例程采用参数 ldaldb 等,据我所知,这些参数允许传递 '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

的实现