如何将矩阵连续存储在GPU内存中并在需要时使用?

时间:2013-03-18 14:55:21

标签: c++ cuda thrust

我正在尝试通过CUDA并行化一些函数,这被多次调用。每次它处理相同的矩阵。我想将这个矩阵存储在GPU内存中,当调用函数时,我想将向量上传到GPU并将其乘以矩阵并返回结果。我更喜欢C ++模板风格,因此推力具有更高的优先级。

请向我推荐一些功能,如果可能的话,请稍微说明样品。 我不提供代码不是因为它是秘密,而是因为它的复杂性和巨大的尺寸。

1 个答案:

答案 0 :(得分:1)

对于推力,device_vector,device_ptr,ect,就是你要找的。

From thrust::device_vector to raw pointer and back?

但为了有效地编程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;
}
};