나는 아주 간단한 질문이 있지만 그것을 얻지는 못한다. 나는 4.2 쿠다와 함께 일하고있다. 내 cudaClass.h에cuda memory allocation cudaMalloc
:
나는 다음과 같은 코드가
unsigned char *dev_trimapExpanded;
을 내 cudaClass.cpp에 내 파일 kernel.cu에서
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);
}
내가 가진 :
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
내 포인터의 주소는 정상입니다 cudaMalloc 호출하기 전에 0하지만 주소가 함수 뒤에 0을 왜 이해가 안 돼요. dev_trimapExpanded 포인터의 주소가 변경되어서는 안됩니다. 함수에서만 cudaMalloc의 범위가 맞습니까? 기억은 자유롭지 않습니다. 서로 다른 커널 호출간에 내 전역 메모리의 추적을 유지하려면 어떻게해야합니까?
오른쪽, 나는 그것이 단순한 알고 있었다. 포인터 주소를 직접 수정하는 것을 잊어 버렸습니다. – Seltymar