我正在尝试通过 CUDA 并行化某些功能,该功能被多次调用。每次它处理相同的矩阵。我想将此矩阵存储在 GPU 内存中,当调用函数时,我想将向量上传到 GPU 并将其乘以矩阵并返回结果。我更喜欢 C++ 模板风格,所以推力具有更高的优先级。
请向我推荐一些功能来做到这一点,如果可能的话,请推荐一些小的说明样本。我不提供代码不是因为它是一个秘密,而是因为它的复杂性和庞大的规模。
对于推力,您正在寻找的是 device_vector、device_ptr 等。
但为了高效地对 GPU 进行编程,我建议您也熟悉 CUDA 内存类型:
http://www.cvg.ethz.ch/teaching/2011spring/gpgpu/cuda_memory.pdf(pdf警告)
您正在寻找的内存类型是“全局内存”。请记住,所有这些内存都存储在 GPU 卡上,而不是 CPU 卡上,因此它只能用于内核和设备函数调用。
设备指针上的所有仿函数只需要使用设备标签进行编译(例如一元操作):
template <typename T>
struct square
{
__host__ __device__
T operator()(const T& x) const {
return x * x;
}
};