얼마나 많은 Direct / Compute / Copy Queue가 의미가 있습니까?


11

DirectX 12는 그래픽 ( "직접"이라고 함), 계산 또는 복사 작업에 대한 명령 대기열을 노출합니다. 제공된 기능면에서 각 기능은 다음 기능의 상위 집합입니다. 명세는 명령 대기열을 디바이스에서 동시에 실행될 수있는 상태. 그러나 API는 어떤 식 으로든 명령 대기열 수를 제한하지 않습니다 (적어도 제한은 없습니다).

분명히, 다른 벤더는 이것을 매우 다르게 처리합니다.

  • 인텔은 최근 프레젠테이션 (슬라이드 23)에서 현재 GPU가 그래픽 및 컴퓨팅을 병렬로 처리 할 수없고 복사 엔진의 처리량이 약하다고 말합니다. 여러 그래픽 / 컴퓨 트 큐를 사용하지 말 것을 권고합니다.
  • AMD는 오래 전에 맨틀과 현재 세대 콘솔부터 큐 / "비동기 성 쉐이더"사용을 알리기 위해 시작했습니다. 컴퓨팅 및 그래픽 작업을 병렬로 실행하여 상당한 성능 향상을 확인하는 일부 개발자 ( ) 도 있습니다 .
  • 최근 하드웨어에서 비동기 셰이더를 지원하지 않는 엔비디아에 대한 약간의 소문 이 있습니다. 별도의 그래픽 및 컴퓨팅 큐를 한 번에 사용하면 드라이버 에뮬레이션을 나타내는 것이 느려집니다. 반면 CUDA는 병렬 복사 작업을 오랫동안 지원해 왔기 때문에 DMA 엔진이 독립적으로 작동 할 수 있습니다.

CommandLists를 단일 CommandQueues 대신 여러 CommandQueues에 커밋하는 것이 의미가 있는지 런타임에 결정할 방법이 있습니까? (이전 사례에는 많은 엔지니어링 오버 헤드가 포함되지 않음)

컴퓨팅 / 그래픽 작업과 병렬로 메모리 작업을 수행하는 것이 유용한 방법을 쉽게 알 수 있지만, 여러 컴퓨팅 및 그래픽 프로세스를 병렬로 실행하는 것은 불필요하게 복잡합니다 (주요 성능 이점이없는 한). 어쨌든 이것이 어떻게 성능을 크게 향상시킬 수 있는지는 분명하지 않습니다. 많은 작은 순차적 작업이 충분한 GPU 부하를 생성 할 수없는 병리학적인 경우를 제외하고.


1
누가 GPU를 만드는지 확인하는 것 외에도 현재 그런 종류의 판단을 내릴 수있는 의미있는 방법이 없다고 생각합니다. 궁극적으로 "하드웨어가 여러 큐에서 동시에 명령을 실행할 수있는 것"보다 더 많은 요소가 있으며 D3D12는 이러한 세부 사항을 추상화합니다. 실제로 D3D12는 대기열을 동시에 실행할 수있는 하드웨어와 순차적으로 실행할 수있는 하드웨어를 구분하지도 않고 문서의 추상화 가 동시 실행을 허용 한다고 말합니다 .
MJP

1
좋은 질문 ! 나는 또한 계산과 쉐이딩을 동시에 실행하기 위해 성능을 얻는 것이 특별하다고 생각합니다. 하이퍼 스레딩을 더 빠르게 만드는 동일한 사실 덕분에 이익이 발생할 수 있습니다. 일부 장치가 다른 대기열에 사용 중일 때 인터리빙 작업. FPU 또는 DPU 자체를 막는 계산 단계에서 사용되지 않는 텍스처 단위를 막는 셰이더와 같습니다.
v.oddou

흠 너무 나빠 아마도 "GPU를 만드는 사람을 확인하는 것 외에도 아니오"는 더 이상 없다면 이미 답으로 간주합니다. 모든 AMD 마케팅 자료를 읽은 후, 나는 혼동에 혼자가 아니라는 것을 알게되어 기쁩니다.
Wumpf

1
당신은이 문제의 중요성 (실제로 UN 중요도)에 약간의 무게를 드는 것을 알고 있습니다. PS4 SDK에는 대기열 0 이외의 다른 대기열로 방출 할 수없는 버그가 있습니다. 너무 중요하다면 더 빨리 수정되었을 것입니다.
v.oddou

답변:


1

실제 플랫폼을 테스트하는 벤치마킹 시퀀스와 함께 애플리케이션을 제공하십시오. (내 생각에는 많은 질문에 대한 가능한 대답 ...)

하드웨어 사용 방법에 따라 성능이 크게 좌우된다고 생각합니다 . 하드웨어가 어떻게 든 응용 프로그램을 거꾸로 계측하여 수행 할 작업을 알려주지 않기 때문에 디자인에 좋아 보이는 모든 것을 다룰 것입니다.

"... 장치에서 명령 대기열을 동시에 실행할 수 있습니다 ..."

키워드는 CAN입니다. 어떤 벤더가 이것을 망칠 이유가 없습니다. 결국 플랫폼 공급 업체 (Intel / AMD / Nvidia)는 공급 업체 전환을 고려하지 않을만큼 충분한 드라이버를 제공 할 책임이 있습니다. 만약 그들이이 기능에 "알아두기 문제"가 있다면 (그런데 기능적인 의미는없고 성능 만 있습니다), 그들은 또한 그들이 알고있는 것을 사용하여 그것을 해결 해야합니다 . 나는 큰 소리로 외치려고한다. 대체는 그들이 이미 구현 한 것이다. 동시 실행.

하드웨어는 우리 개발자들에게는 충분합니다.


AMD의 GCN은 둘 다 그래픽 대기열에서 발행 될 때에도 그래픽을 실행하고 동시에 계산하지만 일반적으로 여러 명령 버퍼를 통과하지는 않습니다 (여러 그리기 호출이 스케치 될 수도 있음). 드라이버 (또는 응용 프로그램-DX12 또는 Vulkan에서 생각합니다)는 데이터 종속성을 확인하고 필요한 경우 그리기 (그래픽)와 디스패치 (계산)를 차단해야합니다. 여러 명령 대기열은 그래픽에서 실제로 비동기 계산 (예 : 다음 프레임의 물리학)이있는 경우 유용 할 수 있지만 직접 경험이 없습니다.
Daniel M Gessel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.