GPU의 참조 영역이 걱정할 가치가 있습니까?


9

합니까 참조의 지역 은 CPU 성능을 마찬가지로 GPU의 성능에 큰 차이로 메이크업을?

예를 들어, 200 개의 draw 명령을 GPU에 전송하면 각 명령의 데이터가 버퍼 / 텍스처 맵을 뛰어 넘는 대신 메모리에서 연속적인 경우 (잠재적으로) 눈에 띄는 차이가 있습니까?

부수적 인 질문 : GPU가 대부분의 리소스를 변경할 수 없도록하여 잘못된 공유 문제를 방지한다고 가정합니다. 그러나 그렇지 않은 경우 왜 스레드가 항상 네 개의 조각 작업을 수행합니까?

답변:


10

참조의 지역성이 중요합니까,하지만 당신은 걱정하지 않아도 그 정도 ... 당신은 절대 제어 할 수 없기 때문에.

OpenGL / DirectX를 사용하는 경우 일반적으로 메모리 레이아웃을 제한적으로 제어 할 수 있으며 나머지는 드라이버가 수행합니다. 예를 들어 인터리브 또는 비 인터리브 된 버텍스 데이터 사용과 같은 여러 버텍스 버퍼 레이아웃을 시도 할 수 있으며 데이터 / 드라이버 / GPU 성능에 따라 다릅니다. 프로파일 링하고 용도에 가장 적합한 것을 선택하십시오.

예를 들어 GPU Gems Pipeline 최적화에서 참조의 지역 성은 두 번 언급됩니다 .

비교적 순차적으로 정점 데이터에 액세스합니다. 최신 GPU는 정점을 가져올 때 메모리 액세스를 캐시합니다. 모든 메모리 계층에서와 같이 공간의 참조 영역은 캐시의 적중을 최대화하여 대역폭 요구 사항을 줄입니다.

그리고 두 번째

post-T & L 정점 캐시에 최적화합니다. 최신 GPU에는 가장 최근에 변환 된 정점의 결과를 저장하는 작은 선입 선출 (FIFO) 캐시가 있습니다. 이 캐시의 히트는 파이프 라인에서 이전에 수행 된 모든 작업과 함께 모든 변환 및 조명 작업을 저장합니다. 이 캐시를 이용하려면 인덱스 된 프리미티브를 사용해야하며, 메시에 대한 참조의 지역성을 최대화하기 위해 정점을 정렬해야합니다. D3DX 및 NVTriStrip (NVIDIA 2003)을 포함하여이 작업에 도움이되는 도구가 있습니다.

내 의견으로는 이러한 권장 사항은 내가 말한 내용을 따르며 메모리 레이아웃을 완전히 제어 할 수는 없지만 각 VBO 정점이 배치되는 방법과 같이 제어 할 수있는 것은 성능에 영향을 줄 수 있음을 의미합니다.

응용 프로그램의 성능이 저하 된 경우 먼저 병목 현상을 감지해야합니다. 병목 현상은 참조 데이터의 문제가 될 수 있지만 컬링이없는 대량의 데이터 (예 : 절두체 컬링을 수행하지 않음)가 있기 때문일 수 있습니다. etc 주제에서 내 답변을 확인할 수 있습니다.

OpenCL / CUDA를 사용할 때 참조 레이아웃의 위치에 대해 더 걱정해야한다고 생각합니다 . 메모리 레이아웃을 절대적으로 제어하는 ​​경우가 많았습니다.


3

원래 GPU는 데이터 재사용이 거의없는 멀티미디어 응용 프로그램에만 사용되었습니다. GPU가 범용 응용 프로그램 (GPGPU라는 용어)에 점점 더 많이 사용됨에 따라 이제 대형 하드웨어 관리 캐시가 특징입니다. 예를 들어 Fermi GPU에는 768KB의 마지막 수준 캐시가 있고 Kepler GPU에는 1536KB의 마지막 수준 캐시, Maxwell GPU에는 2048KB의 마지막 수준 캐시가 있습니다. 이것은 GPU 캐시에 대한 많은 연구와 함께 데이터 위치가 GPU에 반드시 중요하다는 것을 보여줍니다. 위의 내용에 대한 자세한 내용 은 내 설문지를 참조하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.