๊ทธ๋ํฝ ๊ฐ์๊ธฐ ์ ์กฐ์ ์ฒด์ ๋ ๋ฆฝ์ ์ด๋ฉฐ ๋ค์ํ ์ ํ์ ๊ทธ๋ํฝ ๋ฐ ์ค์ ํ๋ก์ธ์์์ OpenCL ์ปค๋์ ์คํํ๊ธฐ ์ํด ๋ค์ํ ๋ฐฑ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ OpenCL ํ์ค ๊ตฌํ์ ๊ฐ๋ฐํ๋ PoCL 5.0 ํ๋ก์ ํธ(Portable Computing Language OpenCL)๊ฐ ์ถ์๋์์ต๋๋ค. . ํ๋ก์ ํธ ์ฝ๋๋ MIT ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค. VLIW ์ํคํ ์ฒ๋ฅผ ๊ฐ์ถ ํ๋ซํผ X86_64, MIPS32, ARM v7, AMD HSA APU, NVIDIA GPU ๋ฐ ๋ค์ํ ํน์ ASIP(Application-Specific Instruction-set Processor) ๋ฐ TTA(Transport Triggered Architecture) ํ๋ก์ธ์์์์ ์์ ์ ์ง์ํฉ๋๋ค.
OpenCL ์ปค๋ ์ปดํ์ผ๋ฌ์ ๊ตฌํ์ LLVM์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋์์ผ๋ฉฐ Clang์ OpenCL C์ ํ๋ฐํธ ์๋๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์ ์ ํ ์ด์์ฑ๊ณผ ์ฑ๋ฅ์ ๋ณด์ฅํ๊ธฐ ์ํด OpenCL ์ปค๋ ์ปดํ์ผ๋ฌ๋ VLIW, ์ํผ์ค์นผ๋ผ, SIMD, SIMT, ๋ฉํฐ ์ฝ์ด ๋ฐ ๋ฉํฐ ์ค๋ ๋ฉ๊ณผ ๊ฐ์ ์ฝ๋ ์คํ์ ๋ณ๋ ฌํํ๊ธฐ ์ํด ๋ค์ํ ํ๋์จ์ด ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ ์ ์๋ ์กฐํฉ ๊ธฐ๋ฅ์ ์์ฑํ ์ ์์ต๋๋ค. ICD ๋๋ผ์ด๋ฒ(์ค์น ๊ฐ๋ฅํ ํด๋ผ์ด์ธํธ ๋๋ผ์ด๋ฒ)๊ฐ ์ง์๋ฉ๋๋ค. CPU, ASIP(TCE/TTA), HSA ์ํคํ ์ฒ ๊ธฐ๋ฐ GPU ๋ฐ NVIDIA GPU(libcuda๋ฅผ ํตํด)๋ฅผ ํตํ ์์ ์ ์ง์ํ๋ ๋ฐฑ์๋๊ฐ ์์ต๋๋ค.
์ ๋ฒ์ ์์:
- OpenCL ๋ช ๋ น ์ฒ๋ฆฌ๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋ pocld ํ๋ก์ธ์ค๋ฅผ ์คํํ๋ ๋คํธ์ํฌ์ ๋ค๋ฅธ ํธ์คํธ๋ก ์ ์กํ์ฌ ๋ถ์ฐ ์ปดํจํ ์ ๊ตฌ์ฑํ๋๋ก ์ค๊ณ๋ ์๋ก์ด "์๊ฒฉ" ๋ฐฑ์๋๊ฐ ๊ตฌํ๋์์ต๋๋ค.
- CUDA ๋๋ผ์ด๋ฒ๋ ์์ ์ฐ์ฐ, ๋ฒ์ ๋ณ์, intel_sub_group_shuffle, intel_sub_group_shuffle_xor, get_sub_group_local_id, sub_group_barrier ๋ฐ sub_group_ballot์ ๊ฐ์ OpenCL 3.0์ ์ถ๊ฐ ๊ธฐ๋ฅ ๋ฐ ํ์ฅ์ ๊ตฌํํฉ๋๋ค.
- RISC-V ์ํคํ ์ฒ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก CPU์ ๋ํ ์ง์์ด ํฅ์๋์์ต๋๋ค. PoCL ์๋์ LLVM 2 ๋ฐ GCC 23.10๊ฐ ์ค์น๋ Ubuntu 17 ํ๊ฒฝ์ด ํ์ฌ๋ Starfive VisionFive 13.2 ๋ณด๋์์ ํ ์คํธ๋์์ต๋๋ค.
- cl_ext_float_atomics ํ์ฅ์ FP32 ๋ฐ FP64์ ๋ํ ์ง์์ผ๋ก ๊ตฌํ๋์์ต๋๋ค.
- cl_khr_command_buffer ํ์ฅ ๊ตฌํ์ด ๋ฒ์ 0.9.4๋ก ์ ๋ฐ์ดํธ๋์์ต๋๋ค.
- FPGA๋ฅผ ์ํ ์คํ์ ์ธ AlmaIF ๋ฐฑ์๋๊ฐ ์ ์๋์์ต๋๋ค.
- SPIR 1.x/2.0 ์ ฐ์ด๋์ ์ค๊ฐ ํํ์ ๋ํ ๋ถ์์ ํ ์ง์์ ์ ๊ฑฐํ์ต๋๋ค. SPIR-V๋ ๊ถ์ฅ๋๋ ์ค๊ฐ ์ ฐ์ด๋ ์ธ์ด๋ก ์ ์ธ๋ฉ๋๋ค.
- Clang/LLVM 17.0์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. Clang/LLVM 10-13์ ๋ํ ์ง์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค.
์ถ์ฒ : opennet.ru