并行乘法向量矩阵

Parallel multiplication vector-matrix

本文关键字:向量 并行      更新时间:2023-10-16

我正在用c++编码,我有一个Matrix和一个Vector必须乘以。它们都是我定义的类,都包含一维std::vector;数据类型为long long int
我已经用std::thread s并行化了代码,但现在我想利用我的NVIDIA GPU并在CUDA中编码乘法。为了让我的手尽可能干净,你知道是否存在一个库实现这样的算法,我可以很容易地使用?我已经看到了Thrust,但从这个例子中,它似乎并不是我要找的,而是像

这样的东西。
std::vector vec = ...;
std::vector mat = ...;
xyz::vector devVec = moveToGPU(vec);
xyz::matrix devMat = moveToGPU(mat);
xyz::vector devRes = multiply(devVec, devMat);
std::vector res = moveToCPU(devRes);

我要求太多了吗?

矩阵乘法是一个标准的BLAS操作。然而,您的数据类型不是标准的(floatdouble)。因此,将数据转换为double可能不是最佳选择,使用BLAS例程(如gemv())并将结果转换回long long

或者你可以创建自己的CUDA内核,或者使用Thrust来避免编写内核代码,但会导致一些性能下降。您可以从这个示例开始了解如何将矩阵逐行求和为列向量,这是mat-vec-mul操作的第二步,在您完成了矩阵和向量之间的逐元素乘法之后。