2013-04-07 2 views

답변

47

다른 OpenGL 쉐이더 유형과 달리 컴퓨팅 쉐이더는 컴퓨터 그래픽과 직접 관련이 없으며 CUDA 및 OpenCL과 비슷한 기본 하드웨어를 훨씬 더 직접적으로 추상화합니다. 사용자 정의 가능한 작업 그룹 크기, 공유 메모리, 그룹 내 동기화 및 CUDA 및 OpenCL에서 알려져 있고 사랑받는 모든 것들을 제공합니다.

의 주요 차이점

은 기본적으로 있습니다 : 그 프로그래밍 언어 bewteen 같은 큰 차이가없는 반면

  • 대신 OpenCL을 C의 GLSL, 당신은 그러나 모든 그래픽 관련 GLSL 기능을 사용하지 않을 수 사용 고급 텍스처 유형 (예 : 큐브 맵 배열), 고급 필터링 (예 : 밉 매핑, 잘 퀴즈 레벨을 직접 계산해야 함), 4x4 행렬 또는 기하학적 함수와 같은 편의성이 적은 OpenCL에서 사용할 수 있습니다.
  • 다른 GLSL 셰이더와 같은 OpenGL 셰이더 프로그램입니다. 즉, OpenGL과 OpenCL/CUDA 간의 인터페이스가 지루할 수있는 반면, 버퍼링, 텍스처, 이미지와 같은 OpenGL 데이터에 액세스하는 것은 쉬운 일이 아닙니다. 같은 방식으로 기존 OpenGL 워크 플로우에 통합하는 것도 쉽습니다. OpenCL을 설정하는 것은 기존 그래픽 파이프 라인과의 통합을 말하는 것이 아니라 자체적으로 책입니다.

그래서이 계산 쉐이더는 그래픽과 달리 GPU 프로그래밍에 대한 일반적인 (OpenCL/CUDA와 같은) 컴퓨팅 접근 방식을 보여 주지만 실제로 기존 OpenGL 응용 프로그램 내에서 사용하기위한 것입니다. OpenCL/CUDA의 계산 유연성이없는 다른 쉐이더 스테이지에 접근합니다 (물론 다른 이점도 제공함). 따라서 컴퓨팅 작업을 수행하는 것은 일반적인 컴퓨팅을위한 것이 아닌 다른 쉐이더 단계로 그들을 압착하거나 동기화해야하는 추가 컴퓨팅 프레임 워크를 도입하는 것보다 더 유연하고 직접적이며 쉽습니다.

컴퓨팅 쉐이더는 하드웨어 자원과 동일한 프로그래밍 방식으로 동일한 유연성과 제어로 OpenCL에서 달성 할 수있는 거의 모든 것을 수행 할 수 있어야합니다. 따라서 수행하려는 작업에 적합한 GPU에 적합한 알고리즘 (CUDA 또는 OpenCL에서 잘 작동 할 것입니다)을 갖고 있다면 컴퓨팅 쉐이더로도 수행 할 수 있습니다. 하지만 계산 쉐이더 (scales shaders) 때문에 OpenGL을 사용하는 것은별로 의미가 없습니다. (여전히 실시간 컴퓨터 그래픽을위한 프레임 워크 일 것입니다.) 이를 위해 OpenCL 또는 CUDA 만 사용할 수 있습니다. 컴퓨팅 쉐이더의 진정한 강점은 그래픽과 컴퓨팅 기능을 혼합 할 때입니다.

+9

GLSL이 명시 적으로 *하지 * 않음을 OpenCL이 제공한다는 정밀도 보장을 잊지 마십시오. –

+0

@NicolBolas 산술 연산 및 함수를 의미합니까? –

+1

예. 부동 소수점 정밀도는 둘 사이에서 매우 다릅니다. –

2

다른 관점을 보려면 here을보십시오. 요약하기 :

이 예, OpenCL을 이미 존재하지만 헤비급 응용 프로그램 (CFD, FEM 등을 생각) 대상, 그리고 훨씬 더 보편적 OpenGL을 (GPU를 넘어 생각하는 것보다 입니다 ... 인텔의 제온 파이 아키텍처가 지원하는

> 50 x86 코어).

또한 OpenGL/CUDA와 OpenCL 간의 버퍼 공유는 재미 있지 않습니다.

+0

실제로 하이 엔드 GPU는 하이 엔드 CPU보다 40 분의 1의 시간으로 매트릭스 컴퓨팅에서 병렬화 가능한 문제를보다 구체적으로 해결할 수 있습니다. 지금은 CPU 기능에 대해별로 신경 쓰지 않습니다. 제 질문으로 돌아가려면 Matrix Inversion과 계산 쉐이더를 사용하는 것이 좋습니다. 그리고 OpenCL에 비해 얼마나 많은 작업이 필요합니까? – Maiss

+0

AFAIK, 병렬 알고리즘은 단지 * 스파 스 * 행렬을 반전시키기 위해 존재하며 이것들은 C99 (OpenCL의 커널 언어)로 작성하기를 원할 정도로 충분히 복잡합니다. –

+1

OpenCL과 유사한 OpenGL의 계산 쉐이더에서는 OpenGL의 C99 언어와 비교하여 OpenGL이 _GLSL_ (OpenGL 쉐이딩 언어)을 커널 언어로 사용한다는 점에서 많은 유형의 계산을 수행 할 수 있습니다. 행렬 계산을 수행하는 데 제한이 없으며 (예 : 희소 행렬만을 사용하여 작업하는 경우) 특히 특정 경우 GLSL의 기본 행렬 연산을 활용하는 블록 기반 행렬 알고리즘을 사용할 수 있습니다. – radical7