크로노스 그룹 OpenCL 2.2 잠정 표준 발표 병렬 프로그래밍을 위한 OpenCL C++ 커널 언어도 함께 공개

OpenCL C++을 보완하고 지원하기 위한 SYCL 2.2와 SPIR-V 1.1 잠정 표준안도 함께 발표

2016년 4월 18일, 비엔나, 국제 OpenCL 워크샵 (International Workshop on OpenCL)소프트웨어 및 하드웨어 산업계를 선도하는 기업들의 표준화 컨소시엄인 크로노스 그룹은 OpenCL™ 2.2, SYCL™ 2.2, SPIR-V™ 1.1의 잠정 표준을 공개한다고 발표했다. OpenCL 2.2는OpenCL C++ 커널 언어와 함께 병렬 프로그래밍의 생산성을 크게 향상시켜줄 것으로 기대된다. SYCL 2.2 는 호스트와 디바이사 코드를 하나의 소스 파일에 담을 수 있도록 해 OpenCL C++의 능력을 최대한 발휘할 수 있도록 해 줄 것이다. SPIR-V 1.1은 크로노스가 정의한 쉐이더와 컴퓨팅 커널 기능에 OpenCL C++를 완전하게 지원하기 위해 기능을  확장하였다. 이들 새 잠정 표준의 사양은 www.khronos.org 홈페이지에서 다운로드 받을 수 있으며 최종 인준 전까지 개발자와 구현 기관의 의견을 수렴하여 반영한다. 의견 개진은 https://forums.khronos.org/ 사이트를 이용하면 된다.

 “OpenCL 2.2에는 개발자들이 가장 많이 요구했던 OpenCL C++ 커널 언어를 채택하였다. 전체적으로 크로노스 그룹은 병렬처리 프로그래밍의 생산성을 증대시켜 줄 일련의 3개의 새로운 표준을 오늘 발표 하였다. 첫번째, OpenCL 2.2는 SPIR-V 1.1 과 함께 발표되어 OpenCL C++ 커널 언어를 크로노스가 정의한 중간 표현 언어를 지원할 수 있게 되었다. 또한 SYCL 2.2는 OpenCL 2.2에 하나의 소스코드로 된 C++ 프로그래밍을 가능하게 해 줄 것이다.” 닐 트레빗, 크로노스 그룹 회장 및 OpenCL 워킹 그룹 의장 

OpenCL 2.2 소개
OpenCL 2.2 은  OpenCL C++ 커널 언어를  C++14 표준의 정적인 부분 집합으로 정의하였다. OpenCL C++ 에는 클래스, 템플릿, 람다 표현식, 함수 오버로드와 많은 생성자가 제네릭 프로그래밍과 메타 프로그래밍을 통해 병렬 프로그래밍 생산성을 높이기 위해 포함되었다.

OpenCL 라이브러리 함수는 C++ 언어의 장점을 이용할 수 있게 됨으로써  atomics, iterators, 이미지, 샘플러, 파이프, 그리고 디바이스 큐 빌트인 자료형  주소 공간과 같은 기능을 사용할 때에도 안전성과 정의되지 않는 결과를 줄일 수 있게 되었다.

파이프 저장공간은 OpenCL 2.2 의 새로운 디바이스-측 자료형으로 컴파일 할 때 알고 있는 크기와 자료형의 연결을 만들어 주고, 효율적인 디바이스-스코프의 통신을 커널간에 가능하게 해 주어, FPGA 구현에 유용하게 사용될 수 있다.

OpenCL 2.2는 코드를 생성하는데 개선된 최적화 기능을 포함하고 있다. 응용은 SPIR-V 컴파일 시 특수한 상수의 값을 설정할 수 있고, 새로운 쿼리가 프로그램 스코프의 전역 객체들의 non-trivial constructors 와 destructors를 점검할 수 있다.

SYCL 2.2 소개
SYCL 2.2는 호스트와 디바이스 코드를 하나의 파일로 만들어 줌으로써 OpenCL 2.2 능력을 상승시켜 주는 역할을 한다. SYCL는 C ++ 표준의 방향으로 OpenCL의 하드웨어 기능을 일관되게 맞추어 줌으로써, 개발자들은 독점적 또는 비표준 코드를 작성하지 않고도, 아주 작은 OpenCL 1.2 임베디드 디바이스에서 부터 가장 진보된 OpenCL을 2.2 가속기에 컴퓨팅 장치의 모든 기능을 최대한 활용하는 C ++ 템플릿 라이브러리를 작성할 수 있게 된다. 크로노스 주관을 개발된 SYCL을 위한 오픈 소스 C ++ 17 병렬 STL은 차기 C++ 표준이 공유 가상 메모리, 제네릭 포인터와 디바이스측 enqueue와 같은 OpenCL 2.2 기능을 지원할 수 있도록 할 것이다.

