首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用C++模板分配CUDA设备内存时出现警告

使用C++模板分配CUDA设备内存时出现警告
EN

Stack Overflow用户
提问于 2012-07-19 13:29:00
回答 1查看 1.2K关注 0票数 2

为了使代码更简短,我声明了以下模板:

代码语言:javascript
复制
template <typename T>
void allocateGPUSpace(T* ptr, int size){

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

此外,我按如下方式使用该模板:

float* alphaWiMinusOne;

allocateGPUSpace<float>( alphaWiMinusOne,numUnigrams);

然而,当我编译代码时,VS2008给出了警告

代码语言:javascript
复制
 warning: variable "alphaWiMinusOne" is used before its value is set

代码语言:javascript
复制
uninitialized local variable 'alphaWiMinusOne' used

cuda不理解C++中的模板吗?天哪,这将是英伟达的必经之路。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-19 14:47:04

首先,该警告不是来自CUDA,而是来自宿主编译器(因此,根据您的平台,是微软的C++编译器还是GCC ),这是一个完全有效的警告。您犯了与here相同的错误,并且此代码不会像您希望的那样工作,因为您传递的是按值操作的指针,而不是按引用操作的指针。你的代码应该是这样的:

代码语言:javascript
复制
template <typename T> 
void allocateGPUSpace(T ** ptr, int size){   
    cudaMalloc((void**)ptr, size * sizeof(T)); 
} 

调用如下所示:

代码语言:javascript
复制
float * alphaWiMinusOne;
allocateGPUSpace<float>(&alphaWiMinusOne, numUnigrams);

或者也许

代码语言:javascript
复制
template <typename T> 
T * allocateGPUSpace(int size){
    T * ptr;   
    cudaMalloc((void**)&ptr, size * sizeof(T));
    return ptr;
} 

然后

代码语言:javascript
复制
float * alphaWiMinusOne = allocateGPUSpace<float>(numUnigrams);

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

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11554458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档