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

๊ทธ๋ž˜ํ”ฝ ๊ฐ€์†๊ธฐ ์ œ์กฐ์—…์ฒด์™€ ๋…๋ฆฝ์ ์ธ OpenCL ํ‘œ์ค€ ๊ตฌํ˜„์„ ๊ฐœ๋ฐœํ•˜๊ณ  ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ๊ทธ๋ž˜ํ”ฝ ๋ฐ ์ค‘์•™์—์„œ OpenCL ์ปค๋„์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ๋ฐฑ์—”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” PoCL 3.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 3.0 ์‚ฌ์–‘์„ ์ง€์›ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ตœ์†Œ ๊ธฐ๋Šฅ ์„ธํŠธ๊ฐ€ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. OpenCL 3.0 ์ง€์›์€ ํ˜„์žฌ LLVM 14๊ฐ€ ํฌํ•จ๋œ CPU ๊ธฐ๋ฐ˜ ๋ฐฑ์—”๋“œ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋‹ค๋ฅธ ๋ฐฑ์—”๋“œ ๋ฐ ์ด์ „ ๋ฒ„์ „์˜ LLVM์€ OpenCL 1.2์— ๋Œ€ํ•œ ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค).
  • Clang/LLVM 14์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ถ”์  ๋ฐ ์‹œ๊ฐํ™”๊ฐ€ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํŠน์ˆ˜ํ•œ ํ•จ์ˆ˜ ๊ทธ๋ฃน์„ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ OpenCL ์ปค๋„์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ ํŒŒ์ผ์— ํฌํ•จ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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