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

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

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

์ƒˆ ๋ฒ„์ „์—๋Š” LLVM/Clang 8.0์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. macOS ํ”Œ๋žซํผ์—์„œ ICD(์„ค์น˜ ๊ฐ€๋Šฅํ•œ ํด๋ผ์ด์–ธํŠธ ๋“œ๋ผ์ด๋ฒ„)์— ๋Œ€ํ•œ ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. CPU์šฉ ๋ฐฑ์—”๋“œ ๋“œ๋ผ์ด๋ฒ„ ์—†์ด pocl์„ ๋นŒ๋“œํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. HSA(์ด๊ธฐ์ข… ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜)์˜ ๊ฒฝ์šฐ HSA ๋Ÿฐํƒ€์ž„ ์œ„์— ISA๋ฅผ ์ปดํŒŒ์ผํ•˜๊ธฐ ์œ„ํ•œ ์ดˆ๊ธฐ ์ง€์›์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. Vecmathlib ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ œ๊ฑฐ๋˜๊ณ  ์ด์ „ ๋ฒ„์ „์˜ LLVM(6.0 ๋ฏธ๋งŒ)์— ๋Œ€ํ•œ ์ง€์›์ด ์ค‘๋‹จ๋˜๋Š” ๋“ฑ ์ฝ”๋“œ ๋ฒ ์ด์Šค๊ฐ€ ์ •๋ฆฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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