OpenCL 3.0 ์‚ฌ์–‘ ๋„์ž…

OpenGL, Vulkan ๋ฐ OpenCL ์ œํ’ˆ๊ตฐ ์‚ฌ์–‘ ๊ฐœ๋ฐœ์„ ๋‹ด๋‹นํ•˜๋Š” Khronos ๊ด€์‹ฌ์‚ฌ๋Š” ะพะฑัŠัะฒะธะป ์Šˆํผ์ปดํ“จํ„ฐ์™€ ํด๋ผ์šฐ๋“œ ์„œ๋ฒ„์— ์‚ฌ์šฉ๋˜๋Š” ๋ฉ€ํ‹ฐ ์ฝ”์–ด CPU, GPU, FPGA, DSP ๋ฐ ๊ธฐํƒ€ ํŠน์ˆ˜ ์นฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋ณ‘๋ ฌ ์ปดํ“จํŒ…์„ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ API ๋ฐ C ์–ธ์–ด ํ™•์žฅ์„ ์ •์˜ํ•˜๋Š” OpenCL 3.0 ์‚ฌ์–‘ ๊ฐœ๋ฐœ ์™„๋ฃŒ ๋ชจ๋ฐ”์ผ ์žฅ์น˜ ๋ฐ ์ž„๋ฒ ๋””๋“œ ๊ธฐ์ˆ ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ์นฉ์ž…๋‹ˆ๋‹ค. OpenCL ํ‘œ์ค€์€ ์™„์ „ํžˆ ๊ฐœ๋ฐฉ์ ์ด๋ฉฐ ๋ผ์ด์„ ์Šค ๋น„์šฉ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. IBM, NVIDIA, Intel, AMD, Apple, ARM, Electronic Arts, Qualcomm, Texas Instruments ๋ฐ Toshiba์™€ ๊ฐ™์€ ํšŒ์‚ฌ๊ฐ€ ํ‘œ์ค€ ์ž‘์—…์— ์ฐธ์—ฌํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ˜„ ๋‹จ๊ณ„์—์„œ ์‚ฌ์–‘์€ ์ž„์‹œ ์ƒํƒœ๋กœ ์ง€์ •๋˜์—ˆ์œผ๋ฉฐ, ์ด๋Š” ๋‹ค์Œ์„ ํ†ตํ•ด ์ „์†ก๋œ ํ”ผ๋“œ๋ฐฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ์„  ๊ฐ€๋Šฅ์„ฑ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. GitHub์˜. ์˜๊ฒฌ์ด ๊ณ ๋ ค๋˜๋ฉด ์‚ฌ์–‘์ด ํ™•์ •๋˜๊ณ  ๊ธฐ์กด ๊ตฌํ˜„์˜ ํ˜ธํ™˜์„ฑ์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์ข… ํ…Œ์ŠคํŠธ ๋ชจ์Œ์ด ๊ฒŒ์‹œ๋ฉ๋‹ˆ๋‹ค.

OpenCL 3.0 ์‚ฌ์–‘ ๋„์ž…

