다이렉트컴퓨트
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
DirectCompute는 범용 연산 처리를 위해 GPU를 사용하는 기술로, DirectX 11 및 DirectX 12 API를 통해 접근할 수 있다. 컴퓨트 셰이더를 사용하여 GPU의 병렬 프로세서를 활용하며, HLSL 셰이딩 언어를 사용한다. Direct3D 실시간 그래픽스 파이프라인과의 연계가 용이하며, CUDA나 OpenCL에 비해 Direct3D/HLSL 사용자가 쉽게 접근할 수 있다는 장점이 있다. DirectX 10.x 세대 GPU에서도 DirectCompute를 실행할 수 있으며, 게임 등 다양한 응용 분야에서 활용된다.
더 읽어볼만한 페이지
- GPGPU 라이브러리 - CUDA
CUDA는 엔비디아에서 개발한 GPU 기반 병렬 컴퓨팅 플랫폼으로, 연산 집약적인 작업을 가속화하며 다양한 프로그래밍 언어를 지원하고 3D 그래픽, 동영상 변환 등 여러 분야에 활용된다. - GPGPU 라이브러리 - OpenCL
OpenCL은 다양한 계산 자원을 활용하여 병렬 컴퓨팅을 가능하게 하는 프레임워크로, OpenCL C/C++ 언어를 사용하여 스트림 프로세싱 커널을 작성하며, 크로노스 그룹에서 관리하는 로열티 프리 오픈 표준이다. - DirectX - Direct2D
Direct2D는 마이크로소프트에서 개발한 2D 그래픽 API로, 낮은 수준의 추상화, 고품질 텍스트 렌더링, 안티앨리어싱, 하드웨어 가속, 높은 DPI 지원 등의 특징을 가지며 다양한 분야에서 활용된다. - DirectX - 다이렉트쇼
DirectShow는 마이크로소프트에서 개발한 윈도우 기반 멀티미디어 프레임워크이자 API로, 필터 그래프를 통해 비디오 재생, 오디오 녹음, 편집, 인코딩 등 다양한 작업을 처리하며, 뛰어난 코덱 확장성을 가지지만 복잡한 구조와 코덱 충돌 문제가 있다. - 그래픽 라이브러리 - Direct2D
Direct2D는 마이크로소프트에서 개발한 2D 그래픽 API로, 낮은 수준의 추상화, 고품질 텍스트 렌더링, 안티앨리어싱, 하드웨어 가속, 높은 DPI 지원 등의 특징을 가지며 다양한 분야에서 활용된다. - 그래픽 라이브러리 - WinG
WinG는 윈도우 3.x의 그래픽 성능 향상을 위해 개발된 기술로, DirectX로 발전하는 기반이 되었으며 한국 게임 산업에도 영향을 미쳤다.
다이렉트컴퓨트 | |
---|---|
개요 | |
종류 | API |
개발 | 마이크로소프트 |
운영체제 | 윈도우 비스타 이상 |
API | DirectX |
용도 | 범용 GPU 연산 |
상세 정보 | |
소개 | Direct3D 11에 도입된 GPGPU (General-Purpose computing on Graphics Processing Units) API의 일종이다. |
특징 | GPU를 사용하여 그래픽 처리 외의 범용 계산 작업을 수행한다. DirectX 11의 일부로 통합되어 있어, Direct3D와 상호 운용이 가능하다. |
활용 분야 | 이미지/비디오 처리 물리 시뮬레이션 인공지능 암호 해독 |
장점 | CPU에 비해 병렬 처리 능력이 뛰어나 특정 작업에서 높은 성능을 낼 수 있다. 기존 Direct3D 파이프라인과 연동하여 그래픽 작업과 계산 작업을 효율적으로 처리할 수 있다. |
단점 | GPU 아키텍처에 따라 성능 차이가 발생할 수 있다. CPU에 비해 메모리 접근 방식이 제한적일 수 있다. |
지원 장치 | 다이렉트엑스 11 지원 그래픽 카드 |
역사 | |
발표 | 2008년 마이크로소프트 |
DirectX 버전 | DirectX 11에서 처음 소개 |
AMD 지원 | AMD는 DirectCompute를 지원하며, 경쟁 기술인 OpenCL도 지원한다. |
NVIDIA 지원 | NVIDIA는 DirectCompute를 지원하며, 자체 기술인 CUDA도 제공한다. |
기술적 특징 | |
프로그래밍 모델 | HLSL (High-Level Shading Language)을 사용하여 작성 |
메모리 모델 | 공유 메모리, 지역 메모리, 전역 메모리 등 다양한 메모리 공간을 제공 |
스레드 모델 | 스레드 그룹을 사용하여 병렬 처리 작업을 구성 |
API 상호 운용성 | Direct3D와 상호 운용하여 그래픽 렌더링과 계산 작업을 통합 가능 |
기타 | |
참고 | OpenCL, CUDA 등의 다른 GPGPU 기술과 경쟁 관계에 있다. |
2. 컴퓨트 파이프라인
컴퓨트 파이프라인은 컴퓨트 셰이더를 디스패치하고 실행하는 데 사용되는 그래픽스 파이프라인 유형이다.[4] 컴퓨트 파이프라인은 복사 및 컴퓨트 명령만 기록하도록 제한된 컴퓨트 명령 목록을 통해 실행된다. 컴퓨트 셰이더는 범용 알고리즘과 계산에 사용되며, GPU의 병렬 프로세서를 통해 실행된다. 컴퓨트 파이프라인에 의해 수행되는 이 병렬 실행 모델은 디스패치, 스레드 그룹 및 스레드로 구성된다. 디스패치는 스레드 그룹의 3차원 컨테이너이며, 스레드 그룹은 스레드의 3차원 컨테이너이다.[4] 스레드 그룹은 GPU에서 ''웨이브''로 실행된다.[5] 이 파이프라인을 통해 프로그램의 모든 코드를 재구성할 필요 없이 워크로드를 GPU로 쉽게 보낼 수 있다.[6]
일반적인 컴퓨트 파이프라인에는 읽기 전용 셰이더 리소스 뷰가 입력으로 포함되고, 추가 리소스 상수를 위한 상수 버퍼 뷰, 출력을 위한 정렬되지 않은 액세스 뷰가 포함된다. 성능을 향상시키기 위해서는 이러한 리소스의 리소스 상태를 설정하는 것이 중요하다.[7] 응용 프로그램에서 DirectCompute를 사용하는 경우 Direct3D 11 API 또는 Direct3D 12 API를 통해 GPU 장치를 사용하게 된다.
프로그램을 작성할 때 HLSL이라는 셰이딩 언어를 사용하는데, 이는 Direct3D의 정점 셰이더나 픽셀 셰이더와 같은 그래픽스 파이프라인 기술에 사용되는 언어이기도 하다. GPGPU용 셰이더 프로그램은 '''컴퓨트 셰이더'''[18]라고 불리며, 그래픽스 파이프라인과 독립적으로 작동한다.
HLSL의 컴퓨트 셰이더는 CUDA나 OpenCL의 커널 함수(병렬 실행 단위)를 기술하는 것과 매우 유사하다.
Direct3D의 경쟁 API인 OpenGL에서는 버전 4.3에서 Direct3D와 마찬가지로 컴퓨트 셰이더를 도입했다(OpenGL에서는 컴퓨트 셰이더를 기술하는 데 GLSL을 사용한다).
DirectCompute 및 컴퓨트 셰이더가 CUDA나 OpenCL에 비해 우수한 점으로는 Direct3D 실시간 그래픽스 파이프라인과의 연계가 용이하다(시뮬레이션 실행 및 시각화에 적합하다), Direct3D/HLSL을 이미 사용하고 있는 경우 습득이 용이하다 등이 있다. 또한, 마이크로소프트 플랫폼 전용이라는 제약이 있지만, 반대로 DirectX 11/DirectX 12를 지원하기만 하면 어떠한 장치에서도 작동한다는 장점이 있다.
2. 1. 컴퓨트 셰이더
컴퓨트 파이프라인은 컴퓨트 셰이더를 디스패치하고 실행하는 데 사용되는 그래픽스 파이프라인 유형이다.[4] 컴퓨트 셰이더는 범용 알고리즘과 계산에 사용되며, GPU의 병렬 프로세서를 통해 실행된다. 컴퓨트 파이프라인에 의해 수행되는 이 병렬 실행 모델은 디스패치, 스레드 그룹 및 스레드로 구성된다. 디스패치는 스레드 그룹의 3차원 컨테이너이며, 스레드 그룹은 스레드의 3차원 컨테이너이다.[4] 스레드 그룹은 GPU에서 ''웨이브''로 실행된다.[5] 이 파이프라인을 통해 프로그램의 모든 코드를 재구성할 필요 없이 워크로드를 GPU로 쉽게 보낼 수 있다.[6]일반적인 컴퓨트 파이프라인에는 읽기 전용 셰이더 리소스 뷰가 입력으로 포함되고, 추가 리소스 상수를 위한 상수 버퍼 뷰, 출력을 위한 정렬되지 않은 액세스 뷰가 포함된다. 성능을 향상시키기 위해서는 이러한 리소스의 리소스 상태를 설정하는 것이 중요하다.[7] 응용 프로그램에서 DirectCompute를 사용하는 경우 Direct3D 11 API 또는 Direct3D 12 API를 통해 GPU 장치를 사용하게 된다.
프로그램을 작성할 때 HLSL이라는 셰이딩 언어를 사용하는데, 이는 Direct3D의 정점 셰이더나 픽셀 셰이더와 같은 그래픽스 파이프라인 기술에 사용되는 언어이기도 하다. GPGPU용 셰이더 프로그램은 '''컴퓨트 셰이더'''[18]라고 불리며, 그래픽스 파이프라인과 독립적으로 작동한다.
HLSL의 컴퓨트 셰이더는 CUDA나 OpenCL의 커널 함수(병렬 실행 단위)를 기술하는 것과 매우 유사하다.
Direct3D의 경쟁 API인 OpenGL에서는 버전 4.3에서 Direct3D와 마찬가지로 컴퓨트 셰이더를 도입했다(OpenGL에서는 컴퓨트 셰이더를 기술하는 데 GLSL을 사용한다).
DirectCompute 및 컴퓨트 셰이더가 CUDA나 OpenCL에 비해 우수한 점으로는 Direct3D 실시간 그래픽스 파이프라인과의 연계가 용이하다(시뮬레이션 실행 및 시각화에 적합하다), Direct3D/HLSL을 이미 사용하고 있는 경우 습득이 용이하다 등이 있다. 또한, 마이크로소프트 플랫폼 전용이라는 제약이 있지만, 반대로 DirectX 11/DirectX 12를 지원하기만 하면 어떠한 장치에서도 작동한다는 장점이 있다.
2. 2. 다운 레벨 하드웨어 지원
DirectX 10.x 세대 GPU에서도 DirectX 11 API를 사용하여 DirectCompute를 실행할 수 있지만, DirectX 11 풀 지원 GPU와 비교하여 실행 가능 조건에 몇 가지 제약이 있으므로 사용할 때는 주의가 필요하다.[19] DirectX 10.x(셰이더 모델 4.x) 지원 컴퓨트 셰이더는 DirectCompute 4.x, 그리고 DirectX 11(셰이더 모델 5.0) 지원 컴퓨트 셰이더는 DirectCompute 5.0이라고도 불린다.[20]배정밀도 부동 소수점 지원에 관해서는, DirectCompute 4.x에서는 완전히 불가능하지만, DirectCompute 5.0에서는 임의 지원이 된다.
3. 예제 코드
cpp
// 루트 시그니처 설정
CD3DX12_VERSIONED_ROOT_SIGNATURE_DESC root_signature_desc{
1, root_parameters,
0, nullptr
};
// 루트 시그니처 직렬화
Microsoft::WRL::ComPtr
Microsoft::WRL::ComPtr
D3DX12SerializeVersionedRootSignature(
&root_signature_desc, D3D_ROOT_SIGNATURE_VERSION_1_1,
root_signature_blob.GetAddressOf(), error_blob.GetAddressOf()
);
// 루트 시그니처 생성
Microsoft::WRL::ComPtr
device->CreateRootSignature(
0, root_signature_blob->GetBufferPointer(),
root_signature_blob->GetBufferSize(),
IID_PPV_ARGS(root_signature.GetAddressOf())
);
// 컴퓨트 셰이더 읽기
Windows::WRL::ComPtr
D3DReadFileToBlob(L"C:/path/to/compute/shader", compute_shader.GetAddressOf());
// 컴퓨트 파이프라인 상태 객체 (PSO) 생성
struct PipelineStateStream {
CD3DX12_PIPELINE_STATE_STREAM_ROOT_SIGNATURE root_signature;
CD3DX12_PIPELINE_STATE_STREAM_CS compute_shader;
} pipeline_state_stream;
// PSO에 루트 시그니처와 컴퓨트 셰이더 설정
pipeline_state_stream.root_signature = root_signature.Get();
pipeline_state_stream.compute_shader = CD3DX12_SHADER_BYTECODE{compute_shader.Get()};
D3D12_PIPELINE_STATE_STREAM_DESC pipeline_state_stream_desc{
sizeof(PipelineStateStream), &pipeline_state_stream
};
// 파이프라인 상태 생성
device->CreatePipelineState(
&pipeline_state_stream_desc,
IID_PPV_ARGS(pipeline_state_stream.GetAddressOf())
);
```
컴퓨트 파이프라인 초기화 후, 각 프레임마다 다음의 작업이 필요하다.
```cpp
command_list->SetPipelineState(pipeline_state);
command_list->SetComputeRootSignature(root_signature);
command_list->Dispatch(groups_x, groups_y, groups_z);
4. D3DCSX
Direct3D 11용 마이크로소프트 공식 확장 라이브러리인 D3DX 11이 존재하며, 그 중에서도 DirectCompute(컴퓨트 셰이더)의 확장 라이브러리로서 D3DCSX가 존재한다.[21] D3DCSX 11에는 FFT 및 스캔 알고리즘이 구현되어 있다.
5. C++ AMP
C++ AMP에 대한 자세한 내용은 C++ AMP 문서를 참고하십시오.
6. 활용 사례
- 배틀포지/BattleForge영어[22][23]
- S.T.A.L.K.E.R.: 프리퍄티의 부름[24]
- 로스트 플래닛 2[25]
- 배틀필드 3[26]
- 배틀필드 4[27]
- 콜린 맥레이: 더트 2/Colin McRae: Dirt 2영어[28][29]
- 더트 3/Dirt 3영어[30]
- 더트: 쇼다운/Dirt: Showdown영어[31]
- 메트로 2033(Windows판) - 확산 기반 DoF (depth of field)[32][33]
- 툼 레이더 (2013년 게임) - AMD TressFX[34][35][36][37]
- 콜 오브 듀티: 고스트 - NVIDIA HairWorks[38]
7. DirectX 12와 DirectCompute
참조
[1]
웹사이트
DirectCompute
https://developer.nv[...]
NVIDIA
2010-09-28
[2]
간행물
The Directx Evolution
https://search.ebsco[...]
2024-08-07
[3]
간행물
Beyond Graphics with Gpgpus: Maximum PC
https://search.ebsco[...]
[4]
웹사이트
DirectCompute - Optimizations and Best Practices
https://www.nvidia.c[...]
2010-09-20
[5]
웹사이트
Wave Programming in D3D12 and Vulkan
https://gpuopen.com/[...]
2017-03-03
[6]
간행물
The Return of GPU Computing
https://search.ebsco[...]
2021-09
[7]
웹사이트
Compute Shaders
https://gpuopen.com/[...]
2022-07-22
[8]
뉴스
AMDのGPGPU戦略は新章へ - ATI Streamの展望、DirectX Compute Shaderの衝撃 (4) 今後のGPGPU動向は? | マイナビニュース
https://news.mynavi.[...]
[9]
뉴스
ASCII.jp:GPGPUをWindowsでサポートする「DirectCompute」 (2/2)|あなたの知らないWindows
https://ascii.jp/ele[...]
[10]
웹사이트
DirectCompute | NVIDIA Developer
https://developer.nv[...]
[11]
웹사이트
"CUDAとは?"
http://www.nvidia.co[...]
NVIDIA社
2011-01-03
[12]
웹사이트
Nigel Dessau, senior VP and CMO at AMD, about DirectCompute
http://blogs.amd.com[...]
AMD社
2011-01-03
[13]
웹사이트
What is Direct3D 12? (Windows)
https://msdn.microso[...]
[14]
웹사이트
DirectCompute in DirectX12: Innovations from the Game Space
http://on-demand.gpu[...]
[15]
웹사이트
Shader Model 5.1 (Windows)
https://msdn.microso[...]
[16]
웹사이트
HLSL Shader Model 5.1 Features for Direct3D 12 (Windows)
https://msdn.microso[...]
[17]
웹사이트
Hardware Feature Levels (Windows)
https://msdn.microso[...]
[18]
웹사이트
コンピュート シェーダーの概要 | Microsoft Learn
https://learn.micros[...]
[19]
웹사이트
ダウンレベルのハードウェア上のコンピュート シェーダー
http://msdn.microsof[...]
[20]
웹사이트
Compute Shader Overview - Win32 apps | Microsoft Learn
https://learn.micros[...]
[21]
웹사이트
D3DCSX 11 Interfaces (Windows)
https://msdn.microso[...]
[22]
웹사이트
BattleForge - AMD
http://developer.amd[...]
[23]
웹사이트
Battleforge: The First DX11 Game - AMD’s Radeon HD 5850: The Other Shoe Drops
http://www.anandtech[...]
[24]
웹사이트
AMD Gaming: 11 Days of DirectX® 11, Day Nine: GSC | AMD Blogs
http://community.amd[...]
[25]
뉴스
CEDEC 2010 - Windows版「ロストプラネット2」にみるDirectX 11フィーチャー(後編) (1) DirectComputeによる波の生成(1) | マイナビニュース
https://news.mynavi.[...]
[26]
뉴스
西川善司の3Dゲームファンのためのグラフィックス講座。台頭するDirectCompute技術 - GAME Watch
https://game.watch.i[...]
[27]
웹사이트
Battlefield 4 + Frostbite + Mantle
http://www.slideshar[...]
[28]
뉴스
4Gamer.net ― 「DiRT 2」のグラフィックスオプションで知る,DirectX 11のポテンシャル
https://www.4gamer.n[...]
[29]
뉴스
4Gamer.net ― DirectX 11が加速するゲームの進化~AMD,新世代DirectXのポイントとメリットを解説
https://www.4gamer.n[...]
[30]
웹사이트
AMD Gaming: DiRT 3- Rally racing is back | AMD Blogs
http://community.amd[...]
[31]
웹사이트
GS-4108, DirectCompute in Gaming, by Bill Bilodeau
http://www.slideshar[...]
[32]
웹사이트
"GPU Computing for Games"
https://developer.nv[...]
gameworks.nvidia.com
[33]
웹사이트
Beyond Programmable Shading Course; ACM SIGGRAPH 2010; DirectCompute Use in Real-Time Rendering Products; Chas. Boyd, Microsoft Windows Graphics
http://bps10.idav.uc[...]
[34]
뉴스
4Gamer.net ― [GDC 2013]PC版「TOMB RAIDER」は髪がすごい。ララ・クロフト秘伝のヘアケア技術教えます
https://www.4gamer.n[...]
[35]
뉴스
[CEDEC 2013]さらさらヘア実現の秘密が明らかに。「TOMB RAIDER」PC版の毛髪レンダリング技術「TressFX Hair」はこうして実現された - 4Gamer.net
https://www.4gamer.n[...]
[36]
웹사이트
AMD APU13: AMD Talks DirectCompute in Gaming
http://www.tomshardw[...]
[37]
웹사이트
Radeon™ SDK - Enhance Your 3D Graphics Development - AMD
http://developer.amd[...]
[38]
웹사이트
Introducing NVIDIA HairWorks: fur and hair simulation solution | PhysXInfo.com - PhysX News
http://physxinfo.com[...]
[39]
웹사이트
NVIDIA CUDA 아키텍처 GPU에서 DirectCompute 지원
http://www.nvidia.co[...]
[40]
웹인용
Nigel Dessau, senior VP and CMO at AMD, about DirectCompute
http://blogs.amd.com[...]
2012-07-07
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com