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

์‚ฌ์šฉ ๊ฐ€๋Šฅ ํ”„๋กœ์ ํŠธ ๋ฆด๋ฆฌ์Šค PoCL 1.4 (Portable Computing Language OpenCL)์€ ๊ทธ๋ž˜ํ”ฝ ๊ฐ€์†๊ธฐ ์ œ์กฐ์—…์ฒด์™€ ๋…๋ฆฝ์ ์ธ OpenCL ํ‘œ์ค€ ๊ตฌํ˜„์„ ๊ฐœ๋ฐœํ•˜๊ณ  ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ๊ทธ๋ž˜ํ”ฝ ๋ฐ ์ค‘์•™ ํ”„๋กœ์„ธ์„œ์—์„œ OpenCL ์ปค๋„์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ๋ฐฑ์—”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ ๋ฐฐํฌ์ž MIT ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ. X86_64, MIPS32, ARM v7, AMD HSA APU ํ”Œ๋žซํผ ๋ฐ ๋‹ค์–‘ํ•œ ํŠน์ˆ˜ TTA ํ”„๋กœ์„ธ์„œ์— ๋Œ€ํ•œ ์ž‘์—…์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค(์ „์†ก ํŠธ๋ฆฌ๊ฑฐ ์•„ํ‚คํ…์ฒ˜) ์•„ํ‚คํ…์ฒ˜์™€ ํ•จ๊ป˜ VLIW.

OpenCL ์ปค๋„ ์ปดํŒŒ์ผ๋Ÿฌ์˜ ๊ตฌํ˜„์€ LLVM์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋˜์—ˆ์œผ๋ฉฐ Clang์€ OpenCL C์˜ ํ”„๋ŸฐํŠธ ์—”๋“œ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ ์ ˆํ•œ ์ด์‹์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด OpenCL ์ปค๋„ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” VLIW, ์ˆ˜ํผ์Šค์นผ๋ผ, SIMD, SIMT, ๋ฉ€ํ‹ฐ ์ฝ”์–ด ๋ฐ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ ์‹คํ–‰์„ ๋ณ‘๋ ฌํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ํ•˜๋“œ์›จ์–ด ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์กฐํ•ฉ ๊ธฐ๋Šฅ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ICD ๋“œ๋ผ์ด๋ฒ„ ์ง€์› ๊ฐ€๋Šฅ
(์„ค์น˜ ๊ฐ€๋Šฅํ•œ ํด๋ผ์ด์–ธํŠธ ๋“œ๋ผ์ด๋ฒ„). CPU, ASIP(TCE/TTA), GPU ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ†ตํ•œ ์ž‘๋™์„ ๋ณด์žฅํ•˜๋Š” ๋ฐฑ์—”๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. HSA ๊ทธ๋ฆฌ๊ณ  ์—”๋น„๋””์•„ GPU(CUDA).

ะ’ ์ƒˆ๋กœ์šด ๋ฒ„์ „:

  • ์ถ”๊ฐ€ ์ง€์› LLVM/ํด๋žญ 9.0. 6.0 ์ด์ „ LLVM ๋ฒ„์ „์— ๋Œ€ํ•œ ์ง€์›์€ ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ค‘๊ฐ„ ์ฝ”๋“œ ํ‘œํ˜„์˜ ํ–ฅ์ƒ๋œ CPU ๊ธฐ๋ฐ˜ ๊ตฌํ˜„ ๊ทผ์‚ฌ ะธ SPIR-V (Vulkan API์—์„œ ์‚ฌ์šฉ๋จ) ๊ทธ๋ž˜ํ”ฝ ๋ฐ ๋ณ‘๋ ฌ ์ปดํ“จํŒ…์šฉ ์…ฐ์ด๋”๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ ๋งคํ•‘(mmap) ์ œ์–ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” OpenCL 1.2 ํ•˜๋“œ์›จ์–ด ๊ฐ€์†๊ธฐ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์˜ˆ์ œ ์ธํ”„๋ผ์™€ ํ•จ๊ป˜ pocl-accel ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€(์žฌ๋ฐฐ์น˜ ๊ฐ€๋Šฅ) pocl ์„ค์น˜๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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