컴퓨팅 셰이더 개요

컴퓨팅 셰이더는 그래픽 프로그래밍을 넘어 Microsoft Direct3D 11을 확장하는 프로그래밍 가능한 셰이더 단계입니다. 컴퓨팅 셰이더 기술을 DirectCompute 기술이라고도 합니다.

다른 프로그래밍 가능한 셰이더(예: 꼭짓점 및 기하 도형 셰이더)와 마찬가지로 컴퓨팅 셰이더는 HLSL 을 사용하여 설계 및 구현되지만 유사성이 끝나는 위치에 불과합니다. 컴퓨팅 셰이더는 일반적인 용도의 고속 컴퓨팅을 제공하고 GPU(그래픽 처리 장치)의 많은 병렬 프로세서를 활용합니다. 컴퓨팅 셰이더는 메모리 공유 및 스레드 동기화 기능을 제공하여 보다 효과적인 병렬 프로그래밍 방법을 허용합니다. ID3D11DeviceContext::D ispatch 또는 ID3D11DeviceContext::D ispatchIndirect 메서드를 호출하여 컴퓨팅 셰이더에서 명령을 실행합니다. 여러 스레드에서 병렬로 컴퓨팅 셰이더를 실행할 수 있습니다.

Direct3D 10.x 하드웨어에서 컴퓨팅 셰이더 사용

Microsoft Direct3D 10의 컴퓨팅 셰이더는 DirectCompute 4.x라고도 합니다.

Direct3D 11 API 및 업데이트된 드라이버를 사용하는 경우 기능 수준 10 및 10.1 Direct3D 하드웨어는 필요에 따라 cs_4_0 및 cs_4_1 프로필을 사용하는 제한된 형태의 DirectCompute를 지원할 수 있습니다. 이 하드웨어에서 DirectCompute를 사용하는 경우 다음 제한 사항에 유의하세요.

  • 최대 스레드 수는 그룹당 D3D11_CS_4_X_THREAD_GROUP_MAX_THREADS_PER_GROUP(768)으로 제한됩니다.
  • numthreads의 X 및 Y 차원은 D3D11_CS_4_X_THREAD_GROUP_MAX_X(768) 및 D3D11_CS_4_X_THREAD_GROUP_MAX_Y(768)로 제한됩니다.
  • numthreads의 Z 차원은 1로 제한됩니다.
  • 디스패치의 Z 차원은 D3D11_CS_4_X_DISPATCH_MAX_THREAD_GROUPS_IN_Z_DIMENSION(1)로 제한됩니다.
  • 순서가 지정되지 않은 액세스 보기 하나만 셰이더에 바인딩할 수 있습니다(D3D11_CS_4_X_UAV_REGISTER_COUNT 1임).
  • RWStructuredBufferRWByteAddressBuffers만 순서가 지정되지 않은 액세스 보기로 사용할 수 있습니다.
  • 스레드는 모든 위치에서 읽을 수 있지만 쓰기를 위해 그룹 공유 메모리의 자체 영역에만 액세스할 수 있습니다.
  • 쓰기를 위해 그룹 공유 메모리에 액세스할 때 SV_GroupIndex 또는 SV_GroupThreadID 사용해야 합니다.
  • 그룹 공유 메모리는 그룹당 16KB로 제한됩니다.
  • 단일 스레드는 쓰기를 위해 그룹 공유 메모리의 256 바이트 영역으로 제한됩니다.
  • 사용할 수 있는 원자성 명령이 없습니다.
  • 배정밀도 값은 사용할 수 없습니다.

Direct3D 11.x 하드웨어에서 컴퓨팅 셰이더 사용

Direct3D 11의 컴퓨팅 셰이더는 DirectCompute 5.0이라고도 합니다.

cs_5_0 프로필에서 DirectCompute 사용하는 경우 다음 항목을 염두에 두어야 합니다.

  • 최대 스레드 수는 그룹당 D3D11_CS_THREAD_GROUP_MAX_THREADS_PER_GROUP(1024)로 제한됩니다.
  • numthreads의 X 및 Y 차원은 D3D11_CS_THREAD_GROUP_MAX_X(1024) 및 D3D11_CS_THREAD_GROUP_MAX_Y(1024)로 제한됩니다.
  • numthreads의 Z 차원은 D3D11_CS_THREAD_GROUP_MAX_Z(64)로 제한됩니다.
  • 디스패치의 최대 차원은 D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION(65535)로 제한됩니다.
  • 셰이더에 바인딩할 수 있는 순서가 지정되지 않은 액세스 뷰의 최대 수는 D3D11_PS_CS_UAV_REGISTER_COUNT(8)입니다.
  • RWStructuredBuffers, RWByteAddressBuffers 및 형식화된 정렬되지 않은 액세스 뷰(RWTexture1D, RWTexture2D, RWTexture3D 등)를 지원합니다.
  • 원자성 지침을 사용할 수 있습니다.
  • 배정밀도 지원을 사용할 수 있습니다. 배정밀도를 사용할 수 있는지 여부를 확인하는 방법에 대한 자세한 내용은 D3D11_FEATURE_DOUBLES.

섹션 내용

항목 설명
새 리소스 종류
Direct3D 11에 몇 가지 새로운 리소스 종류가 추가되었습니다.
리소스 액세스
리소스에 액세스하는 방법에는 여러 가지 가 있습니다.
원자성 함수
새 리소스 종류 또는 공유 메모리에 액세스하려면 연동된 내장 함수를 사용합니다. 연동 함수는 원자성으로 작동하도록 보장됩니다. 즉, 프로그래밍된 순서대로 수행되도록 보장됩니다. 이 섹션에서는 원자성 함수를 나열합니다.

그래픽 파이프라인

방법: 컴퓨팅 셰이더 만들기