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

Matrix 如何在BLAS中复制跨步矩阵?,matrix,memcpy,blas,cblas,Matrix,Memcpy,Blas,Cblas,BLAS 3级矩阵/矩阵例程采用参数lda,ldb等,据我所知,这些参数允许一个人通过“跨步”矩阵。例如,如果我有以下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 我可以考虑这

BLAS 3级矩阵/矩阵例程采用参数
lda
ldb
等,据我所知,这些参数允许一个人通过“跨步”矩阵。例如,如果我有以下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。这似乎效率不高。或者使用B=I和C=0的
dgemm

请查看此文档:


例如,对于从A的全部或部分到B的单精度实矩阵,上面的操作就是您想要的。它的使用相当缓慢。当然,你会发现所有口味的D、C、Z都有实现,我已经接受了答案,尽管令人费解的是,这是在LAPACK而不是BLAS中实现的。在BLAS中似乎没有等价物。首先是thx。但现在谈谈你的观点:xLACPY确实是LAPACK的一部分。原因是它们是由LAPACK程序员编写的,是LAPACK辅助例程。据我所知,xLACPY编码是为了帮助xHSEQR分解驱动程序。有一个关于将这些例程移动到较低级别包的讨论。但到目前为止,这仍然是一个讨论。2它说,许多新的操作是基于LAPACK中的辅助例程(例如…GE_COPY)。只有在LAPACK项目开始后,才意识到存在矩阵复制例程(GE_copy)之类的操作。。这种情况经常发生,所以明智的做法是为他们制定单独的程序。但是看起来这个规范与当前的ref-BLAS实现不同。我很困惑,因为我找不到GE_的副本。值得一提的是,SLACPY操作的是跨步三角形矩阵。i、 e.不确定它在包装或带状存储上如何工作。
SLACPY( UPLO, M, N, A, LDA, B, LDB )