2016-09-20 2 views
-1

오늘 GTX 1080 (CUDA 7.5에서 직접 지원하지 않는 Compute Capability 6.1)에서 분리 가능한 컴파일을 사용하는 실행 파일을 실행하려고 시도했지만 실행할 수 없었습니다. 첫 번째 CUDA 호출이 실패하면됩니다.파스칼 카드에서 CUDA 코드가 실패했습니다 (GTX 1080)

nvcc -dc --gpu-architecture=compute_52 -m64 main.cu -o main.dc.obj 
nvcc -dlink --gpu-architecture=compute_52 -m64 -lcublas_device main.dc.obj -o main.obj 
link /SUBSYSTEM:CONSOLE /LIBPATH:"%CUDA_PATH%\lib\x64" main.obj main.dc.obj cudart_static.lib cudadevrt.lib cublas_device.lib 

그리고 작업 (출력을 사용하여 구축하면 나는 (심지어 CUBLAS를 사용하지 않는)

#include <cuda_runtime_api.h> 
#include <cstdio> 

__global__ void foo() 
{ 
} 

int main(int, char**) 
{ 
    void * data = nullptr; 
    auto err = cudaMalloc(&data, 256); 
    printf("%s\n", cudaGetErrorString(err)); 
    return 0; 
} 

은 (출력 "알 수없는 오류")를 실패하는이 간단한 프로그램으로, CUBLAS까지를 추적했다 "오류") 내장

nvcc -dc --gpu-architecture=compute_52 -m64 main.cu -o main.dc.obj 
nvcc -dlink --gpu-architecture=compute_52 -m64 main.dc.obj -o main.obj 
link /SUBSYSTEM:CONSOLE /LIBPATH:"%CUDA_PATH%\lib\x64" main.obj main.dc.obj cudart_static.lib cudadevrt.lib 
쿠다 8 릴리스 후보를 사용하여 구축하더라도

compute_61를 사용하는 경우 대신, 그것은 여전히 ​​한 cublas_device.lib이 링크로 실패하지 않습니다. simpleDevLibCublas

+0

귀하의 업데이트가 귀하의 질문과 어떤 관련이 있는지 이해할 수 없습니다. 그리고 나는 무슨 일이 일어나고 있는지에 대한 당신의 해석이 정확하다고 믿지 않습니다. 그것은 PTX가 없다는 것이 아니라,'cuobjdump'가 장치 링크 파일의 출력에서 ​​아무것도 찾지 못한다는 것입니다. 이것은 장치를 분해하는 방법을 이해합니다. – talonmies

+0

@talonmies 편집 내용이 혼란에 빠졌기 때문에 질문을 다시 썼습니다. 초기 질문은 틀린 가정에 근거한 것 같습니다. 하지만 cuobjdump는 해체가 아닌 실제 PTX를 덤프합니다. 드라이버의 JIT 컴파일러는 새로운 아키텍처에서 CUDA 코드를 실행하려면 PTX가 필요합니다. – Joe

+1

Windows에서 코드를 빌드 할 때 지원되는 방법은 Visual Studio를 사용하는 것입니다. 제 제안은 CUDA 8RC를 사용하고 [simpleDevLibCublas 샘플 프로젝트]를 실행하는 것입니다 (http://docs.nvidia.com/cuda/cuda-samples/index.html#simpledevlibcublas-gpu-device-api-library-functions-- cuda-dynamic-parallelism-). 설정에서 올바르게 실행되면 VS에서 생성 된 컴파일 순서를 자세히 연구하고 복제하십시오. –

답변

1

분석의 예는 실제 아키텍처의 집합 (sm_xx)을 위해 만들어진 것을 보여줍니다, 그리고 가상 아키텍처 (compute_xx), 새로운 카드에서 실행되지 않습니다 CUDA 7.5에 따라서, 예를 들어. 또한, CUDA 8RC의 동일한 예에는 하나의 추가 아키텍처 인 sm_60 만 포함됩니다. Which is only used by the P100. 그러나이 예제는 GTX 1080과 같은 6.1 카드에서도 실행됩니다. sm_61 아키텍처에 대한 지원은 CUDA 8RC에서도 Cublas에 포함되어 있지 않습니다.

따라서, 프로그램도 cublas_device를 연결하는 경우 --gpu-architecture=sm_60를 사용하여 구축하는 경우 작동하지만 것이다 것 --gpu-architecture=compute_60, --gpu-architecture=sm_61 또는 --gpu-architecture=compute_61하지 작동합니다. 또는 그 문제에 대해서는 --gpu-architecture=compute_xx입니다.

관련 문제