OpenCL C++와 SYCL 사이에 이제 개발자들에게 두개의 C++ 접근이 제공된다. 기기 측 커널 소스 코드 및 호스트 코드를 분리하려는 개발자를 에게는 C ++ 커널 언어는 최선의 선택이 될 수 있다. 이것은 현재 OpenCL C 에서 채택된 방식일 뿐만 아니라, 그래픽 소프트웨어 쉐이더에서 널리 채택 된 접근법이다. 이른바 ‘단일 소스’ C++라는 또 다른 방법은 SYCL, OpenMP와 C++ 17 병렬 STL 가 채택한 접근 방식과 이다. SYCL 및 C++ 커널 언어를 모두 정의하는 방법으로, 크로노스는 개발자에게 최대의 선택을 제공하면서도, 두 사양을 일치 될 때 까지, 그 코드는 쉽게 이러한 보완적인 접근 방법 사이에 공유 할 수 있다.

Andrew Richards, CEO of Codeplay and chair of the SYCL working group – “우리 Codeplay는 진보된 이종 프로세서 솔루션을 가능하게 하는 개방형 표준을 계속 지지하고 진화를 주도할 것입니다. 비전 응용 프로그램을 모바일에서 가속하고, 클라우드, IoT와 자동차 ADAS는 병렬 소프트웨어 개발 과정 전체를 단순화 해줄 개선된 크로노스의 오픈 표준의 큰 혜택을 얻게 될 것입니다.  

SPIR-V 1.1 소개
SPIR-V (Standard Portable Intermediate Representation)은 최초의 개방형, 다중 API 중간 표현 언어 표준으로 병렬 컴퓨팅과 그래픽스 네이티브 표현을 할 수 있다. SPIR-V 1.1은 이제 OpenCL 2.2의 OpenCL C ++의 모든 커널 언어 기능을 지원한다. 여기에는 constructors와 destructors를 지원하는 initializer 및 finalizer 함수 실행 모드가 포함된다. SPIR-V 1.1은 또한 named barriers, subgroup execution, 및 program scope pipes를 지원함으로써, 커널 프로그램의 표현성을 향상시켜 준다.

특별 상수는, 이전에 이미 VULKAN™ 용 SPIR-V 1.0 그래픽 쉐이더와 OpenCL 커널 프로그램의 SPIR-V 1.1에서 사용할 수 있었다. 이 기능은, 실행할 때 특정되는 설정을 컴파일시 프로그램에 포함하는 방식을 통해 하나의 SPIR-V 모듈로 여러 그룹의 OpenCL 커널 프로그램을 매개 변수화 해서 표현할 수 있게 해준다. 이것은 다른 컴파일 설정으로 즉석에서 제공되는 프로그램의 크기 나 응용 프로그램 시작 시간에 엄청난 비용 절감을 선도, 장치 프로그램의 여러 변종을 제공하거나 소스를 컴파일 할 필요가 없습니다.

 “OpenCL C++는 전체 산업에 플러스-플러스 효과를 줄 것입니다. OpenCL 워킹그룹은 개발자들의 중요한 피드백에 기반해서 OpenCL C++에 C++의 용어와 스타일을 유지하는데 성공했습니다. 최대의 성능과 코드의 아름다운 둘 모두를 원하는 개발자들에게는 아주 큰 선물입니다. 이를 우리 YetiWare의 OpenCL 교육 프로그램에 바로 적용할 예정입니다.” - AJ Guillon, founder and chief technical officer, YetiWare Inc.

크로노스 그룹 소개
크로노스 그룹은 산업계의 컨소시엄으로서, 병렬 컴퓨팅, 컴퓨터 그래픽스, 컴퓨터 비전, 센서 처리와 동적 미디어 등에 대한 저작과 가속을 위한 개방형 표준을 제정하고 있다. 크로노스의 표준에는 Vulkan™, OpenGL®, OpenGL® ES, WebGL™, OpenCL™, SPIR™, SYCL™, WebCL™, OpenVX™, OpenMAX™, OpenVG™, OpenSL ES™, StreamInput™, COLLADA™ 및 glTF™  등이 있으며, 회원사로 참여하면 표준의 제정에 기여하고, 관련 투표권을 갖게 되며, 일반에 공개되기 앞서 표준 문서에 접근할 수 있는 권리를 갖게 된다. 이를 통해 회원사는 다른 기업에 앞서 관련 제품을 개발하고 생산할 수 있는 기회를 가질 수 있다. 상세한 정보는 www.khronos.org 에서 얻을 수 있다.

###

Khronos, Vulkan, DevU, StreamInput, SPIR, SPIR-V, SYCL, WebGL, WebCL, COLLADA, OpenKODE, OpenVG, OpenVX, EGL, glTF, OpenSL ES 및 OpenMAX 는 Khronos Group Inc. 의 등록상표입니다.  ASTC는 ARM Holdings PLC의 등록상표입니다. OpenCL 은 Apple Inc.의 등록 상표이며  OpenGL은 Silicon Graphics International의 등록 상표이며, OpenGL ES and OpenGL SC 로고는 Silicon Graphics International 상표이며, 크로노스 그룹에 라이선스 허여되었습니다. 기타 회사명, 제품명 등은 각 상표를 보유하고 있는 기업의 등록 상표 입니다.