并行乘法向量矩阵
Parallel multiplication vector-matrix
我正在用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操作。然而,您的数据类型不是标准的(float
或double
)。因此,将数据转换为double
可能不是最佳选择,使用BLAS例程(如gemv()
)并将结果转换回long long
。
或者你可以创建自己的CUDA内核,或者使用Thrust来避免编写内核代码,但会导致一些性能下降。您可以从这个示例开始了解如何将矩阵逐行求和为列向量,这是mat-vec-mul操作的第二步,在您完成了矩阵和向量之间的逐元素乘法之后。
相关文章:
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 如何使用向量的template_back函数
- 使用并行参数向量调用元素向量的成员函数
- 检查两个向量是否并行的最有效方法
- 使用异步/期货并行和并发计算向量的范数
- 并行算法将向量的元素分配到另一个元素的元素
- C++:快速/并行计算两个"std::vector<double>"向量之间的L1距离
- OpenMP 与向量的向量并行
- 使用多个线程的并行向量乘法比顺序乘法需要更长的时间
- 并行程序中的多图或排序向量
- 使用异步C++进行向量的并行乘法
- 在OpenMP并行区域中使用向量push_back是否安全
- 在并行追加时,使用向量列表和向量的向量对性能的影响
- 并行乘法向量矩阵
- 在OPENMP中并行化矩阵向量的加法
- 多个排序向量与固定线程数的并行交集