OpenCL
OpenCL![]() |
![]() | 이 기사는 대부분의 독자들이 이해하기에는 너무 전문적일 수 있다.. (2021년 ( 템플릿메시지 및 시기 ) 세부사항을 이해할 수 |
![]() | |
원저작자 | 애플사 |
---|---|
개발자 | 크로노스 그룹 |
초기 릴리즈 | 2009년 8월 28일, | 전(
안정된 릴리스 | 3.0.11[1] / 2022년 5월 , 전( |
기입처 | C++ 바인딩이 있는 C |
운영 체제 | Android(벤더 의존),[2] FreeBSD,[3] Linux, macOS(Pocl 경유), Windows |
플랫폼 | ARMv7, ARMv8,[4] 셀, IA-32, 전원, x86-64 |
유형 | 이종 컴퓨팅 API |
면허증. | OpenCL 사양 라이선스 |
웹 사이트 | www |
패러다임 | 필수(절차적), 구조화(C++ 한정) 객체 지향 범용 프로그래밍 |
---|---|
가족 | C |
안정된 릴리스 | |
타이핑 분야 | 정적, 약, 매니페스트, 공칭 |
구현 언어 | 구현 고유의 |
파일 이름 확장자 | .cl .clcpp |
웹 사이트 | www |
주요 구현 | |
AMD, Galium Compute, IBM, Intel NEO, Intel SDK, Texas Instruments, Nvidia, POCL, Arm | |
영향을 받다 | |
C99, CUDA, C++14, C++17 |
OpenCL(Open Computing Language)은 중앙처리장치(CPU), 그래픽처리장치(GPU), 디지털신호처리장치(DSP), 필드프로그래머블게이트어레이(FPGA) 및 기타 프로세서 또는 하드웨어 액셀러레이터로 구성된 이기종 플랫폼 간에 실행되는 프로그램을 쓰기 위한 프레임워크입니다.OpenCL은 이러한 장치를 프로그래밍하기 위한 프로그래밍 언어(C99, C++14 및 C++17에 기반)와 플랫폼을 제어하고 컴퓨팅 장치에서 프로그램을 실행하기 위한 애플리케이션 프로그래밍 인터페이스(API)를 지정합니다.OpenCL은 태스크 기반 및 데이터 기반 병렬 처리를 사용하여 병렬 컴퓨팅을 위한 표준 인터페이스를 제공합니다.
OpenCL은 비영리 기술 컨소시엄 Khronos Group이 유지하는 개방형 표준입니다.적합 구현은 Altera, AMD, ARM, Creative, IBM, Imagination, Intel, Nvidia, Qualcomm, Samsung, Vivante, Xilinx 및 ZiLABS에서 [8][9]이용할 수 있습니다.
개요
OpenCL은 컴퓨팅 시스템을 CPU(중앙 처리 장치) 또는 GPU(그래픽 처리 장치)와 같은 "액셀러레이터"가 호스트 프로세서(CPU)에 연결된 여러 개의 컴퓨팅 장치로 구성한다고 봅니다.이것은 프로그램을 작성하기 위한 C와 같은 언어를 정의합니다.OpenCL 장치에서 실행되는 함수를 "커널"[10]: 17 이라고 합니다.일반적으로 하나의 컴퓨팅 디바이스는 여러 개의 컴퓨팅 유닛으로 구성되며, 이들 유닛은 여러 개의 프로세싱 엘리먼트(PE)로 구성됩니다.단일 커널 실행은 전체 또는 다수의 PE에서 병렬로 실행할 수 있습니다.어떻게 컴퓨팅 장치를 계산하다 단위로 그리고 PEs 공급 업체에; 컴퓨팅 장치의"핵심". 하지만 노심의 개념을 가로질러 장치 OpenCL(또는 내에서도 범주의"CPU")[11]에서 지원하는 모든 형식을 찾기 힘들:49–50과 컴퓨팅 장치의 숫자가 선심의 수에 c. 일치하지 않을 것으로 생각될 수 있다 세분한 것건물에 laimed(실제로 SIMD [12]차선을 계산할 수 있는) 마케팅 자료입니다.
C와 같은 프로그래밍 언어에 더해 OpenCL은 호스트에서 실행 중인 프로그램이 컴퓨팅 디바이스에서 커널을 실행하고 디바이스 메모리를 관리할 수 있는 애플리케이션 프로그래밍 인터페이스(API)를 정의합니다.이 인터페이스에서는 (최소한 개념적으로는) 호스트 메모리와 분리되어 있습니다.OpenCL 언어의 프로그램은 런타임에 컴파일되므로 OpenCL을 사용하는 애플리케이션은 다양한 호스트 디바이스의 [13]구현 간에 이식할 수 있습니다.OpenCL 표준은 C 및 C++용 호스트 API를 정의합니다.서드파티 API는 [14]Python, Java, Perl,[15] D 및 같은[16] 다른 프로그래밍 언어 및 플랫폼용으로 존재합니다.NET.[11]: 15 OpenCL 표준의 실장은 C 및 C++용 API를 실장하는 라이브러리와 타겟 컴퓨팅 디바이스용 OpenCL C 컴파일러로 구성됩니다.
OpenCL 프로그래밍 모델을 다른 언어로 열거나 커널 소스를 검사로부터 보호하기 위해 SPIR([17]Standard Portable Intermediate Representation)을 프런트 엔드 컴파일러와 OpenCL 백엔드 간에 커널을 출하하는 타겟에 의존하지 않는 방법으로 사용할 수 있습니다.
최근 Kronos Group은 프로그래밍 생산성을 향상시키기 위해 순수 C++17에 기반한 단일 소스 eDSL로서 OpenCL의 상위 레벨 프로그래밍 모델인 SYCL을 [18]승인했습니다.C++ 커널에 관심이 있지만 SYCL 싱글 소스 프로그래밍 스타일에 관심이 없는 사용자는 "C++ for OpenCL"[19] 언어로 작성된 컴퓨팅 커널 소스와 함께 C++ 기능을 사용할 수 있습니다.
메모리 계층
OpenCL은 컴퓨팅 디바이스의 [13]4레벨 메모리 계층을 정의합니다.
- 글로벌 메모리: 모든 처리 요소에 의해 공유되지만 액세스 지연이 높습니다(__global);
- 읽기 전용 메모리: 더 작고 지연 시간이 짧으며 호스트 CPU에서 쓰기 가능하지만 컴퓨팅 디바이스에서는 쓰기 불가능(_정수)
- 로컬 메모리: 처리 요소 그룹에 의해 공유됩니다(_local).
- 패킷 단위의 프라이빗 메모리(메모리, __private).
모든 디바이스가 하드웨어에서 이 계층의 각 레벨을 구현할 필요는 없습니다.계층 내 다양한 수준 간의 일관성은 완화되며 명시적인 동기화 구조, 특히 장벽에 의해서만 강제됩니다.
디바이스는 호스트 [13]CPU와 메모리를 공유할 수도 있고 공유할 수도 없습니다.호스트 API는 디바이스 메모리 버퍼에 대한 핸들을 제공하고 호스트와 디바이스 간에 데이터를 주고받는 기능을 제공합니다.
OpenCL 커널 언어
컴퓨팅 커널을 쓰는 데 사용되는 프로그래밍 언어를 커널 언어라고 합니다.OpenCL은 C/C++ 기반의 언어를 채택하여 디바이스에서 실행되는 커널 계산을 지정하고 액셀러레이터의 이기종 하드웨어 자원에 대한 효율적인 매핑을 지원합니다.전통적으로 OpenCL C는 OpenCL 표준에서 액셀러레이터를 프로그래밍하기 위해 사용되었으며, 나중에 OpenCL C에서 모든 기능을 상속받았지만 커널 소스에서 C++ 기능을 사용할 수 있는 OpenCL 커널 언어가 개발되었습니다.
OpenCL C 언어
OpenCL[20] C는 OpenCL의 디바이스 모델에 적합하도록 조정된 C99 기반의 언어 방언입니다.메모리 버퍼는 메모리 계층의 특정 레벨에 존재하며 포인터는 영역 한정자 __global, __local, __constant 및 __private로 주석을 붙입니다.메인 함수를 가진 장치 프로그램 대신 OpenCL C 함수는 호스트 프로그램에서 호출되는 프로그램의 진입점임을 알리기 위해 __커널로 표시된다.함수 포인터, 비트 필드 및 가변 길이 배열은 생략되며 재귀는 [21]금지됩니다.C 표준 라이브러리는 수학 프로그래밍에 맞게 조정된 사용자 정의 표준 함수 세트로 대체되었습니다.
OpenCL C는 벡터 유형 및 연산, 동기화 및 기능과의 병행 사용을 용이하게 하여 워크 항목 및 워크 그룹과 함께 작업할 [21]수 있도록 확장되었습니다.특히 OpenCL은 C의 대응하는 타입과 같은 스칼라 타입 외에 float4(단정밀 플로트의 4벡터) 등의 고정길이 벡터 타입을 제공한다.이러한 벡터 타입은 다양한 베이스 [20]: § 6.1.2 타입에 대해 길이 2, 3, 4, 8, 16으로 이용할 수 있다.이러한 유형의 벡터화된 작업은 CPU에서 [13]OpenCL 프로그램을 실행할 때 SSE 또는 VMX와 같은 SIMD 명령 집합에 매핑됩니다.다른 특수 유형에는 2-d 및 3-d 이미지 [20]: 10–11 유형이 있습니다.
예: 행렬-벡터 곱셈
다음은 OpenCL C의 행렬-벡터 곱셈 알고리즘입니다.
// A*x를 곱하여 결과를 y로 남깁니다. // A는 줄자 매트릭스입니다.즉, (i,j) 요소는 A[i*ncols+j]에 있습니다. __개요 무효 매트(__글로벌 컨스턴트 흘러가다 *A, __글로벌 컨스턴트 흘러가다 *x, 설치하다 인식되지 않음, __글로벌 흘러가다 *y) { size_t i = get_global_id(0); // 행 인덱스로 사용되는 글로벌 ID __글로벌 흘러가다 컨스턴트 *a = &A[i*인식되지 않음]; // i번째 행 포인터 흘러가다 합 = 0.f; // 도트 제품용 축전지 위해서 (size_t j = 0; j < > 인식되지 않음; j++) { 합 += a[j] * x[j]; } y[i] = 합; }
커널 함수 matvec은 각 호출에서 행렬 A와 벡터 x의 단일 행의 닷 곱을 계산합니다.
- i i ,: i , { y { i } =_ { i , : } \ x = \ _ { } _ { , } _ { }。
이를 완전한 행렬-벡터 곱셈으로 확장하기 위해 OpenCL 런타임은 커널을 행렬의 행 위에 매핑합니다.호스트 측에서는 clEnqueueNDRangeKernel 함수가 이를 수행합니다.이 함수는 커널을 실행하는 인수, 인수 및 매트릭스A의 행 수에 대응하는 다수의 작업 항목을 인수로서 사용합니다.
예: FFT 계산
이 예에서는 고속 푸리에 변환(FFT) 구현을 로드하여 실행합니다.실장은 다음과 같습니다.[22]코드는 OpenCL 라이브러리에 사용 가능한 첫 번째 그래픽 카드를 요청하고 읽기 및 쓰기용 메모리 버퍼를 생성하고(그래픽 카드의 관점에서), FFT 커널을 컴파일한 다음 마지막으로 커널을 비동기적으로 실행합니다.이 예에서는 변환 결과를 읽지 않습니다.
#실패하다 <stdio.h> #실패하다 <time.h> #실패하다 「클릭/오픈클릭.h" #NUM_ENTRIES 1024 정의 인트 주된() // (int argc, const char* argv[]) { // 상수 // 커널의 소스 코드가 문자열로 표시됩니다. // 파일 내에 있습니다. "fft1D_1024_kernel_src.cl"상세한 것에 대하여는, 다음의 리스트를 참조해 주세요. 컨스턴트 차 *커널 소스 = #실패하다 "fft1D_1024_커널_src.cl" ; // 사용 가능한 GPU 검색 컨스턴트 cl_uint 숫자 = 1; clGet디바이스아이디(특수한 순서, CL_DEVICE_TYPE_GPU, 0, 특수한 순서, (cl_uint*)&숫자); cl_device_id 장치들[1]; clGet디바이스아이디(특수한 순서, CL_DEVICE_TYPE_GPU, 숫자, 장치들, 특수한 순서); // GPU 디바이스를 사용하여 컴퓨팅 컨텍스트 생성 cl_interface 맥락 = clCreateContextFrom유형(특수한 순서, CL_DEVICE_TYPE_GPU, 특수한 순서, 특수한 순서, 특수한 순서); // 명령어 큐 생성 clGet디바이스아이디(특수한 순서, CL_DEVICE_TYPE_DEFAULT, 1, 장치들, 특수한 순서); cl_command_module 큐잉 = clCreateCommandQueue(맥락, 장치들[0], 0, 특수한 순서); // 버퍼 메모리 개체 할당 cl_mem 메모리[] = { clCreateBuffer(맥락, CL_MEM_READ_오직. CL_MEM_COPY_HOST_PTR, 크기(흘러가다) * 2 * 엔트리의 수, 특수한 순서, 특수한 순서), clCreateBuffer(맥락, CL_MEM_READ_WRITE, 크기(흘러가다) * 2 * 엔트리의 수, 특수한 순서, 특수한 순서) }; // 컴퓨터 프로그램 생성 // const char* fft1D_1024_커널_src[1] = { }; cl_program 프로그램. = clCreateProgramWithSource(맥락, 1, (컨스턴트 차 **)& 커널 소스, 특수한 순서, 특수한 순서); // 컴퓨터 프로그램 실행 파일 구축 clBuild 프로그램(프로그램., 0, 특수한 순서, 특수한 순서, 특수한 순서, 특수한 순서); // 컴퓨터 커널 생성 cl_interface 커널 = clCreateKernel(프로그램., "fft1D_1024", 특수한 순서); // args 값 설정 size_t local_work_size[1] = { 256 }; clSetKernelArg(커널, 0, 크기(cl_mem), (무효 *)&메모리[0]); clSetKernelArg(커널, 1, 크기(cl_mem), (무효 *)&메모리[1]); clSetKernelArg(커널, 2, 크기(흘러가다)*(local_work_size[0] + 1) * 16, 특수한 순서); clSetKernelArg(커널, 3, 크기(흘러가다)*(local_work_size[0] + 1) * 16, 특수한 순서); // 작업 항목 치수를 사용하여 N-D 범위 개체를 만들고 커널을 실행합니다. size_t global_work_size[1] = { 256 }; global_work_size[0] = 엔트리의 수; local_work_size[0] = 64; //Nvidia: 192 또는 256 clEnqueueNDRangeKernel(큐잉, 커널, 1, 특수한 순서, global_work_size, local_work_size, 0, 특수한 순서, 특수한 순서); }
파일 내의 실제 계산은 "fft1D_1024_kernel_src.cl"입니다([23]G80 아키텍처에 FFT를 장착하는 것에 근거합니다).
R"( // 이 커널은 길이 1024의 FFT를 계산합니다.1024 길이 FFT는 다음과 같이 분해됩니다. // 기수 16 함수, 다른 기수 16 함수, 그 다음 기수 4 함수로 호출 __개요 무효 FFT1D_1024 (__글로벌 플로트 2 *에, __글로벌 플로트 2 *나가., __로컬 흘러가다 *메모리, __로컬 흘러가다 *메모리) { 인트 조형물 = get_local_id(0); 인트 블록 Idx = get_group_id(0) * 1024 + 조형물; 플로트 2 데이터.[16]; // 글로벌 메모리에서 송수신되는 데이터의 인덱스를 시작합니다. 에 = 에 + 블록 Idx; 나가. = 나가. + 블록 Idx; 글로벌 로드(데이터., 에, 64); // 글로벌 읽기 병합 FFTRadix16 패스(데이터.); // 임플레이스 기수-16 패스 트위들 팩터물(데이터., 조형물, 1024, 0); // 로컬 메모리를 사용한 로컬 셔플 local Shuffle(데이터., 메모리, 메모리, 조형물, (((조형물 & 15) * 65) + (조형물 >> 4))); FFTRadix16 패스(데이터.); // 임플레이스 기수-16 패스 트위들 팩터물(데이터., 조형물, 64, 4); // 트위들 계수 곱셈 local Shuffle(데이터., 메모리, 메모리, 조형물, (((조형물 >> 4) * 64) + (조형물 & 15))); // 4 기수-4 함수 호출 FFTRadix4 패스(데이터.); // 기수-4 함수 번호 1 FFTRadix4 패스(데이터. + 4); // 기수-4 함수 번호 2 FFTRadix4 패스(데이터. + 8); // 기수-4 함수 번호 3 FFTRadix4 패스(데이터. + 12); // 기수-4 함수 번호 4 // 글로벌 쓰기 병합 글로벌 스토어(데이터., 나가., 64); } )"
OpenCL FFT의 완전한 오픈 소스 구현은 Apple [24]웹 사이트에서 확인할 수 있습니다.
OpenCL 언어용 C++
2020년에 Kronos는[25] 커뮤니티 주도의 OpenCL 프로그래밍[26] 언어용 C++로의 이행을 발표했습니다.이 언어는 기존의 OpenCL C 기능과 조합하여 C++17의 기능을 제공합니다.이 언어를 사용하면 OpenCL C와의 하위 호환성을 유지하면서 표준 C++에서 다양한 언어 기능을 활용할 수 있습니다.이것에 의해 OpenCL 커널 코드 개발자는 익숙한 프로그래밍 플로우 및 툴을 계속 사용할 수 있을 뿐만 아니라 OpenCL C에서 사용할 수 있는 기존 확장 기능과 라이브러리를 활용할 수 있기 때문에 C++ 기능으로 원활하게 이행할 수 있습니다.
언어의 의미론은 Khronos Group이 호스팅하는 OpenCL-Docs[27] 저장소의 릴리스에 게재된 문서에 기술되어 있지만 현재 Khronos Group에 의해 비준되지 않았습니다.C++ for OpenCL 언어는 스탠드아론 문서에 기재되어 있지 않으며, C++ 및 OpenCL C의 사양에 근거하고 있습니다.오픈 소스 Clang 컴파일러는 릴리즈 [28]9부터 OpenCL용 C++를 지원하고 있습니다.
OpenCL용 C++는 원래 Clang 컴파일러 확장으로 개발되어 릴리즈 [29]9에서 등장했습니다.OpenCL C와 밀접하게 연계되어 Clang 고유의 기능이 포함되어 있지 않기 때문에 문서는 다른 사양 및 레퍼런스 카드와 함께 Khronos Group에서 OpenCL-Docs[27] 저장소로 재호스트되었습니다.OpenCL 버전 1.0용 C++에 대해 설명하는 이 문서의 첫 번째 공식 릴리스는 2020년 [30]12월에 출판되었습니다.C++ for OpenCL 1.0은 C++17의 기능을 포함하고 있으며 OpenCL C 2.0과의 하위 호환성이 있습니다.이 문서의 진행 중인 초안은 Kronos [31]웹사이트에서 확인할 수 있습니다.
특징들
OpenCL용 C++는 중첩된 병렬 및 블록을 [32]제외한 OpenCL C의 대부분의 기능(구문학적 및 의미론적으로)을 지원합니다.단, C++와 C의 시멘틱스 차이와 관련된 일부 지원 기능에는 약간의 차이가 있습니다.예를 들어, C++는 암묵적인 타입 변환에 더 엄격하며 제한 타입 한정자를 [32]지원하지 않습니다.다음 C++ 기능은 C++ for OpenCL에서 지원되지 않습니다.가상 함수, dynamic_cast 연산자, 배치되지 않은 신규/삭제 연산자, 예외, 멤버 함수에 대한 포인터, 함수에 대한 참조, C++ 표준 [32]라이브러리입니다.C++ for OpenCL은 개별 메모리 영역(주소 공간)의 개념을 OpenCL C에서 C++ 기능(기능 캐스트, 템플릿, 클래스 멤버, 참조, 람다 함수, 연산자)으로 확장합니다.C++ 기능의 대부분은 커널 함수에는 사용할 수 없습니다.예를 들어, 파라미터 [32]타입의 임의의 클래스 레이아웃을 오버로드하거나 템플릿화할 수 없습니다.
예: 복소수 연산
다음 코드 스니펫은 C++ 기능을 편리하게 사용하여 OpenCL 언어용 C++에서 복소수 산술이 적용된 커널을 구현하는 방법을 보여줍니다.
// 복소수 계산을 수행할 수 있는 복합 클래스를 정의합니다. // T에 다른 타입을 사용하는 경우 다양한 정밀도 - 더블, 플로트, 하프 템플릿< >타이프네임 T> 학급 complex_t { T m_re; // 실제 컴포넌트. T m_im; // 가상 구성 요소입니다. 일반의: complex_t(T 참조., T 임): m_re{참조.}, m_im{임} {}; // 복소수 곱셈 연산자를 정의합니다. complex_t 교환입니다.*(컨스턴트 complex_t &다른.) 컨스턴트 { 돌아가다 {m_re * 다른..m_re - m_im * 다른..m_im, m_re * 다른..m_im + m_im * 다른..m_re}; } T 취득_re() 컨스턴트 { 돌아가다 m_re; } T 취득_im() 컨스턴트 { 돌아가다 m_im; } }; // 에서 읽은 복소수에 대한 곱셈을 계산하는 도우미 함수입니다. // 입력 버퍼 및 계산된 결과를 출력 버퍼에 저장합니다. 템플릿< >타이프네임 T> 무효 compute_module(__글로벌 T *에, __글로벌 T *나가.) { 자동 idx = get_global_id(0); // 각 작업 항목은 입력 버퍼에서 연속 4개 항목을 사용합니다. // - 복소수마다 2개씩. 자동 오프셋 = idx * 4; 자동 숫자 1 = complex_t{에[오프셋], 에[오프셋 + 1]}; 자동 숫자 2 = complex_t{에[오프셋 + 2], 에[오프셋 + 3]}; // 복소수 곱셈을 수행합니다. 자동 인식하다 = 숫자 1 * 숫자 2; // 모든 작업 항목은 출력 버퍼에 2개의 연속된 항목을 씁니다. 나가.[idx * 2] = 인식하다.취득_re(); 나가.[idx * 2 + 1] = 인식하다.취득_im(); } // 이 커널은 단정도 복소수 곱셈에 사용됩니다. __개요 무효 계산_sp(__글로벌 흘러가다 *에, __글로벌 흘러가다 *나가.) { compute_module(에, 나가.); } #ifdef cl_khr_fp16 // 이 커널은 다음과 같은 경우 복소수 곱셈에 사용됩니다. // 디바이스에서 지원됩니다. #pragma OPENCL EXTENSION cl_khr_fp16: 활성화 __개요 무효 계산_hp(__글로벌 반 *에, __글로벌 반 *나가.) { compute_module(에, 나가.); } #엔디프
툴링 및 실행 환경
OpenCL 언어용 C++는 OpenCL C 언어를 사용하는 것과 동일한 응용 프로그램 또는 라이브러리에 사용할 수 있습니다.다양한 C++ 언어 기능으로 인해 OpenCL용 C++로 작성된 애플리케이션은 OpenCL C로 작성된 애플리케이션보다 더 편리하게 복잡한 기능을 표현할 수 있으며, 특히 C++의 범용 프로그래밍 패러다임은 라이브러리 개발자들에게 매우 매력적입니다.
OpenCL 소스용 C++는 cl_ext_cx_for_opencl [33]확장을 지원하는 OpenCL 드라이버로 컴파일할 수 있습니다.Arm은 2020년 [34]12월에 이 연장에 대한 지원을 발표했습니다.그러나 OpenCL 디바이스에서 가속되는 알고리즘의 복잡성이 증가함에 따라 Clang[35] 등의 독립 실행형 컴파일러를 사용하여 오프라인에서 C++ for OpenCL 커널을 실행 가능한 바이너리 형식이나 SPR-V [36]등의 휴대용 바이너리 형식으로 컴파일하는 애플리케이션이 증가할 것으로 예상됩니다.이러한 실행 파일은 전용 OpenCL [37]API를 사용하여 OpenCL 응용 프로그램 실행 중에 로드할 수 있습니다.
OpenCL 1.0용 C++ 소스에서 컴파일된 바이너리는 OpenCL 2.0 준거 디바이스에서 실행할 수 있습니다.이러한 커널 소스에 사용되는 언어 기능에 따라 이전 OpenCL 버전 또는 OpenCL 3.0을 지원하는 장치에서도 실행할 수 있습니다.
OpenCL용 C++로 작성된 OpenCL 드라이버 커널을 제외하고 OpenCL C 커널과 마찬가지로[38] clspv 컴파일러 및[39] clvk 런타임 계층을 사용하여 Vulkan 디바이스에서 실행할 수 있습니다.
투고
C++ for OpenCL은 문서에 [31]기재되어 있는 기여자 커뮤니티에 의해 개발된 오픈 언어입니다.언어 의미 정의 또는 오픈 소스 툴링 지원에 대한 새로운 기여는 주요 설계 철학과 일치하고 숙련된 [19]기여자에 의해 검토되고 승인되는 즉시 관심 있는 모든 사람으로부터 받아들여집니다.
역사
OpenCL은 처음에 상표권을 보유한 Apple Inc.에 의해 개발되었으며 AMD, IBM, Qualcomm, Intel 및 Nvidia의 기술 팀과 협력하여 초기 제안으로 수정되었습니다.애플은 이 최초 제안서를 크로노스 그룹에 제출했다.Khronos Compute Working Group은 2008년 6월 16일 CPU, GPU, 임베디드 프로세서 및 소프트웨어 회사의 대표자로 구성되었습니다[40].이 그룹은 [41]2008년 11월 18일까지 OpenCL 1.0 사양의 기술적인 세부사항을 완성하기 위해 5개월 동안 작업했습니다.이 기술사양서는 Khronos 회원들에 의해 검토되어 [42]2008년 12월 8일 일반 공개가 승인되었습니다.
OpenCL 1.0
OpenCL 1.0은 2009년 8월 28일 Mac OS X Snow Leopard와 함께 출시되었습니다.Apple 보도자료에 [43]따르면:
Snow Leopard는 Open Computing Language(OpenCL)를 통해 최신 하드웨어에 대한 지원을 더욱 확장합니다.이것에 의해, 이전에는 그래픽 애플리케이션만이 이용할 수 있던 방대한 기가플롭스의 GPU 컴퓨팅 파워를 어느 애플리케이션에서도 활용할 수 있습니다.OpenCL은 C 프로그래밍 언어에 기반하며 개방형 표준으로 제안되었습니다.
AMD는 Stream [44][45]프레임워크에서 폐지된 Close to Metal 대신 OpenCL을 지원하기로 결정했습니다.RapidMind는 개발 플랫폼 아래에 OpenCL을 채택하여 하나의 인터페이스를 [46]통해 여러 벤더의 GPU를 지원한다고 발표했습니다.2008년 12월 9일, Nvidia는 OpenCL 1.0 사양에 대한 완전한 지원을 GPU Computing [47]Toolkit에 추가한다고 발표했습니다.2009년 10월 30일, IBM은 XL [48]컴파일러의 일부로 첫 번째 OpenCL 구현을 발표했습니다.
그래픽 카드의 OpenCL을 통상의 [49]CPU에 대해서 사용하면, 1000계수까지의 계산을 고속화할 수 있습니다.다음 버전의 OpenCL의 중요한 기능은, 1.0에서는 배정밀 또는 반정밀 [50]연산과 같이 옵션입니다.
OpenCL 1.1
OpenCL 1.1은 2010년 6월[51] 14일 Khronos Group에 의해 승인되었으며 다음과 같은 뛰어난 병렬 프로그래밍 유연성, 기능 및 성능을 위한 중요한 기능이 추가되었습니다.
- 3 컴포넌트 벡터 및 추가 이미지 포맷을 포함한 새로운 데이터 유형
- 여러 호스트 스레드로부터의 명령어 처리 및 여러 디바이스에서의 버퍼 처리
- 1D, 2D 또는 3D 직사각형 영역의 읽기, 쓰기 및 복사를 포함한 버퍼 영역에 대한 작업
- 명령 실행을 구동 및 제어하기 위한 이벤트 사용 강화
- 정수 클램프, 셔플 및 비동기 스트라이드 복사와 같은 추가 OpenCL 내장 C 기능
- OpenCL 이벤트와 OpenGL 이벤트를 연계하여 이미지와 버퍼를 효율적으로 공유함으로써 OpenGL 상호 운용성을 향상시킵니다.
OpenCL 1.2
2011년 11월 15일 Khronos Group은 OpenCL 1.2 [52]사양을 발표했습니다.이 사양은 퍼포먼스와 병렬 프로그래밍 기능 면에서 이전 버전에 비해 상당한 기능을 추가했습니다.가장 주목할 만한 기능은 다음과 같습니다.
- 디바이스 파티셔닝: 디바이스를 서브디바이스로 분할하여 작업 할당을 개별 컴퓨팅 유닛에 할당할 수 있도록 하는 기능.이는 시간상 중요한 태스크의 지연을 줄이기 위해 디바이스 영역을 예약하는 데 유용합니다.
- 오브젝트 분리 컴파일 및 링크: OpenCL을 외부 라이브러리로 컴파일하여 다른 프로그램에 포함시키는 기능.
- 확장 이미지 지원(옵션): 1.2는 1D 이미지 및 1D/2D 이미지 어레이를 지원합니다.또한 OpenGL 공유 확장을 통해 OpenGL 1D 텍스처 및 1D/2D 텍스처 어레이를 사용하여 OpenCL 이미지를 생성할 수 있게 되었습니다.
- 내장된 커널: 특정 고유 기능을 포함하는 커스텀 디바이스는 이제 OpenCL 프레임워크에 보다 밀접하게 통합됩니다.커널을 호출하여 기본 하드웨어의 특수 또는 프로그래밍 불가능한 측면을 사용할 수 있습니다.예를 들어 비디오 부호화/복호화 및 디지털 신호 프로세서가 있습니다.
- DirectX 기능:DX9 미디어 서페이스 공유를 통해 OpenCL과 DX9 또는 DXVA 미디어 서페이스 간에 효율적으로 공유할 수 있습니다.마찬가지로 DX11의 경우 OpenCL과 DX11 표면 간의 심리스 공유가 가능합니다.
- 단정도 부동소수점 산술의 IEEE 754 준거를 강제하는 기능: OpenCL에서는 디폴트로는 분할, 역수 및 제곱근 연산의 단정도 버전이 IEEE 754가 [53]요구하는 올바른 반올림 값보다 정확도가 떨어집니다.프로그래머가 컴파일러에 "-cl-fp32-correctly-rounded-divide-sqrt" 명령줄 인수를 전달한 경우 OpenCL 구현이 이를 지원하는 경우 이들 3가지 연산은 IEEE 754 요건에 따라 계산되며 OpenCL 구현이 이들 연산을 지원하지 않는 경우 컴파일러에 실패합니다.IEEE 754 [53]사양에 정의되어 있습니다.이 기능은 OpenCL 구현을 쿼리하여 이러한 작업을 IEEE 754 [53]정확도로 수행할 수 있는지 여부를 판단하는 기능으로 보완됩니다.
OpenCL 2.0
2013년 11월 18일 Khronos Group은 최종 OpenCL 2.0 [54]사양의 비준 및 공개를 발표했습니다.OpenCL 2.0 업데이트 및 추가 내용은 다음과 같습니다.
- 공유 가상 메모리
- 중첩 병렬화
- 범용 주소 공간
- 이미지 (옵션, 3D 이미지 포함)
- C11 아토믹스
- 파이프
- Android 설치 가능한 클라이언트 드라이버 확장
- 옵션의 cl_khr_fp16 확장으로 반 정도 확장
- cl_double: 배정도 IEEE 754 (옵션)
OpenCL 2.1
OpenCL 2.1 잠정 사양의 비준 및 릴리스는 2015년 3월 3일 샌프란시스코에서 열린 게임 개발자 회의에서 발표되었습니다.2015년 [55]11월 16일에 개봉되었다.기존의 OpenCL C 커널 언어에 대한 지원을 유지하면서 C++14의 서브셋에 기반한 OpenCL C++ 커널 언어를 도입하였다.Vulkan과 OpenCL 2.1은 중간 표현으로 SPER-V를 공유하여 고급 언어 프런트 엔드가 공통 컴파일 대상을 공유할 수 있도록 합니다.OpenCL API 업데이트는 다음과 같습니다.
- 추가 서브그룹 기능
- 커널 개체 및 상태 복사
- 저지연 디바이스 타이머 쿼리
- 런타임별 SPR-V 코드 수집
- 대기열에 대한 실행 우선 순위 힌트
- 호스트로부터의 제로 사이즈 디스패치
AMD, ARM, Intel, HPC 및 YetiWare는 OpenCL 2.1 [56][57]지원을 선언했습니다.
OpenCL 2.2
OpenCL 2.2는 OpenCL C++ 커널 언어를 핵심 사양으로 하여 병렬 프로그래밍 생산성을 [58][59][60]대폭 향상시킵니다.그것은 [61]2017년 5월 16일에 개봉되었다.Maintenance Update는 [62]버그 수정과 함께 2018년 5월에 출시되었습니다.
- OpenCL C++ 커널 언어는 C++14 표준의 정적 서브셋으로 클래스, 템플릿, 람다 표현식, 함수 오버로드 및 일반 및 메타 프로그래밍을 위한 기타 많은 구조를 포함합니다.
- OpenCL C++ 커널 언어를 완전히 지원하는 새로운 Khronos SPIR-V 1.1 중간 언어를 사용합니다.
- OpenCL 라이브러리 함수는 이제 C++ 언어를 사용하여 아토믹스, 반복기, 이미지, 썬플러, 파이프, 디바이스 큐 삽입 유형 및 주소 공간 등의 기능에 액세스할 때 안전성을 높이고 정의되지 않은 동작을 줄일 수 있습니다.
- 파이프 스토리지는 OpenCL 2.2의 새로운 디바이스 측 타입으로 컴파일 시에 접속 크기와 타입을 알 수 있으므로 FPGA 구현에 도움이 되며 커널 간의 효율적인 디바이스 범위 통신을 가능하게 합니다.
- OpenCL 2.2에는 생성된 코드의 고도의 최적화를 위한 기능도 포함되어 있습니다.애플리케이션은 SPR-V 컴파일 시 전문화 상수 값을 제공할 수 있으며, 새로운 쿼리는 프로그램 범위의 글로벌 객체의 중요하지 않은 컨스트럭터와 디스트럭터를 검출할 수 있으며, 사용자 콜백은 프로그램 릴리스 시 설정할 수 있습니다.
- OpenCL 2.0 지원 하드웨어에서 실행됩니다(드라이버 업데이트만 필요).
OpenCL 3.0
OpenCL 3.0 사양은 2020년 4월부터 프리뷰에 들어간 후 2020년 9월 30일에 출시되었습니다.OpenCL 1.2 기능은 필수 기준이 되었으며 OpenCL 2.x 및 OpenCL 3.0 기능은 모두 옵션으로 지정되었습니다.이 사양은 OpenCL C 언어를 유지하고 OpenCL C++ 커널 언어를 사용하지 않으며, C++17 및 SPR-V 중간 [63][64][65]코드의 서브셋을 구현하는 Clang/LLVM 컴파일러에 기반한 C++ for OpenCL[19] 언어로 대체됩니다.IWOCL [66]21에서는 일부 Khronos openCL 확장 기능을 갖춘 OpenCL용 C++ 버전 3.0.7이 제공되었습니다.실제는 3.0.11로 새로운 확장과 수정이 몇 가지 있습니다.NVIDIA는 Khronos OpenCL Working Group과 긴밀히 연계하여 세마포어와 메모리 [67]공유를 통해 Vulkan Interop을 개선했습니다.
로드맵
OpenCL 2.2를 출시할 때 Khronos Group은 OpenCL이 가능한 한 Vulkan과 융합하여 [68][69]두 API 모두에서 OpenCL 소프트웨어를 유연하게 도입할 수 있도록 하겠다고 발표했습니다.이는 이제 Adobe의 Premiere Rush가 clspv[38] 오픈 소스 컴파일러를 사용하여 [70]Android에 배포하기 위해 벌칸 런타임에 실행할 상당한 양의 OpenCL C 커널 코드를 컴파일한 것으로 입증되었습니다.OpenCL은 'OpenCL Next'를 개발하여 2020년 출시를 목표로 하는 등 벌칸과는 독립적인 미래 로드맵을 가지고 있다.OpenCL Next는 Vulkan/OpenCL Interop, Scratch-Pad 메모리 관리, 확장 서브그룹, SPR-V 1.4 수집 및 SPR-V 확장 디버깅 정보 등의 확장 기능을 통합할 수 있습니다.OpenCL은 또한 여러 가속기 [71]유형에서 유연한 배치를 위해 Vulkan과 같은 로더와 레이어 및 '유연한 프로파일'을 고려하고 있습니다.
오픈 소스 구현
OpenCL은 헤더 세트와 런타임에 로드되는 공유 개체로 구성됩니다.런타임에서 지원할 필요가 있는 벤더 클래스별로 플랫폼에 설치 가능한 클라이언트 드라이버(ICD)를 설치해야 합니다.예를 들어 Linux 플랫폼에서 Nvidia 디바이스를 지원하려면 OpenCL 런타임(ICD 로더)이 벤더의 ICD를 찾아 콜을 적절히 리다이렉트 할 수 있도록 Nvidia ICD를 설치해야 합니다.표준 OpenCL 헤더는 컨슈머 어플리케이션에 의해 사용됩니다.각 함수에 대한 콜은 OpenCL 런타임에 의해 ICD를 사용하여 적절한 드라이버에 프록시됩니다.각 벤더는 [72]각 OpenCL 콜을 드라이버에 구현해야 합니다.
OpenCL의 Apple,[73] [74]Nvidia, ROCm, RapidMind[75] 및 Gallium3D[76] 구현은 모두 LLVM 컴파일러 기술을 기반으로 하며 Clang 컴파일러를 프런트엔드로 사용합니다.
- MESA Galium Compute
- 다수의 플랫폼에 대한 OpenCL(실제 1.1 미완성, 대부분 AMD Radeon GCN) 구현은 Mesa 프로젝트를 기반으로 구축되어 여러 플랫폼을 지원하는 Galium Compute [77]Project의 일부로 유지됩니다.이전에는 CLOVER라고 불렸습니다.[78]실제 개발에서는 주로 실제 LLVM과 CLANG을 사용한 불완전한 프레임워크의 실행, 17.[79]3의 fp16, AMD 및 NVIDIA용 Target complete OpenCL 1.0, 1.1 및 1.2 등의 신기능을 지원하고 있습니다.New Basic Development는 Red Hat과 SPIR-V가 [80][81]클로버용으로도 하고 있습니다.New Target은 OpenCL 1.2를 완전히 지원하는 모듈러형 OpenCL 3.0입니다.실제 상태는 Mesamatrix에서 확인할 수 있습니다.이미지 지원은 개발의 초점입니다.
RustiCL은 더 나은 코드를 위해 C가 아닌 Rust를 사용한 Galium 컴퓨팅의 새로운 구현입니다.Mesa 22.2에서는 Darktable과 [82]같은 프로그램을 위한 openCL 3.0 지원 및 이미지 확장 구현을 통해 실험적인 구현을 이용할 수 있습니다.
- 베이지
- 인텔의 [83]Ivy Bridge + 하드웨어 실장은 2013년에 발표되었습니다.인텔의 China Team이 제공하는 이 소프트웨어는 AMD 및 Red [84]Hat 개발자 및 [85]Phoronix의 Michael Larabel로부터 비판을 받고 있습니다.실제 버전 1.3.2는 OpenCL 1.2 Complete(Ivy Bridge 이상)와 옵션인 OpenCL 2.0을 지원합니다.또한 Beignet에 [86][87]Android 지원이 추가되었습니다.[88]실제 개발 목표는 1.2와 2.0뿐이며 OpenCL 2.1, 2.2, 3.0으로 가는 길은 NEO로 사라졌습니다.
- 네오
- 2018년에 [89]출시된 8세대 Broadwell + 9세대 하드웨어용 인텔 구현.이 드라이버는 지원되는 플랫폼의 Beignet 구현을 대체합니다(구 6.gen에서 Haswell이 아닙니다).NEO는 코어 플랫폼에서는 OpenCL 2.1을, Atom [90]플랫폼에서는 OpenCL 1.2를 지원합니다.2020년에는 그래픽 11세대 아이스 레이크와 12세대 타이거 레이크도 지원되고 있습니다.새로운 OpenCL 3.0은 Alder Lake, Tiger Lake, Broadwell 버전 20.41 이상에서 사용할 수 있습니다.옵션인 OpenCL 2.0, 2.1 기능 완료 및 2.2 기능이 일부 포함되어 있습니다.
- ROCM
- AMD GPUOpen의 일부로 작성된 ROCm(Rade on Open Compute)은 OpenCL 1.2를 기반으로 구축된 오픈 소스 Linux 프로젝트로 2.0 언어 지원을 지원합니다.이 시스템은 최신 AMD CPU와 APU(실제로는 GFX7, GFX8 및 9) 및 인텔 Gen7.5 이상의 CPU(PCI 3.[91][92]0만)와 호환됩니다.버전 1.9의 지원은 아토믹스를 사용하지 않고 PCIe 2.0을 탑재한 하드웨어로 시험적으로 확장되어 있습니다.실제 작업의 개요는 XDC2018에서 [93][94]이루어집니다.ROCM 버전 2.0은 Full OpenCL 2.0을 지원하지만 몇 가지 오류와 제한이 있습니다.[95][96]버전 3.3의 상세 내용이 [97]개선되고 있습니다.버전 3.5는 OpenCL 2.2를 [98]지원합니다.버전 3.10은 향상된 기능과 새로운 API를 갖추고 [99]있습니다.SC20에서 발표된 ROCM 4.0은 AMD Compute [100]Card Instent MI 100을 지원합니다.5.1.1 이전 버전의 실제 문서는 [101][102]github에서 구할 수 있습니다.OpenCL 3.0을 사용할 수 있습니다.
- 점등
- CPU 및 일부 GPU를 지원하는 휴대용 구현(CUDA 및 HSA 경유).Clang과 [103]LLVM을 기반으로 구축.버전 1.0에서는 OpenCL 1.2가 일부 2.x [104]기능과 함께 거의 완전히 구현되었습니다.버전 1.2는 LLVM/CLANG 6.0, 7.0 및 Full OpenCL 1.2를 지원하며 마일스톤 1.[104][105]2의 모든 비공개 티켓을 지원합니다.OpenCL 2.0은 거의 완전히 [106]구현되어 있습니다.버전 1.3은 Mac OS [107]X를 지원합니다. 버전 1.4에는 LLVM 8.0 및 9.[108]0이 지원됩니다.버전 1.5에서는 LLVM/Clang 10 [109]지원이 구현되어 있습니다.버전 1.6에서는 LLVM/Clang 11 지원 및 CUDA [110]액셀러레이션이 구현되어 있습니다.실제 목표는 완전한 OpenCL 2.x, OpenCL 3.0 및 성능 향상입니다.POCL 1.6은 인텔의 컴퓨팅 [111]런타임과 동일한 레벨에서 수동 최적화를 지원합니다.버전 1.7에서는 LLVM/Clang 12 지원 및 몇 가지 새로운 OpenCL 3.0 [112]기능이 구현되어 있습니다.버전 1.8에서는 LLVM/Clang 13 [113]지원이 구현되어 있습니다.버전 3.0은 OpenCL 3.0을 최소 레벨로 구현하고 LLVM/Clang [114]14를 구현합니다.
- 섐록
- OpenCL 1.2를 [115][116]완전히 지원하는 ARM용 Mesa Clober 포트, 2.0용 실제 개발 없음.
- 프리OCL
- OpenCL 1.2의 CPU 중심 구현으로 외부 컴파일러를 구현하여 실제 개발 없이 [117]보다 신뢰성 높은 플랫폼을 구축합니다.
- MOCL
- Matrix-2000에 대한 NUDT 연구진의 POCL 기반 OpenCL 구현은 2018년에 발표되었습니다.Matrix-2000 아키텍처는 TianHe-2 슈퍼컴퓨터의 인텔 Xeon Phi 액셀러레이터를 대체하도록 설계되어 있습니다.이 프로그래밍 프레임워크는 LLVM v5.0을 기반으로 구축되었으며 POCL의 일부 코드 조각도 재사용합니다.하드웨어의 가능성을 제거하기 위해 디바이스 런타임은 푸시 기반 태스크 디스패치 전략을 사용하며 커널 아토믹스의 성능이 크게 향상됩니다.이 프레임워크는 TH-2A 시스템에 도입되어 [118]일반인이 쉽게 이용할 수 있다.일부 소프트웨어는 다음에 [104]POCL을 개선하기 위해 포팅됩니다.
- VC4CL
- 모델 [119]4 이전의 Rasberry Pi에서 사용된 VideoCore IV(BCM2763) 프로세서의 OpenCL 1.2 구현.
벤더의 실장
벤더 구현 일정
- 2008년 6월: Apple의 WWDC 컨퍼런스에서 Mac OS X Snow Leopard의 초기 베타가 제공되었으며, 2008년 말 최종 버전 1.0 사양이 비준되기 약 6개월 전에 OpenCL의 첫 번째 베타 구현이 포함되었습니다.그들은 또한 두 개의 데모를 보여주었다.하나는 렌더링된 8x8 스크린의 그리드이며, 각각 에뮬레이트된 Apple II 머신의 화면을 표시하며, 각각 유명한 가라데 게임을 실행하는 총 64개의 독립된 인스턴스입니다.이것은 CPU에서의 태스크 병렬화를 나타내고 있습니다.다른 데모는 데이터 병렬 작업인 Mac Pro의 GPU에서 실행되는 N-body 시뮬레이션입니다.
- 2008년 12월 10일: AMD와 Nvidia는 SIGGRAPH Asia 2008에서 75분간 프리젠테이션인 OpenCL 데모를 최초로 개최하였습니다.AMD는 CPU 가속 OpenCL 데모를 보여주었고, Nvidia는 GPU 가속 [120][121]데모를 보여주었습니다.
- 2009년 3월 16일: 제4회 멀티코어 엑스포에서 Imagination Technologies는 PowerVR SGX543MP를 발표했습니다.이 제품은 OpenCL을 지원하는 [122]이 회사의 첫 GPU입니다.
- 2009년 3월 26일: GDC 2009에서 AMD와 Havok은 AMD Radeon HD 4000 시리즈 [123]GPU에서 Havok Croot을 가속화하는 OpenCL의 첫 번째 실장을 시연했습니다.
- 2009년 4월 20일: Nvidia는 OpenCL Early Access [124]Program에 참여하고 있는 개발자에게 OpenCL 드라이버와 SDK의 발매를 발표했습니다.
- 2009년 8월 5일: AMD는 ATI Stream SDK v2.0 베타 [125]프로그램의 일환으로 OpenCL 플랫폼용 최초의 개발 툴을 발표했습니다.
- 2009년 8월 28일: Apple은 OpenCL을 [126]완전히 구현한 Mac OS X Snow Leopard를 출시했습니다.
- 2009년 9월 28일: Nvidia는 자체 OpenCL 드라이버와 SDK 구현을 발표했습니다.
- 2009년 10월 13일: AMD는 ATI Stream SDK 2.0의 4번째 베타 버전을 출시했습니다.이것에 의해, R700/R800 GPU와 SSE3 대응 CPU의 양쪽 모두에 OpenCL 를 완전하게 실장할 수 있습니다.SDK는 Linux와 Windows [127]모두에서 사용할 수 있습니다.
- 2009년 11월 26일: Nvidia는 OpenCL 1.0(rev 48)용 드라이버를 출시했습니다.
- 2009년 10월 27일: S3는 OpenCL 1.0을 지원하는 첫 제품인 Chrome 5400E 내장 그래픽스 [128]프로세서를 출시하였습니다.
- 2009년 12월 10일 : VIA가 OpenCL 1.0 – Chromotion을 지원하는 첫 제품을 출시VN1000 칩셋에 [129]탑재된 HD 2.0 비디오 프로세서.
- 2009년 12월 21일: AMD는 ATI Stream SDK [130]2.0의 프로덕션 버전을 출시했습니다.이 버전은 R800 GPU에 OpenCL 1.0을 지원하고 R700 GPU에 베타 버전을 지원합니다.
- 2010년 6월 1일: ZiiLABS는 핸드헬드,[131] 임베디드 및 디지털 홈 제품용 ZMS 프로세서의 첫 OpenCL 구현 세부사항을 발표했습니다.
- 2010년 6월 30일: IBM은 OpenCL 1.0의 [4]완벽한 호환 버전을 출시했습니다.
- 2010년 9월 13일: 인텔은 Sandy Bridge 칩 아키텍처에 대한 첫 OpenCL 구현 세부사항을 발표했습니다.Sandy Bridge는 인텔의 최신 그래픽 칩 기술을 중앙 처리 [132]장치에 직접 통합합니다.
- 2010년 11월 15일: 울프램 리서치는 OpenCLLink 패키지를 탑재한 Mathematica 8을 출시했습니다.
- 2011년 3월 3일: Khronos Group은 OpenCL에 대한 JavaScript 바인딩 정의를 검토하기 위한 WebCL 워킹그룹 구성을 발표했습니다.이를 통해 [133][134]웹 브라우저에서 GPU 및 멀티코어 CPU 병렬 처리를 활용할 수 있습니다.
- 2011년 3월 31일: IBM은 OpenCL 1.1의 [4][135]완벽한 호환 버전을 출시했습니다.
- 2011년 4월 25일: IBM은 x86 [136]아키텍처에서 Linux용 OpenCL Common Runtime v0.1을 출시했습니다.
- 2011년 5월 4일: Nokia Research는 Firefox 웹 브라우저용 오픈 소스 WebCL 확장을 출시하여 OpenCL에 [137]JavaScript 바인딩을 제공합니다.
- 2011년 7월 1일: 삼성전자는 OpenCL에 JavaScript 바인딩을 제공하는 WebKit용 WebCL의 [138]오픈 소스 프로토타입 구현을 출시합니다.
- 2011년 8월 8일: AMD는 OpenCL 기반의 AMD Accelerated Parallel Processing (APP) Software Development Kit (SDK) v2.5를 출시하여 테크놀로지 및 개념으로서의 [139]ATI Stream SDK를 대체하였습니다.
- 2011년 12월 12일: AMD는 OpenCL 1.2의 프리뷰를 포함한 AMD APP SDK v2.6을[140] 출시했습니다.
- 2012년 2월 27일:포틀랜드 그룹은 멀티코어 ARM CPU용 [141]PGI OpenCL 컴파일러를 출시했습니다.
- 2012년 4월 17일: Kronos는 WebCL 작업 [142]초안을 발표했습니다.
- 2013년 5월 6일: Altera는 OpenCL용 Altera SDK 버전 13.[143]0을 출시했습니다.OpenCL 1.0에 [144]준거하고 있습니다.
- 2013년 11월 18일: Khronos는 OpenCL 2.0 사양이 [145]확정되었다고 발표했습니다.
- 2014년 3월 19일: Kronos는 WebCL 1.0 사양을 [146][147]출시합니다.
- 2014년 8월 29일 :인텔은 OpenCL 2.0을 [148]지원하는 HD 그래픽스 5300 드라이버를 출시합니다.
- 2014년 9월 25일: AMD는 OpenCL 2.0 [149]드라이버를 포함한 Catalyst 14.41 RC1을 출시합니다.
- 2015년 1월 14일 주식회사 Xilinx가 OpenCL, C, C++의 SDAcel 개발 환경을 발표하여 Kronos 준거 [150]달성
- 2015년 4월 13일: Nvidia는 WHQL 드라이버 v350.12를 출시합니다.이 드라이버에는 Kepler 이후의 아키텍처를 [151]기반으로 한 GPU에 대한 OpenCL 1.2 지원이 포함되어 있습니다.드라이버 340+는 Tesla 및 Fermi용 OpenCL 1.1을 지원합니다.
- 2015년 8월 26일: AMD는 OpenCL 2.0의 완전한 지원과 샘플 코딩이 포함된 AMD APP SDK v3.0을[152] 출시했습니다.
- 2015년 11월 16일: Khronos는 OpenCL 2.1 사양이 [153]확정되었다고 발표했습니다.
- 2016년 4월 18일: Khronos는 OpenCL 2.2 사양이 잠정적으로 [59]확정되었다고 발표했습니다.
- 2016년 11월 3일 SDK 2016 [154]r3에서 OpenCL 2.1의 Gen7+에 대한 인텔 지원.
- 2017년 2월 17일: Nvidia는 드라이버 378.[155][156][157]66을 탑재한 OpenCL 2.0 평가판 지원을 시작합니다.
- 2017년 5월 16일: Kronos는 OpenCL 2.2의 사양이 SPIR-V 1.2로 [158]최종 결정되었다고 발표했습니다.
- 2018년 5월 14일: Kronos는 OpenCL 2.2의 Bugfix 및 통합 [62]헤더를 위한 Maintenance Update를 발표했습니다.
- 2020년 4월 27일: Kronos는 OpenCL 3.0 잠정 버전을 발표했습니다.
- 2020년 6월 1일: 새로운 Tiger Lake용 OpenCL 3.0 인텔 Neo 런타임.
- 2020년 6월 3일: AMD는 OpenCL 2.2를 지원하는 [159]RocM 3.5를 발표했습니다.
- 2020년 9월 30일: Kronos는 OpenCL 3.0 사양이 확정되었다고 발표했습니다(CTS도 이용 가능).
- 2020년 10월 16일: 인텔은 OpenCL 3.0을 Neo 20.41 지원한다고 발표했습니다(대부분 옵션인 OpenCL 2.x 포함).
- 2021년 4월 6일: Nvidia는 암페어용 OpenCL 3.0을 지원합니다.Maxwell 이후의 GPU는 OpenCL 3.0과 Nvidia 드라이버 465+[160]도 지원합니다.
장치들
2016년 현재 OpenCL은 GPU(그래픽 처리 장치), SIMD 명령이 있는 CPU, FPGA, Movidius Mirid 2, Adapteva Epiphany 및 DSP에서 실행됩니다.
Kronos 적합성 테스트 스위트
- 정식 적합성을 얻으려면 Khronos Conformance Test Suite(CTS)에 합격하고 결과를 Khronos Adapters [161]프로그램에 제출해야 합니다.모든 OpenCL 버전에 대한 Khronos CTS 코드는 [162]2017년부터 오픈 소스에서 사용할 수 있습니다.
적합 제품
Khronos Group은 OpenCL에 적합한 제품의 [4]확장 목록을 보유하고 있습니다.
OpenCL 준거 제품[4] 개요 | ||||
---|---|---|---|---|
AMD SDK(OpenCL CPU 및 고속 처리 장치 장치 지원), (GPU: Terascale 1: OpenCL 1.1, Terascale 2: 1.2, GCN 1: 1.2+, GCN 2+: 2.0+) | X86 + SSE2(또는 그 이상) 호환 CPU 64비트 및 32비트,[163] Linux 2.6 PC, Windows Vista/7/8.x/10 PC | AMD Fusion E-350, E-240, C-50, C-30 (HD 6310/HD 6250 탑재) | AMD Radeon/Mobility HD 6800, HD 5x00 시리즈 GPU, iGPU HD 6310/HD 6250, HD 7xx, HD 8xx, R2xx, R3xx, RX 4xx, RX 5xx, Vega 시리즈 | AMD FirePro Vx800 시리즈 GPU 이후, Radeon Pro |
OpenCL 애플리케이션용[164] 인텔 SDK 2013 (인텔 Core 프로세서 및 인텔 HD 그래픽스 4000/2500 지원), OpenCL 2.1 [165](Gen7+), SDK 2019에서 OpenCL 2.1 삭제, 실제 SDK 2020 업데이트 3 | SSE 4.1, SSE 4.2 또는 AVX 지원 [166][167]인텔 CPUMicrosoft Windows, Linux | 인텔 Core i7, i5, i3, 2세대 인텔 Core i7/5/3, 3세대 인텔 Core 프로세서, 인텔 HD 그래픽스 4000/2500 이후 | 인텔 Core 2 Solo, Duo Quad, Extreme 및 그 이후 | 인텔 Xeon 7x00, 5x00, 3x00(코어 기반) 이후 |
Power VSX에서[168][169] 실행되는 Linux용 OpenCL Development Kit가 있는 IBM 서버 | IBM Power 775(PERCS), 750 | IBM BladeCenter PS70x Express | IBM BladeCenter JS2x, JS43 | IBM BladeCenter QS22 |
IBM OpenCL 공통 런타임(OCR) | X86 + SSE2(또는 그 이상) 호환 CPU 64비트 및 32비트,[171] Linux 2.6 PC | AMD Fusion, Nvidia Ion 및 인텔 Core i7, i5, i3, 2세대 인텔 Core i7/5/3 | AMD Radeon, Nvidia GeForce 및 인텔 Core 2 Solo, Duo, Quad, Extreme | ATI FirePro, Nvidia Quadro 및 인텔 Xeon 7x00, 5x00, 3x00 (코어 기반) |
Nvidia OpenCL 드라이버 및 도구,[172] 칩:테슬라, 페르미: OpenCL 1.1(드라이버 340+), 케플러, 맥스웰, 파스칼, 볼타, 튜링:OpenCL 1.2(드라이버 370 이상), OpenCL 2.0 베타(378.66), OpenCL 3.0: Maxwell에서 암페어(드라이버 465 이상) | Nvidia Tesla C/D/S | Nvidia GeForce GTS/GT/GTX, | Nvidia 이온 | Nvidia Quadro FX/NVX/Plex, Quadro, Quadro K, Quadro M, Quadro P, Quadro Volta, Quadro RTX, 튜링, 암페어 지원 |
모든 표준 적합 구현은 하나의 clinfo 도구를 사용하여 쿼리할 수 있습니다(같은 이름과 유사한 기능 [173][174][175]세트를 가진 여러 도구가 있습니다).
버전 지원
제품 및 OpenCL 지원 버전은 다음과 같습니다.[176]
OpenCL 3.0 지원
OpenCL 1.2+를 탑재한 모든 하드웨어 지원, OpenCL 2.x만 옵션, Khronos 테스트 스위트는 2020-10년[177][178] 이후 이용 가능
- (2020) 인텔 NEO Compute: 20.41+ (12세대 Tiger Lake에서 Broadwell까지 지원) (2.0 및 2.1의 완전한 지원 및 2.2의 [179]일부 포함)
- (2020) 인텔6세대, 7세대, 8세대, 9세대, 10세대, 11세대 프로세서 (Skylake, Kaby Lake, Coffee Lake, Comet Lake, Ice Lake, Tiger Lake)와 최신 인텔 Windows 그래픽스 드라이버 탑재
- (2021) 최신 인텔 Windows 그래픽스 드라이버 탑재 11세대, 12세대 인텔 프로세서 (Rocket Lake, Alder Lake)
- (2022) 최신 인텔 Windows 그래픽스 드라이버 탑재 13세대 인텔 프로세서 (Rapter Lake)
- (2022) 최신 인텔 Arc Windows 그래픽스 드라이버 탑재 인텔 Arc 디스크리트 그래픽스
- (2021) Nvidia Maxwell, Pascal, Volta, Turing 및 Ampere (Nvidia 그래픽 드라이버 465+[160] 탑재)
OpenCL 2.2 지원
아직 없음: Kronos 테스트 스위트 (드라이버 업데이트로 2.0 및 2.1 지원 가능)
- 인텔 NEO 컴퓨팅:실제[180] 제품에 대한 작업 진행 중
- ROCm: 버전 3.5 이상 대부분
OpenCL 2.1 지원
- (2018+) 인텔 5세대 및 6세대 프로세서 (Broadwell, Skylake)에 대한 지원 백포트
- (2017+) 인텔 7, 8, 9, 10세대 프로세서 (Kaby Lake, Coffee Lake, Comet Lake, Ice Lake)
- Kronos: 드라이버 업데이트로 2.0 지원 모든 하드웨어 지원 가능
OpenCL 2.0 지원
- (2011+) AMD GCN GPU (HD 7700+/HD 8000/Rx 200/Rx 300/Rx 400/Rx 500/Rx 5000 시리즈), 일부 GCN 1세대에서는 일부 확장 기능만 탑재
- (2013+) AMD GCN APU (Jaguar, Steamroller, Puma, Excluverator 및 Zen 기반)
- (2014+) 인텔 5세대 및 6세대 프로세서 (Broadwell, Skylake)
- (2015+) Qualcomm Adreno 5xx 시리즈
- (2018+) Qualcomm Adreno 6xx 시리즈
- (2017+) Android 7.1 및 Linux에서의 ARM 말리(Bifrost) G51 및 G71
- (2018+) ARM 말리(동토층) G31, G52, G72 및 G76
- (2017+) 불완전한 평가 지원: Nvidia Kepler, Maxwell, Pascal, Volta 및 Turing GPU (GeForce 600, 700, 800, 900 & 10 시리즈, Quadro K 시리즈, M 시리즈 및 P 시리즈, Tesla K-, M- 및 P 시리즈, 드라이버 버전 37866+)
OpenCL 1.2 지원
- (2011+) 일부 AMD GCN 1세대 OpenCL 2.0 기능은 현재 이용할 수 없지만 Terascale보다 더 많은 확장 기능 제공
- (2009+) AMD TeraScale 2 & 3 GPU (RV8xx, HD 5000, 6000 및 7000 시리즈에서는 RV9xx)
- (2011+) AMD TeraScale APU (K10, Bobcat 및 Floodedriver 기반)
- (2012+) Nvidia Kepler, Maxwell, Pascal, Volta 및 Turing GPU (GeForce 600, 700, 800, 900, 10, 16, 20 시리즈, Quadro K 시리즈, M 시리즈, P 시리즈, Tesla K 시리즈, M 시리즈 및 P 시리즈)
- (2012+) 인텔 3세대 및 4세대 프로세서 (Ivy Bridge, Haswell)
- (2013+) Qualcomm Adreno 4xx 시리즈
- (2013+) ARM 말리 미드가드 3세대 (T760)
- (2015+) ARM 말리 미드가드 4세대 (T8xx)
OpenCL 1.1 지원
- (2008+) 일부 AMD TeraScale 1 GPU (HD4000 시리즈에서는 RV7xx)
- (2008+) Nvidia Tesla, Fermi GPU(Tesla 또는 Fermi GPU를 탑재한 GeForce 8, 9, 100, 200, 300, 400, 500 시리즈, Quadro 시리즈 또는 Tesla 시리즈)
- (2011+) Qualcomm Adreno 3xx 시리즈
- (2012+) ARM 말리 미드가드 1세대 및 2세대 (T-6xx, T720)
OpenCL 1.0 지원
- 첫 번째 드라이버 이후 대부분 1.1 및 1.2로 업데이트(1.0만 해당)
휴대성, 퍼포먼스 및 대체품
OpenCL의 주요 기능은 추상화된 메모리와 실행 모델을 통한 이식성입니다.프로그래머는 다른 플랫폼에서의 직접 이식성을 포기하지 않는 한 Nvidia GPU용 인라인 병렬 스레드 실행(PTX) 등의 하드웨어 고유의 기술을 직접 사용할 수 없습니다.임의의 Conformant 구현에서 임의의 OpenCL 커널을 실행할 수 있습니다.
단, 커널의 퍼포먼스가 플랫폼 간에 반드시 이식 가능한 것은 아닙니다.그러나 기존 구현은 커널 코드가 적절하게 조정되면 경쟁력이 있는 것으로 나타나며 성능 이식성 [181]문제에 대한 해결책으로 자동 조정이 제안되어 실험적인 선형 대수 [182]커널에서 "허용 가능한 수준의 성능"을 제공합니다.동작이 다른 여러 커널을 포함하는 애플리케이션 전체의 이식성도 연구되었으며, 이식성은 제한된 트레이드오프만 [183]필요로 한다는 것을 보여줍니다.
Dellft University의 2011년 조사에서는 CUDA 프로그램과 OpenCL C로의 간단한 변환을 비교한 결과 CUDA는 Nvidia 구현에서 OpenCL을 최대 30% 능가하는 것으로 나타났습니다.연구진은 OpenCL 프로그램에 수동 최적화를 적용함으로써 이들의 비교가 더 공정해질 수 있다고 지적했으며, 이 경우 "OpenCL이 CUDA보다 더 나쁜 성능을 얻을 이유가 없다"고 지적했다.성능 차이는 주로 프로그래밍 모델(특히 메모리 모델)의 차이와 [181]OpenCL과 비교한 NVIDIA의 CUDA 컴파일러 최적화에 기인합니다.
D-Wave Systems Inc.의 또 다른 연구에 따르면 "OpenCL 커널의 성능은 CUDA의 [184]성능보다 약 13%에서 63% 느리고 엔드 투 엔드 시간은 약 16%에서 67% 느립니다."
OpenCL을 사용하면 CPU와 GPU에서 워크로드를 공유할 수 있고 동일한 프로그램을 실행할 수 있기 때문에 프로그래머는 디바이스 [185]간에 작업을 분담하여 양쪽을 이용할 수 있습니다.디바이스마다 상대적인 동작 속도가 다르기 때문에, 이것은 작업을 어떻게 분할할지를 결정하는 문제로 이어집니다.이 문제를 해결하기 위해 머신러닝이 권장되고 있습니다.Grewe와 O'Boyle은 프로그램의 컴파일 타임 기능에 대해 훈련받은 지원 벡터 머신의 시스템을 기술하고 있습니다.이 시스템은 실제로 그 성능을 [186]측정하기 위해 프로그램을 실행하지 않고도 디바이스 파티셔닝 문제를 정적으로 결정할 수 있습니다.
AMD RDNA 2와 Nvidia RTX 시리즈의 실제 그래픽 카드를 비교한 결과 OpenCL-Tests의 결과는 미정입니다.Nvidia CUDA 또는 OptiX 사용으로 인한 성능 향상 가능성은 테스트되지 않았습니다.[187]
「 」를 참조해 주세요.
레퍼런스
- ^ "Khronos OpenCL Registry". Khronos Group. April 27, 2020. Retrieved April 27, 2020.
- ^ "Android Devices With OpenCL support". Google Docs. ArrayFire. Retrieved April 28, 2015.
- ^ "FreeBSD Graphics/OpenCL". FreeBSD. Retrieved December 23, 2015.
- ^ a b c d e "Conformant Products". Khronos Group. Retrieved May 9, 2015.
- ^ Sochacki, Bartosz (July 19, 2019). "The OpenCL C++ 1.0 Specification" (PDF). Khronos OpenCL Working Group. Retrieved July 19, 2019.
- ^ Munshi, Aaftab; Howes, Lee; Sochaki, Barosz (April 27, 2020). "The OpenCL C Specification Version: 3.0 Document Revision: V3.0.7" (PDF). Khronos OpenCL Working Group. Archived from the original (PDF) on September 20, 2020. Retrieved April 28, 2021.
- ^ "The C++ for OpenCL 1.0 Programming Language Documentation Revision 2". Khronos OpenCL Working Group. March 31, 2021. Retrieved April 18, 2021.
- ^ "Conformant Companies". Khronos Group. Retrieved April 8, 2015.
- ^ Gianelli, Silvia E. (January 14, 2015). "Xilinx SDAccel Development Environment for OpenCL, C, and C++, Achieves Khronos Conformance". PR Newswire. Xilinx. Retrieved April 27, 2015.
- ^ Howes, Lee (November 11, 2015). "The OpenCL Specification Version: 2.1 Document Revision: 23" (PDF). Khronos OpenCL Working Group. Retrieved November 16, 2015.
- ^ a b Gaster, Benedict; Howes, Lee; Kaeli, David R.; Mistry, Perhaad; Schaa, Dana (2012). Heterogeneous Computing with OpenCL: Revised OpenCL 1.2 Edition. Morgan Kaufmann.
- ^ Tompson, Jonathan; Schlachter, Kristofer (2012). "An Introduction to the OpenCL Programming Model" (PDF). New York University Media Research Lab. Archived from the original (PDF) on July 6, 2015. Retrieved July 6, 2015.
- ^ a b c d Stone, John E.; Gohara, David; Shi, Guochin (2010). "OpenCL: a parallel programming standard for heterogeneous computing systems". Computing in Science & Engineering. 12 (3): 66–73. Bibcode:2010CSE....12c..66S. doi:10.1109/MCSE.2010.69. PMC 2964860. PMID 21037981.
- ^ Klöckner, Andreas; Pinto, Nicolas; Lee, Yunsup; Catanzaro, Bryan; Ivanov, Paul; Fasih, Ahmed (2012). "PyCUDA and PyOpenCL: A scripting-based approach to GPU run-time code generation". Parallel Computing. 38 (3): 157–174. arXiv:0911.3456. doi:10.1016/j.parco.2011.09.001. S2CID 18928397.
- ^ "OpenCL - Open Computing Language Bindings". metacpan.org. Retrieved August 18, 2018.
- ^ "D binding for OpenCL". dlang.org. Retrieved June 29, 2021.
- ^ "SPIR - The first open standard intermediate language for parallel compute and graphics". Khronos Group. January 21, 2014.
- ^ "SYCL - C++ Single-source Heterogeneous Programming for OpenCL". Khronos Group. January 21, 2014. Archived from the original on January 18, 2021. Retrieved October 24, 2016.
- ^ a b c "C++ for OpenCL, OpenCL-Guide". GitHub. Retrieved April 18, 2021.
- ^ a b c Aaftab Munshi, ed. (2014). "The OpenCL C Specification, Version 2.0" (PDF). Retrieved June 24, 2014.
- ^ a b "Introduction to OpenCL Programming 201005" (PDF). AMD. pp. 89–90. Archived from the original (PDF) on May 16, 2011. Retrieved August 8, 2017.
- ^ "OpenCL" (PDF). SIGGRAPH2008. August 14, 2008. Archived from the original (PDF) on February 16, 2012. Retrieved August 14, 2008.
- ^ "Fitting FFT onto G80 Architecture" (PDF). Vasily Volkov and Brian Kazian, UC Berkeley CS258 project report. May 2008. Retrieved November 14, 2008.
- ^ "OpenCL_FFT". Apple. June 26, 2012. Retrieved June 18, 2022.
- ^ Trevett, Neil (April 28, 2020). "Khronos Announcements and Panel Discussion" (PDF).
- ^ Stulova, Anastasia; Hickey, Neil; van Haastregt, Sven; Antognini, Marco; Petit, Kevin (April 27, 2020). "The C++ for OpenCL Programming Language". Proceedings of the International Workshop on OpenCL. IWOCL '20. Munich, Germany: Association for Computing Machinery: 1–2. doi:10.1145/3388333.3388647. ISBN 978-1-4503-7531-3. S2CID 216554183.
- ^ a b KhronosGroup/OpenCL-Docs, The Khronos Group, April 16, 2021, retrieved April 18, 2021
- ^ "Clang release 9 documentation, OpenCL support". releases.llvm.org. September 2019. Retrieved April 18, 2021.
- ^ "Clang 9, Language Extensions, OpenCL". releases.llvm.org. September 2019. Retrieved April 18, 2021.
- ^ "Release of Documentation of C++ for OpenCL kernel language, version 1.0, revision 1 · KhronosGroup/OpenCL-Docs". GitHub. December 2020. Retrieved April 18, 2021.
- ^ a b "The C++ for OpenCL 1.0 Programming Language Documentation". www.khronos.org. Retrieved April 18, 2021.
- ^ a b c d "Release of C++ for OpenCL Kernel Language Documentation, version 1.0, revision 2 · KhronosGroup/OpenCL-Docs". GitHub. March 2021. Retrieved April 18, 2021.
- ^ "cl_ext_cxx_for_opencl". www.khronos.org. September 2020. Retrieved April 18, 2021.
- ^ "Mali SDK Supporting Compilation of Kernels in C++ for OpenCL". community.arm.com. December 2020. Retrieved April 18, 2021.
- ^ "Clang Compiler User's Manual — C++ for OpenCL Support". clang.llvm.org. Retrieved April 18, 2021.
- ^ "OpenCL-Guide, Offline Compilation of OpenCL Kernel Sources". GitHub. Retrieved April 18, 2021.
- ^ "OpenCL-Guide, Programming OpenCL Kernels". GitHub. Retrieved April 18, 2021.
- ^ a b Clspv is a prototype compiler for a subset of OpenCL C to Vulkan compute shaders: google/clspv, August 17, 2019, retrieved August 20, 2019
- ^ Petit, Kévin (April 17, 2021), Experimental implementation of OpenCL on Vulkan, retrieved April 18, 2021
- ^ "Khronos Launches Heterogeneous Computing Initiative" (Press release). Khronos Group. June 16, 2008. Archived from the original on June 20, 2008. Retrieved June 18, 2008.
- ^ "OpenCL gets touted in Texas". MacWorld. November 20, 2008. Retrieved June 12, 2009.
- ^ "The Khronos Group Releases OpenCL 1.0 Specification" (Press release). Khronos Group. December 8, 2008. Retrieved December 4, 2016.
- ^ "Apple Previews Mac OS X Snow Leopard to Developers" (Press release). Apple Inc. June 9, 2008. Archived from the original on March 18, 2012. Retrieved June 9, 2008.
- ^ "AMD Drives Adoption of Industry Standards in GPGPU Software Development" (Press release). AMD. August 6, 2008. Retrieved August 14, 2008.
- ^ "AMD Backs OpenCL, Microsoft DirectX 11". eWeek. August 6, 2008. Archived from the original on March 19, 2012. Retrieved August 14, 2008.
- ^ "HPCWire: RapidMind Embraces Open Source and Standards Projects". HPCWire. November 10, 2008. Archived from the original on December 18, 2008. Retrieved November 11, 2008.
- ^ "Nvidia Adds OpenCL To Its Industry Leading GPU Computing Toolkit" (Press release). Nvidia. December 9, 2008. Retrieved December 10, 2008.
- ^ "OpenCL Development Kit for Linux on Power". alphaWorks. October 30, 2009. Retrieved October 30, 2009.
- ^ "Opencl Standard - an overview ScienceDirect Topics".
- ^ http://developer.amd.com/wordpress/media/2012/10/opencl-1.0.48.pdf[베어 URL PDF]
- ^ "Khronos Drives Momentum of Parallel Computing Standard with Release of OpenCL 1.1 Specification". Archived from the original on March 2, 2016. Retrieved February 24, 2016.
- ^ "Khronos Releases OpenCL 1.2 Specification". Khronos Group. November 15, 2011. Retrieved June 23, 2015.
- ^ a b c "OpenCL 1.2 Specification" (PDF). Khronos Group. Retrieved June 23, 2015.
- ^ "Khronos Finalizes OpenCL 2.0 Specification for Heterogeneous Computing". Khronos Group. November 18, 2013. Retrieved February 10, 2014.
- ^ "Khronos Releases OpenCL 2.1 and SPIR-V 1.0 Specifications for Heterogeneous Parallel Programming". Khronos Group. November 16, 2015. Retrieved November 16, 2015.
- ^ "Khronos Announces OpenCL 2.1: C++ Comes to OpenCL". AnandTech. March 3, 2015. Retrieved April 8, 2015.
- ^ "Khronos Releases OpenCL 2.1 Provisional Specification for Public Review". Khronos Group. March 3, 2015. Retrieved April 8, 2015.
- ^ "OpenCL Overview". Khronos Group. July 21, 2013.
- ^ a b "Khronos Releases OpenCL 2.2 Provisional Specification with OpenCL C++ Kernel Language for Parallel Programming". Khronos Group. April 18, 2016.
- ^ Trevett, Neil (April 2016). "OpenCL – A State of the Union" (PDF). IWOCL. Vienna: Khronos Group. Retrieved January 2, 2017.
- ^ "Khronos Releases OpenCL 2.2 With SPIR-V 1.2". Khronos Group. May 16, 2017.
- ^ a b "OpenCL 2.2 Maintenance Update Released". The Khronos Group. May 14, 2018.
- ^ "OpenCL 3.0 Bringing Greater Flexibility, Async DMA Extensions - Phoronix".
- ^ "Khronos Group Releases OpenCL 3.0". April 26, 2020.
- ^ https://www.khronos.org/registry/OpenCL/specs/3.0-unified/pdf/OpenCL_API.pdf[베어 URL PDF]
- ^ https://www.iwocl.org/wp-content/uploads/k03-iwocl-syclcon-2021-trevett-updated.mp4.pdf[베어 URL PDF]
- ^ "Using Semaphore and Memory Sharing Extensions for Vulkan Interop with NVIDIA OpenCL". February 24, 2022.
- ^ "Breaking: OpenCL Merging Roadmap into Vulkan PC Perspective". www.pcper.com. Archived from the original on November 1, 2017. Retrieved May 17, 2017.
- ^ "SIGGRAPH 2018: OpenCL-Next Taking Shape, Vulkan Continues Evolving - Phoronix". www.phoronix.com.
- ^ "Vulkan Update SIGGRAPH 2019" (PDF).
- ^ Trevett, Neil (May 23, 2019). "Khronos and OpenCL Overview EVS Workshop May19" (PDF). Khronos Group.
- ^ "OpenCL ICD Specification". Retrieved June 23, 2015.
- ^ "Apple entry on LLVM Users page". Retrieved August 29, 2009.
- ^ "Nvidia entry on LLVM Users page". Retrieved August 6, 2009.
- ^ "Rapidmind entry on LLVM Users page". Retrieved October 1, 2009.
- ^ "Zack Rusin's blog post about the Gallium3D OpenCL implementation". February 2009. Retrieved October 1, 2009.
- ^ "GalliumCompute". dri.freedesktop.org. Retrieved June 23, 2015.
- ^ "Clover Status Update" (PDF).
- ^ "mesa/mesa - The Mesa 3D Graphics Library". cgit.freedesktop.org.
- ^ "Gallium Clover With SPIR-V & NIR Opening Up New Compute Options Inside Mesa - Phoronix". www.phoronix.com. Archived from the original on October 22, 2020. Retrieved December 13, 2018.
- ^ https://xdc2018.x.org/slides/clover.pdf[베어 URL PDF]
- ^ "Mesa's "Rusticl" Implementation Now Manages to Handle Darktable OpenCL".
- ^ Larabel, Michael (January 10, 2013). "Beignet: OpenCL/GPGPU Comes For Ivy Bridge On Linux". Phoronix.
- ^ Larabel, Michael (April 16, 2013). "More Criticism Comes Towards Intel's Beignet OpenCL". Phoronix.
- ^ Larabel, Michael (December 24, 2013). "Intel's Beignet OpenCL Is Still Slowly Baking". Phoronix.
- ^ "Beignet". freedesktop.org.
- ^ "beignet - Beignet OpenCL Library for Intel Ivy Bridge and newer GPUs". cgit.freedesktop.org.
- ^ "Intel Brings Beignet To Android For OpenCL Compute - Phoronix". www.phoronix.com.
- ^ "01.org Intel Open Source - Compute Runtime". February 7, 2018.
- ^ "NEO GitHub README". GitHub. March 21, 2019.
- ^ "ROCm". GitHub. Archived from the original on October 8, 2016.
- ^ "RadeonOpenCompute/ROCm: ROCm - Open Source Platform for HPC and Ultrascale GPU Computing". GitHub. March 21, 2019.
- ^ "A Nice Overview Of The ROCm Linux Compute Stack - Phoronix". www.phoronix.com.
- ^ "XDC Lightning.pdf". Google Docs.
- ^ "Radeon ROCm 2.0 Officially Out With OpenCL 2.0 Support, TensorFlow 1.12, Vega 48-bit VA - Phoronix". www.phoronix.com.
- ^ "Taking Radeon ROCm 2.0 OpenCL For A Benchmarking Test Drive - Phoronix". www.phoronix.com.
- ^ https://github.com/RadeonOpenCompute/ROCm/blob/master/AMD_ROCm_Release_Notes_v3.3.pdf[데드링크]
- ^ "Radeon ROCm 3.5 Released with New Features but Still No Navi Support - Phoronix".
- ^ "Radeon ROCm 3.10 Released with Data Center Tool Improvements, New APIs - Phoronix".
- ^ "AMD Launches Arcturus as the Instinct MI100, Radeon ROCm 4.0 - Phoronix".
- ^ "Welcome to AMD ROCm™ Platform — ROCm Documentation 1.0.0 documentation".
- ^ "Home". docs.amd.com.
- ^ Jääskeläinen, Pekka; Sánchez de La Lama, Carlos; Schnetter, Erik; Raiskila, Kalle; Takala, Jarmo; Berg, Heikki (2016). "pocl: A Performance-Portable OpenCL Implementation". Int'l J. Parallel Programming. 43 (5): 752–785. arXiv:1611.07083. Bibcode:2016arXiv161107083J. doi:10.1007/s10766-014-0320-y. S2CID 9905244.
- ^ a b c "pocl home page". pocl.
- ^ "GitHub - pocl/pocl: pocl: Portable Computing Language". March 14, 2019 – via GitHub.
- ^ "HSA support implementation status as of 2016-05-17 — Portable Computing Language (pocl) 1.3-pre documentation". portablecl.org.
- ^ "PoCL home page".
- ^ "PoCL home page".
- ^ "PoCL home page".
- ^ "Archived copy". Archived from the original on January 17, 2021. Retrieved December 3, 2020.
{{cite web}}
: CS1 maint: 제목으로 아카이브된 복사(링크) - ^ https://www.iwocl.org/wp-content/uploads/30-iwocl-syclcon-2021-baumann-slides.pdf[베어 URL PDF]
- ^ "PoCL home page".
- ^ "PoCL home page".
- ^ "PoCL home page".
- ^ "About". Git.Linaro.org.
- ^ Gall, T.; Pitney, G. (March 6, 2014). "LCA14-412: GPGPU on ARM SoC" (PDF). Amazon Web Services. Archived from the original (PDF) on July 26, 2020. Retrieved January 22, 2017.
- ^ "zuzuf/freeocl". GitHub. Retrieved April 13, 2017.
- ^ Zhang, Peng; Fang, Jianbin; Yang, Canqun; Tang, Tao; Huang, Chun; Wang, Zheng (2018). MOCL: An Efficient OpenCL Implementation for the Matrix-2000 Architecture (PDF). Proc. Int'l Conf. on Computing Frontiers. doi:10.1145/3203217.3203244.
- ^ "Status". GitHub. March 16, 2022.
- ^ "OpenCL Demo, AMD CPU". YouTube. December 10, 2008. Retrieved March 28, 2009.
- ^ "OpenCL Demo, Nvidia GPU". YouTube. December 10, 2008. Retrieved March 28, 2009.
- ^ "Imagination Technologies launches advanced, highly-efficient POWERVR SGX543MP multi-processor graphics IP family". Imagination Technologies. March 19, 2009. Archived from the original on April 3, 2014. Retrieved January 30, 2011.
- ^ "AMD and Havok demo OpenCL accelerated physics". PC Perspective. March 26, 2009. Archived from the original on April 5, 2009. Retrieved March 28, 2009.
- ^ "Nvidia Releases OpenCL Driver To Developers". Nvidia. April 20, 2009. Archived from the original on February 4, 2012. Retrieved April 27, 2009.
- ^ "AMD does reverse GPGPU, announces OpenCL SDK for x86". Ars Technica. August 5, 2009. Retrieved August 6, 2009.[영구 데드링크]
- ^ Moren, Dan; Snell, Jason (June 8, 2009). "Live Update: WWDC 2009 Keynote". MacWorld.com. MacWorld. Retrieved June 12, 2009.
- ^ "ATI Stream Software Development Kit (SDK) v2.0 Beta Program". Archived from the original on August 9, 2009. Retrieved October 14, 2009.
- ^ "S3 Graphics launched the Chrome 5400E embedded graphics processor". Archived from the original on December 2, 2009. Retrieved October 27, 2009.
- ^ "VIA Brings Enhanced VN1000 Graphics Processor]". Archived from the original on December 15, 2009. Retrieved December 10, 2009.
- ^ "ATI Stream SDK v2.0 with OpenCL 1.0 Support". Archived from the original on November 1, 2009. Retrieved October 23, 2009.
- ^ "OpenCL". ZiiLABS. Retrieved June 23, 2015.
- ^ "Intel discloses new Sandy Bridge technical details". Archived from the original on October 31, 2013. Retrieved September 13, 2010.
- ^ "WebCL related stories". Khronos Group. Retrieved June 23, 2015.
- ^ "Khronos Releases Final WebGL 1.0 Specification". Khronos Group. Archived from the original on July 9, 2015. Retrieved June 23, 2015.
- ^ "Community".
- ^ "Welcome to Wikis". www.ibm.com. October 20, 2009.
- ^ "Nokia Research releases WebCL prototype". Khronos Group. May 4, 2011. Archived from the original on December 5, 2020. Retrieved June 23, 2015.
- ^ KamathK, Sharath. "Samsung's WebCL Prototype for WebKit". Github.com. Archived from the original on February 18, 2015. Retrieved June 23, 2015.
- ^ "AMD Opens the Throttle on APU Performance with Updated OpenCL Software Development". Amd.com. August 8, 2011. Retrieved June 16, 2013.
- ^ "AMD APP SDK v2.6". Forums.amd.com. March 13, 2015. Retrieved June 23, 2015.[데드링크]
- ^ "The Portland Group Announces OpenCL Compiler for ST-Ericsson ARM-Based NovaThor SoCs". Retrieved May 4, 2012.
- ^ "WebCL Latest Spec". Khronos Group. November 7, 2013. Archived from the original on August 1, 2014. Retrieved June 23, 2015.
- ^ "Altera Opens the World of FPGAs to Software Programmers with Broad Availability of SDK and Off-the-Shelf Boards for OpenCL". Altera.com. Archived from the original on January 9, 2014. Retrieved January 9, 2014.
- ^ "Altera SDK for OpenCL is First in Industry to Achieve Khronos Conformance for FPGAs". Altera.com. Archived from the original on January 9, 2014. Retrieved January 9, 2014.
- ^ "Khronos Finalizes OpenCL 2.0 Specification for Heterogeneous Computing". Khronos Group. November 18, 2013. Retrieved June 23, 2015.
- ^ "WebCL 1.0 Press Release". Khronos Group. March 19, 2014. Retrieved June 23, 2015.
- ^ "WebCL 1.0 Specification". Khronos Group. March 14, 2014. Retrieved June 23, 2015.
- ^ "Intel OpenCL 2.0 Driver". Archived from the original on September 17, 2014. Retrieved October 14, 2014.
- ^ "AMD OpenCL 2.0 Driver". Support.AMD.com. June 17, 2015. Retrieved June 23, 2015.
- ^ "Xilinx SDAccel development environment for OpenCL, C, and C++, achieves Khronos Conformance - khronos.org news". The Khronos Group. Retrieved June 26, 2017.
- ^ "Release 349 Graphics Drivers for Windows, Version 350.12" (PDF). April 13, 2015. Retrieved February 4, 2016.
- ^ "AMD APP SDK 3.0 Released". Developer.AMD.com. August 26, 2015. Retrieved September 11, 2015.
- ^ "Khronos Releases OpenCL 2.1 and SPIR-V 1.0 Specifications for Heterogeneous Parallel Programming". Khronos Group. November 16, 2015.
- ^ "What's new? Intel® SDK for OpenCL™ Applications 2016, R3". Intel Software.
- ^ "NVIDIA 378.66 drivers for Windows offer OpenCL 2.0 evaluation support". Khronos Group. February 17, 2017. Archived from the original on August 6, 2020. Retrieved March 17, 2017.
- ^ Szuppe, Jakub (February 22, 2017). "NVIDIA enables OpenCL 2.0 beta-support".
- ^ Szuppe, Jakub (March 6, 2017). "NVIDIA beta-support for OpenCL 2.0 works on Linux too".
- ^ "The Khronos Group". The Khronos Group. March 21, 2019.
- ^ "GitHub - RadeonOpenCompute/ROCm at roc-3.5.0". GitHub.
- ^ a b "NVIDIA is Now OpenCL 3.0 Conformant". April 12, 2021.
- ^ "The Khronos Group". The Khronos Group. August 20, 2019. Retrieved August 20, 2019.
- ^ "KhronosGroup/OpenCL-CTL: The OpenCL Conformance Tests". GitHub. March 21, 2019.
- ^ "OpenCL and the AMD APP SDK". AMD Developer Central. developer.amd.com. Archived from the original on August 4, 2011. Retrieved August 11, 2011.
- ^ "About Intel OpenCL SDK 1.1". software.intel.com. intel.com. Retrieved August 11, 2011.
- ^ "Intel® SDK for OpenCL™ Applications - Release Notes". software.intel.com. March 14, 2019.
- ^ "Product Support". Retrieved August 11, 2011.
- ^ "Intel OpenCL SDK – Release Notes". Archived from the original on July 17, 2011. Retrieved August 11, 2011.
- ^ "Announcing OpenCL Development Kit for Linux on Power v0.3". IBM. Retrieved August 11, 2011.
- ^ "IBM releases OpenCL Development Kit for Linux on Power v0.3 – OpenCL 1.1 conformant release available". OpenCL Lounge. ibm.com. Retrieved August 11, 2011.
- ^ "IBM releases OpenCL Common Runtime for Linux on x86 Architecture". IBM. October 20, 2009. Retrieved September 10, 2011.
- ^ "OpenCL and the AMD APP SDK". AMD Developer Central. developer.amd.com. Archived from the original on September 6, 2011. Retrieved September 10, 2011.
- ^ "Nvidia Releases OpenCL Driver". April 22, 2009. Retrieved August 11, 2011.
- ^ "clinfo by Simon Leblanc". GitHub. Retrieved January 27, 2017.
- ^ "clinfo by Oblomov". GitHub. Retrieved January 27, 2017.
- ^ "clinfo: openCL INFOrmation". Retrieved January 27, 2017.
- ^ "Khronos Products". The Khronos Group. Retrieved May 15, 2017.
- ^ "OpenCL-CTS/Test_conformance at main · KhronosGroup/OpenCL-CTS". GitHub.
- ^ "Issues · KhronosGroup/OpenCL-CTS". GitHub.
- ^ "Intel Compute-Runtime 20.43.18277 Brings Alder Lake Support".
- ^ "compute-runtime". 01.org. February 7, 2018.
- ^ a b Fang, Jianbin; Varbanescu, Ana Lucia; Sips, Henk (2011). "A Comprehensive Performance Comparison of CUDA and OpenCL". 2011 International Conference on Parallel Processing. Proc. Int'l Conf. on Parallel Processing. pp. 216–225. doi:10.1109/ICPP.2011.45. ISBN 978-1-4577-1336-1.
- ^ Du, Peng; Weber, Rick; Luszczek, Piotr; Tomov, Stanimire; Peterson, Gregory; Dongarra, Jack (2012). "From CUDA to OpenCL: Towards a performance-portable solution for multi-platform GPU programming". Parallel Computing. 38 (8): 391–407. CiteSeerX 10.1.1.193.7712. doi:10.1016/j.parco.2011.10.002.
- ^ Dolbeau, Romain; Bodin, François; de Verdière, Guillaume Colin (September 7, 2013). "One OpenCL to rule them all?". 2013 IEEE 6th International Workshop on Multi-/Many-core Computing Systems (MuCoCoS). pp. 1–6. doi:10.1109/MuCoCoS.2013.6633603. ISBN 978-1-4799-1010-6. S2CID 225784.
- ^ Karimi, Kamran; Dickson, Neil G.; Hamze, Firas (2011). "A Performance Comparison of CUDA and OpenCL". arXiv:1005.2581v3 [cs.PF].
- ^ CPU-GPU 이기종 컴퓨팅 기술 조사, ACM Computing Survey, 2015.
- ^ Grewe, Dominik; O'Boyle, Michael F. P. (2011). "A Static Task Partitioning Approach for Heterogeneous Systems Using OpenCL". Compiler Construction. Proc. Int'l Conf. on Compiler Construction. Lecture Notes in Computer Science. Vol. 6601. pp. 286–305. doi:10.1007/978-3-642-19861-8_16. ISBN 978-3-642-19860-1.
- ^ "Radeon RX 6800 Series Has Excellent ROCm-Based OpenCL Performance on Linux".