2011-10-08 8 views
11

저는 Compute_Capability 2.0 장치 (GTX460)와 함께 CUDA 4.0 arch.를 사용합니다. 'cubin'과 'ptx'파일의 차이점은 무엇입니까? cubin이 gpu의 기본 코드이므로이 코드가 arch라고 생각합니다. ptx는 JIT 컴파일을 통해 Fermi 기기 (예 : Geforce GTX 460)에서 실행되는 중간 언어입니다. cu 소스를 컴파일 할 때 ptx 또는 cubin 대상 중에서 선택할 수 있습니다. 큐빈 파일을 원한다면 "code = sm_20"을 선택합니다. 하지만 ptx 파일을 원한다면 "code = compute_20"을 사용합니다. 맞습니까?NVIDIA NVCC 및 CUDA : Cubin 대 PTX

+2

'.cubin'은 CUDA 바이너리이며'.ptx'는'ptxas' 어셈블러에 전달되는 CUDA 어셈블러 소스 (텍스트)입니다. –

답변

17

대상을 지정할 장치 (-code)를 제어하는 ​​옵션과 함께 컴파일 단계 (-ptx-cubin)를 선택하는 옵션이 혼합되어 있으므로 설명서를 다시 읽어야합니다.

NVCC는 NVIDIA 컴파일러 드라이버입니다. -ptx-cubin 옵션은 위상 지정 옵션없이 편집의 특정 단계를 선택하는 데 기본적으로 사용됩니다. nvcc는 입력에서 실행 파일을 생성하려고 시도합니다. 대부분의 사람들은 -c 옵션을 사용하여 nvcc가 나중에 기본 플랫폼 링커가 실행 파일에 링크 할 객체 파일을 생성하도록합니다. -ptx-cubin 옵션은 드라이버 API를 사용하는 경우에만 유용합니다. 중간 단계에 대한 자세한 내용은 CUDA Toolkit을 설치할 때 설치된 nvcc 매뉴얼을 참조하십시오.

  • 출력은 -ptx에서 일반 텍스트 PTX 파일입니다. PTX는 NVIDIA GPU를위한 중간 어셈블리 언어로 아직 완전히 최적화되지 않았고 나중에 장치 고유 코드로 어셈블됩니다 (예 : 다른 장치의 레지스터 수가 다르므로 완벽하게 최적화 된 PTX가 잘못 될 수 있음).
  • -cubin의 출력은 하나 이상의 장치 별 이진 이미지와 (선택적으로) PTX를 포함 할 수있는 굵은 이진 파일입니다.

귀하가 참조한 -code 인수는 완전히 다른 목적을 가지고 있습니다. 몇 가지 예제가 들어있는 nvcc 문서를 확인해 보시기 바랍니다. 일반적으로 -gencode 옵션을 사용하는 것이 좋습니다. 더 많은 제어가 가능하고 여러 장치를 하나의 바이너리로 타겟팅 할 수 있기 때문입니다. 계산 능력이 xx 모든 장치를 (즉, arch= 비트의) 대상으로 최종 지방 바이너리로 sm_yy 및 sm_zz에 대한 PTX (code=compute_xx)뿐만 아니라 장치 특정 바이너리를 포함 할

  • -gencode arch=compute_xx,code=\'compute_xx,sm_yy,sm_zz\' 원인 NVCC : 빠른 예를 들어 .