2015-01-09 6 views
2

동적 병렬 처리를 지원해야하므로 cc 5.2로 새로운 GPU GeForce GTX 980으로 전환했습니다. 그러나 프로그래밍 가이드의 간단한 코드조차도 컴파일 할 수 없었습니다. 나는 여기에 그것을 제공하지 않을 것입니다 (필요하지 않습니다, 단지 글로벌 커널이 또 다른 글로벌 커널을 호출합니다).동적 병렬 처리 (CUDA)가 포함 된 컴파일 .cu 파일

1) VS2013을 코딩에 사용합니다. property pages -> CUDA C/C++ -> device, 나는 compute_35,sm_35code generation 속성을 변경하고, 여기에 출력됩니다 :이 컴파일을위한 또 다른 옵션 필요가 있다고, 나는 생각

1>------ Build started: Project: testCublas3, Configuration: Debug Win32 ------ 
1> Compiling CUDA source file kernel.cu... 
1> 
1> C:\programs\misha\cuda\Projects\test projects\testCublas3\testCublas3>"C:\Program  Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\bin\nvcc.exe" -gencode=arch=compute_35,code=\"sm_35,compute_35\" --use-local-env --cl-version 2013 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\include" -G --keep-dir Debug -maxrregcount=0 --machine 32 --compile -cudart static -g -DWIN32 -D_DEBUG -D_CONSOLE -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MDd " -o Debug\kernel.cu.obj "C:\programs\misha\cuda\Projects\test projects\testCublas3\testCublas3\kernel.cu" 
1>C:/programs/misha/cuda/Projects/test projects/testCublas3/testCublas3/kernel.cu(13): error : kernel launch from __device__ or __global__ functions requires separate compilation mode 
1> kernel.cu 
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\BuildCustomizations\CUDA 6.5.targets(593,9): error MSB3721: The command ""C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\bin\nvcc.exe" -gencode=arch=compute_35,code=\"sm_35,compute_35\" --use-local-env --cl-version 2013 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v6.5\include" -G --keep-dir Debug -maxrregcount=0 --machine 32 --compile -cudart static -g -DWIN32 -D_DEBUG -D_CONSOLE -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /Zi /RTC1 /MDd " -o Debug\kernel.cu.obj "C:\programs\misha\cuda\Projects\test projects\testCublas3\testCublas3\kernel.cu"" exited with code 2. 

: -rdc=true,하지만 내가 VS2013에서 설정 할 수있는 I 찾지 못함 .

2) code generation 속성을 compute_52,sm_52으로 설정하면 오류 : Unsupported gpu architecture 'compute_52'이 발생합니다. 하지만 제 cc는 5.2입니다. 그래서 최대 3.5cc의 코드를 컴파일 할 수 있습니까? 항목 1에 관해서

덕분

+2

지원되지 않는 아키텍처 메시지와 관련하여 cc5.2를 지원하기 위해 CUDA 6.5에 대한 업데이트가 제공되었습니다. [여기] (https://developer.nvidia.com/cuda-downloads-geforce-gtx9xx)입니다. 설치하면 특정 오류가 사라집니다. –

+0

감사합니다. 이미 다운로드 중입니다. 첫 번째 질문은 어떻습니까? 어떻게 든 -rdc = true 옵션을 포함해야한다는 것이 사실입니까? –

+1

예, 별도의 컴파일 및 연결을 사용해야하며 추가 라이브러리가 필요합니다. 아마도 cuda 샘플에있는 VS 프로젝트 파일 중 하나, 예를 들어 [장치 cublas 샘플] (http://docs.nvidia.com/cuda/cuda-samples/index.html#simpledevlibcublas-gpu)을 확인해야합니다. -device-api-library-functions - cuda-dynamic-parallelism-). –

답변

2

, 동적 쿠다 병렬 separate compilation and linking (-rdc=true) 필요뿐만 아니라 장치 cudart 라이브러리 (-lcudadevrt)에서의 링크. 또한 CUBLAS를 사용하는 동적 병렬 처리는 장치 CUBLAS 라이브러리 (-lcublas_device)에서 연결해야합니다. 시각적 인 스튜디오 프로젝트에서 이러한 모든 것들이 어디에 있어야 하는지를 정의하는 가장 간단한 방법은 the device cublas sample에 대한 시각적 인 스튜디오 프로젝트를 보는 것부터 시작하는 것입니다.

GTX 980 컴퓨팅 기능 5.2가 인식되지 않는 이유는 here 인 cuda 6.5 툴킷에 대한 최신 업데이트가 필요하기 때문입니다.