2016-06-11 2 views
0

question 에서 PTX는 다양한 아키텍처에서 이식 가능한 것으로 알려져 있습니다. 나는 이것이 이전 예 : sm_20에서 sm_30으로 진행될 수 있다고 믿는다. sm_20에서 sm_10으로 이동하는 특별한 사용 사례가 있습니다. 그래서 sm_20 타겟 용으로 컴파일 된 PTX로 sm_10 타겟 용 cubin과 같은 바이너리를 생성 할 수 있습니다.이전 타겟에 대한 CUDA PTX 컴파일 바이너리

답변

4

특정 아키텍처 (즉, sm_* 플래그 사용)에 대해 컴파일 할 때 PTX는 호환 호환되지만 이전 버전과 호환되지 않습니다. 이를 극복하는 한 가지 방법은 특정 가상 아키텍처를 지정하고 대상으로 삼을 모든 실제 아키텍처에 대한 이진 이미지를 생성하는 것입니다. 예를 들어,

nvcc -arch=compute_20 -code=sm_20,sm_30,sm_35 

은 컴퓨팅 2.0 가상 아키텍처에 대해 PTX를 생성하고 2.0, 3.0 및 3.5 장치 용 이진 이미지를 생성합니다. compute 1.0은 CUDA 7.0부터 사용되지 않습니다. 이를 fat binary라고합니다.

실제 아키텍처와 가상 아키텍처의 차이점은 code generation options을 참조하십시오.


편집 : 사실, 그것은 JIT 컴파일러가 개입하고 당신을 위해 구축 한 것이기 때문에 중복 조금 -arch=compute_35-code=sm_35을 지정할 수 있습니다. 당신의 뚱뚱한 바이너리에서 약간의 여분의 지방을 신경 쓰지 않는 한, 나는 그다지 중요하지 않다고 생각합니다.

EDIT2 : code해야 PTX는 이전 버전과 호환되지 않기 때문에보다 크거나 arch 동일합니다. 그 어리석은 실수를 지적한 Robert Crovella에게 감사드립니다.

+0

@RobertCrovella 나는 그것을 썼다고 믿을 수 없다. 마치 제가 처음 쓴 문장을 읽지는 않았지만 거의 마치입니다. 내 어리석은 실수를 지적 해 주셔서 고마워요. – Tim

관련 문제