cuda의 가상 아키텍처와 실제 아키텍처의 차이점 및 다양한 구성이 프로그램의 성능에 어떻게 영향을 미치는지 이해하려고 시도합니다.cuda의 가상 아키텍처와 실제 아키텍처의 차이
-gencode arch=compute_20,code=sm_20
-gencode arch=compute_20,code=sm_21
-gencode arch=compute_21,code=sm_21
...
다음 설명은 NVCC 교재 주어,
GPU 컴파일이 중간 표현 PTX ([...])를 통해 수행된다 A의 어셈블리로 간주 될 수있는 가상 GPU 아키텍처. 실제 그래픽 인 프로세서와 달리 이러한 가상 GPU는 응용 프로그램에 제공하는 기능 집합 또는 기능 집합으로 완전히 정의됩니다. 특히 가상 GPU 아키텍처는 (주로) 일반 명령어 세트를 제공하며 PTX 프로그램은 항상 텍스트 형식으로 표시되기 때문에 이진 명령어 인코딩은 문제가되지 않습니다. 따라서 nvcc 컴파일 명령은 항상 가상 중간 아키텍처를 지정하는 구조와 실제 GPU 아키텍처 을 실행하여 실행할 프로세서를 지정하는 두 가지 아키텍처를 사용합니다. 이러한 nvcc 명령이 유효하려면 실제 아키텍처는 가상 아키텍처의 구현 (어딘가 또는 다른 아키텍처)이어야합니다. 이에 대해서는 아래에서 더 자세히 설명합니다. 선택한 가상 아키텍처는 응용 프로그램에 필요한 GPT 기능에 대한 설명입니다. 가장 작은 가상 아키텍처를 사용하면 두 번째 nvcc 스테이지의 실제 아키텍처가 가장 넓은 범위 인 이 여전히 허용됩니다. 반대로 응용 프로그램에서 사용되지 않는 기능을 제공하는 가상 아키텍처를 지정하면 두 번째 nvcc 단계에서 지정할 수있는 가능한 GPU 집합이 불필요하게 제한됩니다.
그러나 성능이 다른 구성에 어떻게 영향을 주는지 (또는 실제 GPU 장치의 선택에만 영향을 미칠 수 있음) 여전히 얻지는 못합니다.
특히는 가상 GPU 아키텍처는 (크게) 일반적인 명령어 세트를 제공하고, PTX 프로그램이 항상 표시되기 때문에 바이너리 명령어 인코딩이 아닌 문제 : 특히,이 문장은 나에게 가장 혼란 텍스트 형식.