并行乘法向量矩阵

时间:2016-06-25 12:53:04

标签: c++ cuda thrust

我用C ++编码,我有一个Matrix和一个Vector必须乘以。两者都是我定义的类,都包装了1-D std::vector;数据类型为long long int 我已经用std::thread s对代码进行了并行化,但现在我想利用我的NVIDIA GPU并在CUDA中对代码进行编码。为了让我的手尽可能干净,你知道是否存在一个实现这种算法的库,我可以轻松使用吗?我已经看到有Thrust但是来自this example它似乎不是我正在寻找的东西,而是类似

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);

我要求的太多了吗?

1 个答案:

答案 0 :(得分:3)

mat-vec乘法是标准的BLAS操作。但是,您的数据类型不是标准数据类型(floatdouble)。因此,将数据转换为double可能不是最佳选择,请使用gemv()等BLAS例程并将结果转换回long long

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