如何使用 blas 以最佳方式转置矩阵?

Posted

技术标签:

【中文标题】如何使用 blas 以最佳方式转置矩阵?【英文标题】:How to transpose a matrix in an optimal way using blas? 【发布时间】:2011-12-08 17:42:08 【问题描述】:

我正在做一些计算,并对不同 BLAS 实现的力量和弱点进行一些分析。但是我遇到了一个问题。

我正在测试 cuBlas,在 GPU 上执行 linAlg 似乎是个好主意,但有一个问题。

cuBlas 实现使用列优先格式,由于这不是我最终需要的,我很好奇是否有一种方法可以使 BLAS 进行矩阵转置?

【问题讨论】:

"....因为这最终不是什么......"。少了几个字? 从 CUDA 5.0 开始,cuBLAS 有了cublas<t>geam,这是一个非常有效的矩阵转置例程。有关实现此解决方案并使用 Thrust 将性能与矩阵转置进行比较的完整代码,请参阅What is the most efficient way to transpose a matrix in CUDA?。 【参考方案1】:

BLAS 没有内置矩阵转置例程。CUDA SDK 包含一个矩阵转置示例和一篇讨论执行转置的最佳策略的论文。您最好的策略可能是使用带有转置输入版本调用的 CUBLAS 的行主输入,然后在列主中执行中间计算,最后使用 SDK 转置内核执行转置操作。


编辑添加了 CUBLAS 在 CUBLAS 版本 5 中添加了一个转置例程,geam,它可以在 GPU 内存中执行矩阵转置,并且应该被视为您使用的任何架构的最佳选择。

【讨论】:

以上是关于如何使用 blas 以最佳方式转置矩阵?的主要内容,如果未能解决你的问题,请参考以下文章

如何以特定方式对我的数据框进行分组和转置?

如何将 Argb32 加载到特征矩阵中以获得最佳性能?

如何使用 SSE 更有效地将 A*B^T 或 A^T*B^T(T 表示转置)矩阵相乘?

如何从表中选择数据以转置或交叉表方式输出?

如何使用加速框架执行矩阵逆运算?

矩阵倒置