๊ฐ€์žฅ ์ฃผ๋ชฉํ• ๋งŒํ•œ ํŠน์ง• OpenCL 3.0:

  • OpenCL 3.0 API๋Š” ์ด์ œ ๊ฐ ๋ฒ„์ „์— ๋Œ€ํ•œ ๋ณ„๋„์˜ ์‚ฌ์–‘์„ ์ œ๊ณตํ•˜์ง€ ์•Š๊ณ  OpenCL์˜ ๋ชจ๋“  ๋ฒ„์ „(1.2, 2.x)์„ ํฌ๊ด„ํ•ฉ๋‹ˆ๋‹ค. OpenCL 3.0์€ OpenCL 1.2/2.X์˜ ๋ชจ๋†€๋ฆฌ์‹ ํŠน์„ฑ์„ ์ฐจ๋‹จํ•˜์ง€ ์•Š๊ณ  ์˜ต์…˜ ํ˜•ํƒœ๋กœ ๊ณ„์ธตํ™”๋˜๋Š” ์ถ”๊ฐ€ ์‚ฌ์–‘์˜ ํ†ตํ•ฉ์„ ํ†ตํ•ด ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • OpenCL 1.2๋ฅผ ์ค€์ˆ˜ํ•˜๋Š” ๊ธฐ๋Šฅ๋งŒ ํ•„์ˆ˜๋กœ ์„ ์–ธํ•˜๊ณ , OpenCL 2.x ์‚ฌ์–‘์—์„œ ์ œ์•ˆํ•˜๋Š” ๋ชจ๋“  ๊ธฐ๋Šฅ์€ ์„ ํƒ์œผ๋กœ ๋ถ„๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด OpenCL 3.0๊ณผ ํ˜ธํ™˜๋˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ๊ตฌํ˜„์„ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ OpenCL 3.0์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์น˜ ๋ฒ”์œ„๊ฐ€ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ œ์กฐ์—…์ฒด๋Š” ํŠน์ • OpenCL 3.0.x ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ณ ๋„ OpenCL 2 ์ง€์›์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ ํƒ์  ์–ธ์–ด ๊ธฐ๋Šฅ์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•ด OpenCL 3.0์—๋Š” ๊ฐœ๋ณ„ API ์š”์†Œ์™€ ํŠน์ˆ˜ ๋งคํฌ๋กœ์˜ ์ง€์›์„ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ํ…Œ์ŠคํŠธ ์ฟผ๋ฆฌ ์‹œ์Šคํ…œ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ด์ „์— ์ถœ์‹œ๋œ ์‚ฌ์–‘๊ณผ์˜ ํ†ตํ•ฉ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ OpenCL 3.0์œผ๋กœ ๋” ์‰ฝ๊ฒŒ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. OpenCL 1.2 ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ OpenCL 3.0์„ ์ง€์›ํ•˜๋Š” ์žฅ์น˜์—์„œ ์ˆ˜์ • ์—†์ด ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ OpenCL 2 ํ™˜๊ฒฝ์ด ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ํ•œ OpenCL 3.0.x ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๋Š” ์ฝ”๋“œ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(ํ–ฅํ›„ ์ด์‹์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด OpenCL 2.x ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ OpenCL 2.x ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ง€์›์„ ํ‰๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ŠคํŠธ ์ฟผ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค). ์‚ฌ์šฉ ์ค‘). OpenCL์„ ๊ตฌํ˜„ํ•œ ๋“œ๋ผ์ด๋ฒ„ ๊ฐœ๋ฐœ์ž๋Š” ์ œํ’ˆ์„ OpenCL 3.0์œผ๋กœ ์‰ฝ๊ฒŒ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜์—ฌ ํŠน์ • API ํ˜ธ์ถœ์— ๋Œ€ํ•œ ์ฟผ๋ฆฌ ์ฒ˜๋ฆฌ๋งŒ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๊ธฐ๋Šฅ์„ ์ ์ง„์ ์œผ๋กœ ๋Š˜๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • OpenCL 3.0 ์‚ฌ์–‘์€ Vulkan API์—์„œ๋„ ์‚ฌ์šฉ๋˜๋Š” SPIR-V ์ผ๋ฐ˜ ์ค‘๊ฐ„ ํ‘œํ˜„์˜ ํ™˜๊ฒฝ, ํ™•์žฅ ๋ฐ ์‚ฌ์–‘๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. SPIR-V 1.3 ์‚ฌ์–‘์— ๋Œ€ํ•œ ์ง€์›์€ ํ•ต์‹ฌ OpenCL 3.0์— ์„ ํƒ์  ๊ธฐ๋Šฅ์œผ๋กœ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ค‘๊ฐ„ ํ‘œํ˜„์„ ์‚ฌ์šฉํ•˜์—ฌ SPIR-V ์ปดํ“จํŒ… ์ฝ”์–ด์— ํ•˜์œ„ ๊ทธ๋ฃน ์ž‘์—…์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    OpenCL 3.0 ์‚ฌ์–‘ ๋„์ž…

  • ์ง์ ‘ ๋ฉ”๋ชจ๋ฆฌ ์•ก์„ธ์Šค๊ฐ€ ๊ฐ€๋Šฅํ•œ DSP ์œ ์‚ฌ ์นฉ์—์„œ ์ง€์›๋˜๋Š” ๋น„๋™๊ธฐ DMA ์ž‘์—…(Asynchronous DMA)์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ํ™•์žฅ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ์‹ DMA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด DMA ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„์‚ฐ์ด๋‚˜ ๊ธฐํƒ€ ๋ฐ์ดํ„ฐ ์ „์†ก ์ž‘์—…๊ณผ ๋ณ‘ํ–‰ํ•˜์—ฌ ๊ธ€๋กœ๋ฒŒ ๋ฉ”๋ชจ๋ฆฌ์™€ ๋กœ์ปฌ ๋ฉ”๋ชจ๋ฆฌ ๊ฐ„์— ๋น„๋™๊ธฐ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • C ๋ณ‘๋ ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™•์žฅ ์‚ฌ์–‘์ด ๋‹ค์Œ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„์ „ 3.0, "OpenCL์šฉ C++" ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•ด C++์šฉ OpenCL ์–ธ์–ด ํ™•์žฅ ๊ฐœ๋ฐœ์ด ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. OpenCL์šฉ C++๋Š” Clang/LLVM์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์ด๋ฉฐ ๋ฐฉ์†ก C++ ๋ฐ OpenCL C ์ปค๋„์„ SPIR-V ์ค‘๊ฐ„ ํ‘œํ˜„ ๋˜๋Š” ํ•˜์œ„ ์ˆ˜์ค€ ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…์„ ํ†ตํ•ด SPIR-V๋Š” ๋˜ํ•œ ๋ณ‘๋ ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑ์„ ๋‹จ์ˆœํ™”ํ•˜๋Š” SYCL ํ…œํ”Œ๋ฆฟ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ C++ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

    OpenCL 3.0 ์‚ฌ์–‘ ๋„์ž…

  • Vulkan API๋ฅผ ํ†ตํ•ด OpenCL์„ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…ํ•˜๊ธฐ ์œ„ํ•œ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. clspv, OpenCL ์ปค๋„์„ Vulkan SPIR-V ํ‘œํ˜„์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๋ ˆ์ด์–ด clvk OpenCL API๊ฐ€ Vulkan ์œ„์—์„œ ์ž‘๋™ํ•˜๋„๋ก ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

    OpenCL 3.0 ์‚ฌ์–‘ ๋„์ž…

์ถœ์ฒ˜ : opennet.ru

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