如何使用 CUDA 优化自身转置的矩阵乘法?

How to optimize matrix multiplication on itself transposed using CUDA?

我有一个浮点数矩阵 (M),大约有 17000 x 10000 个值。我需要每行乘以每行的标量乘法(因此 17000 x 17000 个值),也可以形式化为 M 乘以转置后的 M。

我是 CUDA 的新手,所以我可以为每个矩阵元素使用一个线程编写一个“天真的”解决方案,但它可能是次优的计算速度。

或者,我可以使用类似 cublasSgemm(...) 的东西,将 M 转置 M 作为参数,但转置是一个额外的操作,不应该是必要的,并且额外的内存使用量也相当可观(我只有一个 4 GB 的免费视频卡)。

请帮助我找到最佳(或至少更好)的解决方案。

如果这很重要,我确实事先知道列数(字面上使用 #define numCol 10001),但行数可能会有所不同,因为这些行是从多个 .csv 文件中解析出来的。

您描述的是对称排名更新。有一系列函数专门用于此,例如cublasSsyrk 用于浮动。 https://docs.nvidia.com/cuda/cublas/index.html#cublas-lt-t-gt-syrk

请注意,那些只更新下三角矩阵或上三角矩阵,因为另一半是多余的