首页 文章

CUDA计算机库克罗内克产品[关闭]

提问于
浏览
-1

我有一个应用程序,需要我计算一些2D矩阵的大型Kronecker产品,并将结果乘以大型2D矩阵 . 我想在CUDA中的GPU上实现它,并且更愿意为此使用调优的库实现,而不是编写我自己的(当然不是最理想的)Kronecker产品 . 我有使用CUDA,BLAS,LAPACK等的经验,但不幸的是在常见的GPU实现(岩浆,cuBLAS,cula等)中没有kron(A,B)功能 .

我找到了一个适合我需求的图书馆 . (关于SO的最接近的问题是parallel Kronecker tensor product on gpu using CUDA,但这看起来像是一个特殊情况的自定义解决方案,它赢得了't suit my needs. I' m,寻找能在最常见情况下工作的Kronecker产品 . )

我已经读过BLAS中的DGEMM可用于实现Kronecker产品 . 是否有使用DGEMM(或其单一/复杂变体)实现Kronecker产品的标准算法?在我看来,唯一的方法是在一个循环中调用DGEMM并将结果平铺到一个更大的矩阵中,这看起来效率不高 . 或者,是否有人知道可能提供我正在寻找的内容的另一个实现或论文?

1 回答

  • 3

    您链接的论文正在利用以下身份

    enter image description here

    无需明确计算Kronecker产品,而是将其替换为3级BLAS gemm调用 . 如果你的问题是矩阵方程,那么你可以用这种方式使用gemm,否则它对你没用 .

    可能有用的另一个身份是使用外部产品计算Kronecker产品(第2级BLAS IIRC中的等级1更新):

    enter image description here

    再次注意,结果矩阵的排序与矩阵 AB 的Kronecker乘积不同 .

    我不知道用于计算一对任意大小矩阵的真正Kronecker积的CUDA库 . 它应该是一个内存限制的问题,所以即使是一种相对天真的方法,它可以合并负载并重新使用尽可能多的数据,但应该非常接近峰值带宽 .

相关问题