OpenCL
https://ko.wikipedia.org/wiki/OpenCL
https://www.youtube.com/watch?v=wgEKK6CH6NU
https://hoororyn.tistory.com
http://blog.naver.com/qbxlvnf11/221447507073
History
- 2008년Apple제안해서 Spec1.0 명세가 발표
- Khronos Group에서 관리
- 2009년 OSX 10.6 SnowLeopard에서 OpenCL 지원함
- 2013년 Spec2.0 발표
- 2016년 Spec2.2 발표
OpenCL (OpenComputing Language )
- 여러 종류의 시스템에 적용 가능한 병렬처리 프로그램을 개발해야 한다면, 이기종 플랫폼에 실행가능한 병렬프로그램을 작성의 표준이 필요!
- a framework suited for parallel programming of heterogeneous systems
- 개방형 범용 병렬 컴퓨팅 프레임워크 (API 규격일 뿐, 구현은 개발사에 따라 )
- (CUDA 안쓰고) GPGPU를 사용할수 있는 오픈플랫폼
GPGPU (General-Purpose computing on GPU) : GPU를 전통적인 그래픽 처리뿐만이 아니라 CPU가 수행하는 응용 프로그램의 계산에도 사용하는 기술 (CPU와 GPU의 구조 차이에서 기인하여 성능향상을 하기 위해)
GPU를 사용할 때는 라이브러리(혹은 tool)가 필요한데 대표적으로 OpenCL, NVIDA 전용인 CUDA 등이 있다. 최근에 발견한 건데 Intel의 머신 러닝 전용 plaidML이라는 라이브러리도 있다.이 라이브러리를 사용하면 AMD, Intel GPU도 케라스(keras) 등에 활용이 가능할 듯하다.
CPU, GPU를 이용해서 병렬 연산을 하게 함
CPU(Intel 3.1 GHz Intel Core i7), GPU(AMD Radeon Pro 560 4 GB graphics) 연산장치가 혼재되어 있는 시스템 (플랫폼: Intel, AMD)에서 각 연산 유닛(device: GPU core들, host: CPU)을 사용자가 쉽게 사용할수 있도록 도와준다.
즉, CPU와 GPU사이를 오가며 작업을 처리 해 줄 수 있게 도와주는 역할.
기능
Parallelism (병렬처리) 위한 표준 인터페이스(API)를 제공
- Task-based Parallelism (작업 기반 병렬 컴퓨팅)
- Data-based Parallelism(데이터 기반 병렬 컴퓨팅)
유사 기술
- OpenGL : 3차원 컴퓨터 그래픽스에 대한 산업계의 개방형 표준
- OpenAL : 컴퓨터 오디오에 대한 산업계의 개방형 표준
- Stream processing: 제한된 형태의 병렬처리를 응용프로그램이 쉽게 사용할 수 있도록 하는 SIMD 관련 컴퓨터 프로그래밍 양식.
데이터 기반(data-based) 병렬 컴퓨팅
N 차원 계산 도메인(N=1, 2 또는 3)을 정의하여 SIMD로 처리할 수 있다.
예제) 차원 문제.
1D: 한 배열 내의 1백만 요소
global_dimension[3] = { 1000000, 1, 1 };
2D: 1920 X 1200 HD 비디오 프레임, 2.3M 픽셀
global_dimension[3] = { 1920, 1200, 1 };
3D: 256 X 256 X 256 부피. 16,7M 픽셀
global_dimension[3] = { 256, 256, 256 };
그래픽카드
GPU (Graphic processing Unit) + VRAM(Video Memory)
ex) AMD제조사의 Radeon Pro 560 + 4 GB
AMD Radeon RX/VEGA
NVIDIA Geforce GT/GTX/TITAN