如何使用 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 以最佳方式转置矩阵?的主要内容,如果未能解决你的问题,请参考以下文章