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/