[CUDA] NVCC -gencode

코딩/CUDA 2014. 10. 8. 10:14

nvcc 사용시 -gencode 옵션은 -arch 옵션과 -code 옵셥을 합친 것이다.

 

-arch 옵션: '-arch=compute_20'과 같이 사용

생성될 PTX 코드의 버전을 지정        -> 'compute_XX'는 virtual architecture를 의미함

PTX 코드는 GPU 드라이버에서 JIT (Just-In-Time) 컴파일을 통해 실행이 가능함

(SDK가 필요 없다는 장점이 있음)

-code 옵션: '-code=sm_20'과 같이 사용

생성될 binary 코드(SASS)의 버전을 지정     -> 'sm_XX'는 real architecture를 의미함

binary 코드는 별도의 JIT 컴파일 과정 없이 지정된 architecture에서 곧바로 실행이 가능

(컴파일 시간이 짧다는 이점이 있음) 

-gencode 옵션: '-gencode arch=compute_20,code=sm_20'과 같이 사용

 

그렇다면 다음과 같이 한번에 여러 -gencode 옵션을 줄 때의 이점이 무엇인가.....하면....

-gencode arch=compute_20,code=sm_20
-gencode arch=compute_20,code=sm_21
-gencode arch=compute_21,code=sm_21

 

여러 버전의 PTX, binary 코드를 미리 생성해두어 상위 아키텍쳐에 대한 '호환성'을 높일 수 있다는 것임.

대신 옵션 수에 비례하여 실행 코드의 크기가 커진다는 단점도 있음.

 

(참고: http://stackoverflow.com/questions/17599189/what-is-the-purpose-of-using-multiple-arch-flags-in-nvidias-nvcc-compiler)