我目前必须执行 128 个独立的顺序矩阵向量 CUBLAS 操作。所有的矩阵和向量都是不同的。每个独立矩阵紧跟在下一个矩阵之后存储在内存中,并且向量同样连续存储在内存中(全部以行优先形式)。
更多上下文:矩阵为 (2048 X 8),向量长度为 2048。输出都是独立的。因为我有超级矩阵,所以我有以下内容:
matrix[(2048*128)x8]
vector[(2048*128)x1]
output[(8*128)x1]
使用cublasSgemv我首先对每个迷你矩阵进行转置,然后将结果添加(而不是替换)到内存中:
cublasSgemv(*handle, CUBLAS_OP_T, Bdim, Adim, scale1, d_matrix + offset1, Bdim, d_vector + offset2, 1, scale2, out + offset3, 1);
我正在打 128 个这样的电话,我想在一个电话中进行。
分析器显示进行这些多次调用会显着降低性能。进行多个矩阵向量运算的最佳方法是什么?有没有办法将它们批量处理成一个快速调用?
流是最好的方法还是有一些方法可以用相关的偏移量进行调用(索引到我的矩阵和向量数组)?唯一其他有效的选择似乎是使用 CUSPASE 调用并将所有矩阵粘贴在对角线上。
注意:对于这个特定问题,我对在 gemv 调用中获得正确的转置或行/列主要排序不感兴趣。