이것은 나를 미치게합니다. 왜 이런 일이 일어나고 있는지 나에게 알 수는 없다. 기본적으로, 나는 리눅스 (Nsight Eclipse 판)에서 완전히 잘 작동하는이 코드를 가지고있다. Visual Studio 2013 프로젝트를 만들고 구성하여 Windows와 호환되도록했습니다."debug"구성을 실행하면 cudaMemCpy2d 오류 (cudaErrorInvalidValue)가 발생합니다.
이 시점에서 모든 것이 문제가없는 코드로 컴파일됩니다. "Release"구성을 사용하면 잘 실행됩니다. 그러나 디버그 구성을 시도하자마자 아래 부분이 cudaErrorInvalidValue
오류로 중단됩니다.
문제점을 최적화 플래그로 추적했습니다. 최적화를 비활성화하면 충돌이 발생합니다. /O2
또는 /O1
을 사용하면 코드가 정상적으로 실행됩니다.
다시 말하지만 최적화가 있거나없는 Linux에서도 잘 작동합니다. Windows 최적화에서 무엇이 제공되는지 궁금합니다. 도움이된다면 CUDA 6.5 및 정적 라이브러리 링크를 사용하여 Visual Studio 2013 (업데이트 4)을 사용하고 있습니다. (Linux의 경우 CUDA 6.5이지만 동적 라이브러리 링크).
전체 코드는 here입니다. (이 간단한 중단 점을하는 것보다 좀 더 노력을했다지만!)
size_t hostPitch = (size_t)getHostPitch();
size_t devicePitch = (size_t)getDevicePitch();
size_t cal = (size_t)(width * numChannels * sizeof(T));
size_t h = (size_t)height;
cudaError_t eCUDAResult = cudaMemcpy2D((void*)this->hostData, hostPitch, (const void*)this->deviceData, devicePitch, cal, h, cudaMemcpyDeviceToHost);
디버깅에 시간을 할애하는 것이 얼마나 쉬운 믿을 수 없어 http://stackoverflow.com/help/mcve) 질문 자체. 링크 한 것은 ("전체 코드") 완전한 코드가 아닙니다. 그것은 헤더 파일입니다. –
@RobertCrovella 그러나이 프로젝트를 통해 최소한의 작업 예제를 만드는 것은 매우 어렵습니다. (특정 종류의 데이터에서만 오류가 발생합니다 ... 어떤 제안입니까? – M2X
@RobertCrovella "전체"코드는 HoG 기능을 계산하는 최소 라이브러리입니다 저장소는 이미 사용 가능하며, 헤더 파일은 실제로 헤더 파일이 아닙니다. 템플릿 클래스의 구현입니다. – M2X