OpenCL이라는 용어를 많이 접하게 되어서 궁금함을 해소하고자 정리를 시작하였습니다.
아래 내용들은 설치 및 사용방법에 대한 내용은 아닙니다.
OpenCL이 어떤것인지에 대한 내용을 정리한 것이니 참고하시기 바랍니다.

 

The open standard for parallel programming of heterogeneous systems
( 이 기종 시스템의 병렬 프로그래밍을 위한 개방형 표준 )

 

OpenCL (Open Computing Language)은 개방형으로 서버, 모바일 장치 및 임베디드 플랫폼에서 사용되는 다양한 프로세서의 병렬 프로그래밍을 위해 사용되는 교차 플랫폼을 위한 로열티 없는 표준입니다.

OpenCL은 게임 및 엔터테인먼트 타이틀, 과학 및 의료 소프트웨어, 전문creative도구, 시각 처리 및 신경 네트워크 교육(neural network training) inferencing을 비롯한 다양한  범주에서 광범위하게 사용되는 응용 프로그램의 속도와 응답성을 크게 향상시키고 있습니다.

OpenCL 2.2는 크게 개선된 병렬 프로그래밍 생산성을 위한 core specification안에서 OpenCL C++ 커널 언어를 제공합니다.  

1. OpenCL C++ 커널 언어는 C++ 14 standard의 정적 하위 집합이며 클래스, 템플릿, 람다식, 함수 오버로드 및 일반 및 메타 프로그래밍을 위한 여러 가지 구조를 포함하고 있습니다.

2. OpenCL C++
커널 언어를 완전히 지원하는 새로Khronos SPIR-V 1.2 중급 언어를 사용하고 있습니다.

3. OpenCL 라이브러리 함수는 atomics, iterators, images, samplers, pipes및 내장형 타입의 디바이스큐와 address 공간과 같은 기능이 액세스하는 동안 정의되지 않은 행위를 줄이고 안정성 향상을 제공하므로서 C++ 언어의 장점을 가질 수 있습니다.

4. Pipe storageOpenCL 2.2에서 새로운device-side type으로 컴파일시간에 커넥티비티 크기와 타입을 만들고, 커널간의 효율적인 장치간 통신을 가능하게 함으로써 FPGA 개발에 유용합니다.

5. OpenCL 2.2에는 생성된 코드에 대한 향상된 최적화기능을 포함하고 있습니다.
응용 프로그램은 SPIR-V 컴파일에서 특수화된 상수값을 제공 할 수 있으며 새 쿼리는 프로그램 범위 전역 객체에서 중요하지 않은 생성자 및 소멸자를 검출할 수 있으며 사용자콜백은 프로그램 릴리스시  설정할 수 있습니다

OpenCL 2.2에서 Khronos는 처음으로 OpenCL 2.2 사양의 전체 소스와 GitHub에서 OpenCL 2.2의 적합성 테스트를 발표하여 개발자들이 구현을 테스트하고 버그 수정을 직접 제안하며 자신의 용도에 맞게 사양 및 참조 자료를 재사용 할 수 있도록 하였습니다.
OpenCL 버전 1.2, 2.0 2.1에 대한 적합성 테스트도 GitHub에서 발표되었습니다.

OpenCL Ecosystem (생태계)

 



OpenCL 2.2

 

C ++ 커널 언어 정의
- 단일 소스 C ++ 프로그래밍을 위한 SYCL 2.2와 함께

SPIR-V 1.2 OpenCL C ++ 지원 추가
- Initializer and finalizer function execution modes for constructors and destructors
- Named barriers, subgroup execution, and program scope pipes…


Runs on any OpenCL 2.0-capable hardware

OpenCL 2.0 지원되는 어떤 하드웨어에서도 실행
- 단지 Driver Update만 필요합니다.

Provisional release
- 최종 단계 전에 업계에 피드백을 요청
- SIGGRAPH 또는 SC16에서의 최종화 목표한다 - 피드백에 따라 다름


OpenCL C++

 

OpenCL C ++ 커널 언어는 C ++의 정적 하위 집합입니다.
- 성능을 저하시키지 않으면서 개발자는 low-level 수준의 자세한 코딩을 사용할 수 있습니다.

병렬 프로그래밍을 위해
OpenCL C++에서 제거된 C++ 14 기능

Exceptions, Allocate/Release memory, Virtual functions 그리고 abstract classes Function pointers, Recursion 그리고 goto

Classes, lambda functions, templates, operator overloading etc…

- 빠르고 세련된 코드 공유 - 재사용 가능한 디바이스 라이브러리 및 컨테이너들
- 템플릿을 통해 적응력이 뛰어난 소프트웨어를 위한 메타 프로그래밍이 가능합니다.
- Lambda는 중첩/동적 병렬 처리를 구현하는데 사용되었습니다.

데이터 병렬 프로그래밍에 최적화된
C++ 11 기반 표준 라이브러리
- Atomics, 메타 프로그래밍 및 유형 특성, 수학 함수 ...
- 추가된 새로운 라이브러리 기능 : 작업 항목 및 작업 그룹 기능, 동적 병렬 처리, 이미지 및 파이프 기능 ...

OpenCL 구현회사들

- Xilinx, Inc.
- Vivante Corporation
- Texas Instruments
- Samsung Electronics
- STMicroelectronics International NV
- QUALCOMM
- NVIDIA Corporation
- MediaTek Inc
- Marvell
- Intel
- Imagination Technologies
- IBM Corporation
- Creative Labs
- Arm Limited
- Apple, Inc.
- Altera Corporation
- AMD


여기까지가 OpenCL 커뮤니티에서 참고해서 작성된 OpenCL에 대한 설명입니다.

아마도 간단하게 이해를 원하시는 분들이 있을거라고 생각합니다.
그런 분들은 P
arallel Computing, Parallel programming에 대해서 확인을 해보시기 바랍니다.

Serial Computing vs Parallel ComputingSerial programming vs Parallel programming에 대한 차이를 보면 OpenCL이 왜 생겨났는지에 대한 궁금증이 해결 되셨을 것입니다.

많은 Data를 고속으로 처리해야되는 요구가 시장에서 발생했고 그것을 지원하고 프로세서들 개발되었습니다.  CPU, GPU, FPGA 등에서 시장 요구 사항을 충족 시키고자 제조사별로 다양한 방법으로 Programming Language/Library가 지원이 되었을 것입니다. 하지만, 시장은 좀더 쉽고 편한 방법에 대한 욕구가 발생했고 그것을 다시 충족시키기 위해서 OpenCL 같은 범용 표준이 탄생된 것으로 생각합니다. 

+ Recent posts