cudaMemcpy를 실행하기 위해 .cpp 파일에서 호출되는 메소드를 작성했습니다. 방법은 다음과 같습니다 :cudaMemCpy returned cudaInvalidData
void copy_to_device(uint32_t *host, uint32_t *device, int size)
{
cudaError_t ret;
ret = cudaMemcpy(device, host, size*sizeof(uint32_t), cudaMemcpyHostToDevice);
if(ret == cudaErrorInvalidValue)
printf("1!\n");
else if(ret == cudaErrorInvalidDevicePointer)
printf("2!\n");
else if(ret == cudaErrorInvalidMemcpyDirection)
printf("3!\n");
}
내 .cpp 파일은 다음과 같이 그것을 호출
는uint32_t *input_device;
device_malloc(input_device, INPUT_HEIGHT*INPUT_WIDTH);
uint32_t *oneDinput = TwoDtoOneD(input, INPUT_HEIGHT, INPUT_WIDTH);
copy_to_device(oneDinput, input_device, INPUT_HEIGHT*INPUT_WIDTH);
TwoDtoOneD가하는 모든 것은 2 차원 배열에 걸릴 및 1 차원 배열로 변환하고 그것을 돌려. 시도 할 때마다 copy_to_device
메서드를 사용하면 cudaErrorInvalidValue을 반환하며 이는 NVIDIA 웹 사이트에 잘 설명되어 있지 않습니다. 여러분은이 오류의 원인이되는 함수에 전달할 매개 변수에 무엇이 잘못되었는지 알 수 있습니까? 커널 실행 중에 문제가 발생합니다. 더 자세한 내용이 필요하면 질문하십시오.
void device_malloc(uint32_t *buffer, int size)
{
cudaMalloc((void **) &buffer, size*sizeof(uint32_t));
}
@ Tae-SungShin 나는 싫지만, 나의 쿠다 코드에서, 나는 #을 포함하여 uint32_t를 정의한다. –