以下示例问题:
#include <iostream>
using namespace std;
__device__ __constant__ float* data;
template<class T> void allocOnly(T* deviceDest, size_t numElem)
{
cudaError_t errCode = cudaMalloc((void**)&deviceDest, numElem*sizeof(T));
if(errCode != cudaSuccess)
cout << "Got error with code " << errCode << endl;
}
int main()
{
float* test(0);
allocOnly<float>(test,10);
cout << "test = " << test << endl;
float* test2(0);
cudaError_t errCode = cudaMalloc((void**)&test2, 10*sizeof(float));
if(errCode != cudaSuccess)
cout << "Got error with code " << errCode << endl;
cout << "test2 = " << test2 << endl;
return 0;
}
用nvcc test.cu -o testBin
编译
返回
test = 0
test2 = 0x310100
为什么通过模板函数调用时test没有被修改,cudaMalloc应该修改为指向新分配的设备内存的指针!
最佳答案
指针未被修改,因为函数 allocOnly
中的 cudaMalloc
正在将内存分配给函数 deviceTest
的参数仅分配
。您可以修改函数 allocOnly
来分配内存,如下所示:
template<class T> void allocOnly(T** deviceDest, size_t numElem)
{
cudaError_t errCode = cudaMalloc((void**)deviceDest, numElem*sizeof(T));
if(errCode != cudaSuccess)
cout << "Got error with code " << errCode << endl;
}
主函数内部:
int main()
{
float* test(0);
allocOnly<float>(&test,10);
cout << "test = " << test << endl;
.
.
.
}
关于c++ - 在模板函数内部调用时,cudaMalloc 不修改返回指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14715584/