gpt4 book ai didi

templates - 使用 C++ 模板分配 CUDA 设备内存时发出警告

转载 作者:行者123 更新时间:2023-12-02 15:39:00 24 4
gpt4 key购买 nike

我声明了以下模板以缩短代码:

template <typename T>
void allocateGPUSpace(T* ptr, int size){

cudaMalloc((void**)&ptr,size * sizeof(T));
}

此外,我使用的模板如下:

float* alphaWiMinusOne;

allocateGPUSpace<float>( alphaWiMinusOne,numUnigrams);

但是,当我编译代码时,VS 2008 给出警告

 warning: variable "alphaWiMinusOne" is used before its value is set

uninitialized local variable 'alphaWiMinusOne' used

cuda 不理解 C++ 中的模板吗?天哪,这对 nvidia 来说是必须要做的

最佳答案

首先,该警告不是来自 CUDA,而是来自主机编译器(因此是 Microsoft 的 C++ 编译器或 GCC,具体取决于您的平台),这是一个完全有效的警告。你犯了和你一样的错误here ,并且此代码不会像您希望的那样工作,因为您正在传递指针以按值而不是按引用进行操作。你的代码应该是这样的:

template <typename T> 
void allocateGPUSpace(T ** ptr, int size){
cudaMalloc((void**)ptr, size * sizeof(T));
}

这样的调用:

float * alphaWiMinusOne;
allocateGPUSpace<float>(&alphaWiMinusOne, numUnigrams);

或许

template <typename T> 
T * allocateGPUSpace(int size){
T * ptr;
cudaMalloc((void**)&ptr, size * sizeof(T));
return ptr;
}

然后

float * alphaWiMinusOne = allocateGPUSpace<float>(numUnigrams);

使用其中任何一个都可以消除编译器警告,并且代码可以正常工作。作为风格说明,这将是一个相当短视的辅助函数设计,不包括任何错误检查......

关于templates - 使用 C++ 模板分配 CUDA 设备内存时发出警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11554458/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com