오늘 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 예
귀하의 업데이트가 귀하의 질문과 어떤 관련이 있는지 이해할 수 없습니다. 그리고 나는 무슨 일이 일어나고 있는지에 대한 당신의 해석이 정확하다고 믿지 않습니다. 그것은 PTX가 없다는 것이 아니라,'cuobjdump'가 장치 링크 파일의 출력에서 아무것도 찾지 못한다는 것입니다. 이것은 장치를 분해하는 방법을 이해합니다. – talonmies
@talonmies 편집 내용이 혼란에 빠졌기 때문에 질문을 다시 썼습니다. 초기 질문은 틀린 가정에 근거한 것 같습니다. 하지만 cuobjdump는 해체가 아닌 실제 PTX를 덤프합니다. 드라이버의 JIT 컴파일러는 새로운 아키텍처에서 CUDA 코드를 실행하려면 PTX가 필요합니다. – Joe
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에서 생성 된 컴파일 순서를 자세히 연구하고 복제하십시오. –