1
我有一个很简单的问题,但我不明白。我正在使用4.2 cuda。cuda内存分配cudaMalloc
我有以下代码:
在我cudaClass.h:
unsigned char *dev_trimapExpanded;
在我cudaClass.cpp:
void cudaClass::expansionTrimap() {
printf("dev_trimapExpanded %d before function \n", dev_trimapExpanded);
//Call cuda function
cudaError_t cudaStatus = expansionTrimapCuda(dev_trimapExpanded, width, height);
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "expansionTrimapCuda failed!\n");
}
printf("dev_trimapExpanded %d after function \n", dev_trimapExpanded);
}
在我的文件kernel.cu
我有:
cudaError_t expansionTrimapCuda(unsigned char *dev_trimapExpanded, size_t width, size_t height)
{
size_t size = width*height;
cudaError_t cudaStatus;
// Choose which GPU to run on, change this on a multi-GPU system.
cudaStatus = cudaSetDevice(0);
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaSetDevice failed! Do you have a CUDA-capable GPU installed?");
return cudaStatus;
}
printf("dev_trimapExpanded %d before cudaMalloc \n", dev_trimapExpanded);
cudaStatus = cudaMalloc((void**)&dev_trimapExpanded, size);
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaMalloc dev_trimapExpanded failed!");
return cudaStatus;
}
printf("dev_trimapExpanded %d after cudaMalloc \n", dev_trimapExpanded);
return cudaStatus;
}
输出结果是:
dev_trimapExpanded 0 before function
dev_trimapExpanded 0 before cudaMalloc
dev_trimapExpanded 93323264 after cudaMalloc
dev_trimapExpanded 0 after function
我指针的地址是0的cudaMalloc电话这是正常的,但以前我不明白为什么地址的功能后为0。指针dev_trimapExpanded的地址不应该改变。 cudaMalloc的范围仅限于函数中吗?内存也不是免费的。我如何在不同的内核调用之间保留我的全局内存跟踪?
好吧,我知道这很简单。我忘记了我正在直接修改指针地址。 – Seltymar