template <typename T, std::size_t N>
void gpu_load(T (&data)[N])
{
    cudaMalloc((void**)data, N*sizeof(T));
}

我这样称呼它:
float data[2];
gpu_load(data);

但这是行不通的。我想一定是&和点的东西...

最佳答案

您不能只将指针转换为指针。数据的类型为T*,但是cudaMalloc需要一个void **

尝试这个:

cudaMalloc(static_cast<void**>(&d), N*sizeof(T));


注意新的“&”号。

编辑:按照注释中的建议添加了静态演员表。

关于c++ - cudaMalloc不适用于模板,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20436085/

10-11 04:23