판 비교

이전빈 문서 (처음 만든 판)
이후#163 · AI 조사: 게임 용어 문서 · GGWiki 자동 ·
+68줄−0줄+3,961자
1번째 줄 근처
추가: ## 개요
추가: **OpenCL(Open Computing Language)**은 이기종 컴퓨팅 시스템에서 병렬 프로그램을 작성하기 위한 개방형, 로열티 프리 표준이자 프레임워크다. 중앙처리장치(CPU), 그래픽처리장치(GPU), 디지털 신호 처리장치(DSP), 필드 프로그래머블 게이트 어레이(FPGA), 텐서 프로세서 등 다양한 가속기를 단일 프로그래밍 모델로 제어할 수 있게 해준다. 크로노스 그룹(Khronos Group)이 관리하며, 2009년 8월 28일 최초 공개되었다.[1][2][3][4]
추가:
추가: OpenCL은 커널(kernel) 코드를 작성하기 위한 C99 기반 언어(OpenCL C)와 플랫폼을 정의·제어하기 위한 호스트 API로 구성된다. 작업 기반(task-based) 및 데이터 기반(data-based) 병렬성을 모두 지원하며, 실행 시점(JIT)에 커널을 컴파일해 이식성을 확보한다. 호스트 프로그램은 C/C++로 작성하고 OpenCL API를 통해 커널을 디바이스에 디스패치하며, 디바이스 메모리는 호스트 메모리와 개념적으로 분리되어 있다.[3]
추가:
추가: ## 작동 방식과 유형
추가:
추가: ### 플랫폼 모델과 실행 모델
추가:
추가: OpenCL은 컴퓨팅 시스템을 **호스트(host)**와 하나 이상의 **컴퓨트 디바이스(compute device)**로 본다. 호스트(일반적으로 CPU)는 애플리케이션 로직을 수행하고 OpenCL API를 호출해 디바이스를 제어한다. 디바이스는 CPU, GPU, DSP, FPGA, 전용 추론 엔진 등일 수 있다.[3][4]
추가:
추가: 단일 컴퓨트 디바이스는 여러 **컴퓨트 유닛(compute unit)**으로 구성되며, 각 컴퓨트 유닛은 다수의 **처리 요소(processing element, PE)**를 포함한다. 커널 한 번 실행으로 다수 PE에서 병렬 연산이 수행된다. 컴퓨트 유닛과 PE의 구체적 구성은 벤더 재량이며, '코어' 개념이 모든 디바이스 유형에 일관되게 적용되지는 않는다.[3]
추가:
추가: ### 메모리 계층
추가:
추가: OpenCL은 디바이스 측에서 네 단계 메모리 계층을 정의한다.[3]
추가:
추가: * **전역 메모리(__global)**: 모든 처리 요소가 공유하며 접근 지연시간이 길다.
추가: * **읽기 전용 메모리/상수 메모리(__constant)**: 더 작고 지연시간이 낮으며, 호스트 CPU만 쓸 수 있고 디바이스는 읽기만 가능하다.
추가: * **로컬 메모리(__local)**: 처리 요소 그룹(워크 그룹) 내 공유된다.
추가: * **프라이빗 메모리/레지스터(__private)**: 개별 처리 요소 전용이다.
추가:
추가: 모든 디바이스가 각 단계를 하드웨어로 구현할 필요는 없으며, 계층 간 일관성은 명시적 동기화(배리어 등)로만 강제된다. 디바이스 메모리와 호스트 메모리는 공유될 수도, 분리될 수도 있으며, 호스트 API는 버퍼 핸들과 전송 함수를 제공한다.[3]
추가:
추가: ### 프로그래밍 언어: OpenCL C와 C++ for OpenCL
추가:
추가: * **OpenCL C**: C99 기반 방언. 포인터에 주소 공간 한정자(`__global`, `__local`, `__constant`, `__private`)를 붙여 메모리 계층을 명시한다. `main` 함수 대신 `__kernel` 한정자로 진입점을 표시한다. 함수 포인터, 비트 필드, 가변 길이 배열, 재귀는 금지되며, 표준 라이브러리는 수학 중심의 전용 함수 집합으로 대체된다. 벡터 타입(`float4` 등)과 SIMD 매핑, 워크 아이템·워크 그룹 동기화 기능을 내장한다.[3]
추가: * **OpenCL C++ (단명 사양)**: OpenCL C와 C++14를 결합하려 했으나 온라인 컴파일만 지원하고 확장 감지 메커니즘이 없었으며 실제 드라이버 지원 여부가 불확실하다.[3]
추가: * **C++ for OpenCL (2020~현재)**: 커뮤니티 주도로 C++17 기능을 OpenCL C 위에 얹으면서 역호환성을 유지한다. Clang 9부터 지원하며, `-cl-std=CLC++` 옵션이나 `cl_ext_cxx_for_opencl` 확장으로 드라이버에서 온라인 컴파일 가능. 오프라인 컴파일로 SPIR-V나 실행 바이너리를 생성해 런타임에 로드하는 흐름도 권장된다. 가상 함수, 예외, `dynamic_cast`, 비배치 `new/delete`, C++ 표준 라이브러리 등은 미지원이나, 템플릿, 람다, 연산자 오버로딩 등 다수 C++ 기능을 주소 공간 개념과 함께 활용할 수 있다.[3]
추가:
추가: ### 중간 표현과 이식성
추가:
추가: * **SPIR-V**: 프론트엔드 컴파일러와 OpenCL 백엔드 간 커널을 타깃 독립적으로 전달하기 위한 표준 휴대용 중간 표현(Standard Portable Intermediate Representation). OpenCL 3.1에서 핵심 사양에 편입되었다.[3][4]
추가: * **오프라인 컴파일**: 복잡도 증가에 따라 Clang 등으로 SPIR-V나 벤더별 바이너리를 미리 빌드해 배포하고, 런타임에 `clCreateProgramWithBinary` 등으로 로드하는 방식이 일반화되고 있다.[3]
추가:
추가: ### 상위 프로그래밍 모델: SYCL
추가:
추가: 크로노스 그룹은 순수 C++17 기반 단일 소스 임베디드 DSL(Single-source eDSL)인 **SYCL**을 비준해 OpenCL 위에서 더 높은 생산성의 추상화 계층을 제공한다. SYCL은 OpenCL 커널과 호스트 코드를 같은 C++ 소스에 작성하게 하며, OpenCL 구현체 위에서 동작한다.[3][4]
추가:
추가: ## 사례
추가:
추가: 자료에 명시된 초기 구현·시연·채택 사례는 다음과 같다.[2][3]
추가:
추가: * **애플**: 맥 OS X 10.6 스노 레퍼드(2009-09)에 최초 탑재. 초기 지원 GPU 목록 제시.
추가: * **AMD**: 2008-12-10 시그라프 아시아(Siggraph Asia 2008)에서 CPU 가속 OpenCL 시연으로 코어 수에 따른 규모가변성 입증. 2009-03-26 GDC 2009에서 하복(Havok)과 라데온 HD 4000 시리즈 GPU 상에서 하복 클로스(Havok Cloth) 가속 시연.
추가: * **엔비디아**: 2008-12-10 시그라프 아시아에서 GPU 가속 시연. 2009-04-20 조기 접근 프로그램 참가 개발자 대상 드라이버·SDK 배포.
추가: * **IBM**: 2009-10-30 XL 컴파일러의 일부로 첫 OpenCL 구현 릴리스.
추가: * **RapidMind**: 개발 플랫폼 하부에 OpenCL 채택 공식 선언.
추가:
추가: ## 그 밖의 주제
추가:
추가: ### 적합성 테스트와 에코시스템
추가:
추가: 크로노스 그룹은 **OpenCL 적합성 테스트 스위트(CTS)**를 제공해 구현체 신뢰성을 검증한다. 적합 제품 목록(Conformant Products)은 크로노스 웹사이트에 공개되며, AMD, Arm, Cadence, Google, Imagination, Intel, Nvidia, Qualcomm, Samsung, SPI, Verisilicon 등 다수 기업이 적합 구현체를 보유한다.[3][4]
추가:
추가: ### 개발 도구와 참고 자료
추가:
추가: 공식 사이트는 명세서(HTML/PDF), SDK(헤더, 바인딩, 로더, 유틸리티, 샘플), 입문 가이드(OpenCL Guide), 레퍼런스 페이지, 퀵 레퍼런스 카드, Clang 지원, 인터셉트 레이어(디버깅·성능 분석), GPUInfo.org 연동 등을 제공한다. 연례 컨퍼런스 **IWOCL(International Workshop on OpenCL)**이 개최된다.[4]
추가:
추가: ### 상표와 라이선스
추가:
추가: OpenCL 상표는 애플이 소유하며 크로노스 그룹이 라이선스 관리한다. 명세서는 로열티 프리(open, royalty-free standard)로 공개되며, 구현체는 오픈 소스 라이선스 하에 배포되기도 한다.[1][4]
추가:
추가: ### 운영체제·아키텍처 지원 범위
추가:
추가: 마이크로소프트 윈도우, macOS, 리눅스, FreeBSD, 안드로이드에서 동작하며, x86_64, IA-32, ARM 아키텍처를 지원한다.[1]
추가:
추가: 이 문서는 GGWiki AI가 공개 자료(아래 출처)를 조사해 새로 쓴 초안입니다. 틀린 내용은 편집하거나 이의 제기로 알려 주세요.