OpenCL ํ‘œ์ค€์„ ๋…๋ฆฝ์ ์œผ๋กœ ๊ตฌํ˜„ํ•œ PoCL 5.0 ์ถœ์‹œ

๊ทธ๋ž˜ํ”ฝ ๊ฐ€์†๊ธฐ ์ œ์กฐ์—…์ฒด์™€ ๋…๋ฆฝ์ ์ด๋ฉฐ ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ๊ทธ๋ž˜ํ”ฝ ๋ฐ ์ค‘์•™ ํ”„๋กœ์„ธ์„œ์—์„œ 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

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€