共有矩阵上的Fortran gemm函数

2024-09-28 03:23:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用fortran BLASgemm函数来做矩阵乘法,请参见here。在

这个函数的特点是,所有参数的含义都可以在上面的链接中找到。在

call sgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)

我的问题是,我想使用C-连续数组而不是Fortran连续数组,我已经玩了很长时间的上面的sgemm,仍然很困惑。在

请帮我介绍一些具体的例子。在

我所有的输入数组都是C-连续的。在

^{pr2}$

显然,sgemm以Fortran连续顺序存储元素,如何解决这个问题?我也不太明白这些m,n,k,lda,ldb是如何确定的,如果transa/transb='T' or 'N',希望你能给我一个详细的解释。在

注意

我使用的是从scipy.linalg.cython_blas导出的gemm函数,这意味着,除了使用Fortran排序工具,我别无选择。在


Tags: 函数参数here矩阵数组ldafortran乘法
1条回答
网友
1楼 · 发布于 2024-09-28 03:23:55

如果要使用行主矩阵而不是Fortran样式的col major,可以使用CBLAS API gemm。您可以使用第一个参数选择矩阵存储布局。在

https://software.intel.com/en-us/node/520775


或者仍然可以使用Fortran API。因为改变矩阵布局等同于矩阵转置。然而,你用错误的方式计算了转置后的C。在

您的代码在col major中计算C,但是您需要一个C in row major。因此,您需要使用fortranapi计算col major中的C^T,这相当于row major中的C^T。在

应该是的

C^T = B^T * A^T

基本上你需要交换A和B,以及相应的参数。关于这些参数的更多细节,您可以看到这个答案。在

Transpose matrix multiplication in cuBLAS howto

相关问题 更多 >

    热门问题