我用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);
我要求的太多了吗?
答案 0 :(得分:3)
mat-vec乘法是标准的BLAS操作。但是,您的数据类型不是标准数据类型(float
或double
)。因此,将数据转换为double
可能不是最佳选择,请使用gemv()
等BLAS例程并将结果转换回long long
。
或者,您可以创建自己的CUDA内核,或使用Thrust来避免编写内核代码,但性能会下降。你可以从this example开始,看看如何将一个矩阵逐行加到一个列向量中,这是mat-vec-mul操作的第二步,在你完成每一行之间的逐元素乘法之后矩阵和向量。