์ด ๋ฌธ์„œ์˜ ์›๋ณธ์€ ์™ธ๋ถ€ ์œ„ํ‚ค์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.


Open Computing Language

1. ๊ฐœ์š”2. ๋ฐฐ๊ฒฝ3. ํŠน์ง•4. ์—ญ์‚ฌ

1. ๊ฐœ์š”[ํŽธ์ง‘]

2009๋…„ 8์›”์— ๋ฐœํ‘œ๋œ ์—”๋น„๋””์•„์˜ CUDA ํ”„๋กœ๊ทธ๋ž˜๋ฐ, MS์˜ DirectCompute์™€ ๋Œ€์‘๋˜๋Š” GPGPU ํ”„๋กœ๊ทธ๋ž˜๋ฐ์šฉ API. ํ•œ๊ตญ์–ด๋กœ๋Š” ๊ฐœ๋ฐฉํ˜• ๋ฒ”์šฉ ๋ณ‘๋ ฌ ์ปดํ“จํŒ… ํ”„๋ ˆ์ž„์›Œํฌ๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค.

2. ๋ฐฐ๊ฒฝ[ํŽธ์ง‘]

๊ฐœ๋ฐœ์ž๋Š” Apple Inc. ๊ฐœ๋ฐœ์ž๋ผ ๋ฉ๋‹ฌ์•„ ์ด ์ด๋ฆ„์˜ ์ƒํ‘œ๊ถŒ๋„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์• ํ”Œ์€ 2008๋…„ 12์›” 8์ผ์— ์–ด๋А ์ •๋„ ํ‹€์„ ์žก์•„๋†“๊ณ  NVIDIA, AMD, ์ธํ…” ๋“ฑ๊ณผ ๊ฐ™์ด ๋‹ค๋“ฌ์–ด์„œ OpenGL ๋“ฑ์„ ๊ฐœ๋ฐœํ•˜๋Š” ํฌ๋กœ๋…ธ์Šค ๊ทธ๋ฃน์— ๋งก๊ธด๋‹ค. ๊ทธ ํ›„ ํฌ๋กœ๋…ธ์Šค ๊ทธ๋ฃน์€ ์—ด์‹ฌํžˆ ๋…ธ๋ ฅํ•ด์„œ 2009๋…„ 8์›” 28์ผ์— 1.0์„ ๊ฐœ๋ฐœํ•˜์˜€๊ณ , 1.0์€...

๋‹น์—ฐํ•˜๊ฒŒ๋„ OS X ์Šค๋…ธ์šฐ ๋ ˆ์˜คํŒŒ๋“œ์™€ ๊ฐ™์ด ๊ณต๊ฐœ๋˜์—ˆ๋‹ค.

์• ํ”Œ์€ OpenCL 1.0์„ ์ •์‹ ๊ณต๊ฐœํ•˜๋ฉด์„œ ์ด๋ ‡๊ฒŒ ๋งํ–ˆ๋‹ค.
Snow Leopard further extends support for modern hardware with Open Computing Language (OpenCL), which lets any application tap into the vast gigaflops of GPU computing power previously available only to graphics applications. OpenCL is based on the C programming language and has been proposed as an open standard.

์Šค๋…ธ์šฐ ๋ ˆ์˜คํŒŒ๋“œ๋Š” OpenCL๋กœ ํ˜„๋Œ€ ํ•˜๋“œ์›จ์–ด์— ๋Œ€ํ•œ ์ง€์›์„ ํ™•์žฅํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋Š” GPU์˜ ๋ฐฉ๋Œ€ํ•œ ๊ธฐ๊ฐ€ํ”Œ๋กญ์Šค ๊ณ„์‚ฐ ๋Šฅ๋ ฅ์„ ๊ทธ๋ž˜ํ”ฝ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๋งŒ ์‚ฌ์šฉํ•ด ์™”์ง€๋งŒ, OpenCL์„ ํ†ตํ•˜์—ฌ ์ด์ œ ์–ด๋– ํ•œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋„ ๋Œ์–ด์™€ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. OpenCL์€ C ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์— ๊ธฐ๋ฐ˜ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๊ฐœ๋ฐฉํ˜• ํ‘œ์ค€์œผ๋กœ ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜, 2018๋…„์— ์ถœ์‹œ๋œ macOS 10.14 Mojave/iOS 12๋ถ€ํ„ฐ ์• ํ”Œ์€ OpenGL๊ณผ OpenCL์˜ ์ง€์›์„ ์ค‘๋‹จํ•˜์˜€๋‹ค. 2014๋…„์— ๋ฐœํ‘œ๋œ ์ž์ฒด ๊ทธ๋ž˜ํ”ฝ API์ธ Metal์„ ๋ฐ€์–ด์ฃผ๊ธฐ ์œ„ํ•จ์œผ๋กœ ๋ณด์ธ๋‹ค.

๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ์˜ windows 10 20h2๋ฒ„์ „ ๋ถ€ํ„ฐ๋Š” ๊ณต์‹์ ์œผ๋กœ WSL2๋ฅผ ์ง€์›ํ•˜๋Š”๋ฐ, ์ด WSL2 ์ง€์›๊ณผ ํ•จ๊ป˜ directX12์˜ ์‹ ๋ฒ„์ „ ๋ฐœํ‘œ, ๊ทธ๋ฆฌ๊ณ  ์ƒˆ๋กœ์šด ML์šฉ ํˆด์ด ๊ณต๊ฐœ ๋˜์—ˆ๋‹ค. directML์ด๋ž€ ํˆด๋กœ์จ, ๋ฌด๋ ค AMD,Intel,NVIDIA 3ํšŒ์‚ฌ์˜ ๊ทธ๋ž˜ํ”ฝ์นด๋“œ๋ฅผ ๋ชจ๋‘ ์ง€์›ํ•˜๋Š” ML ํˆด์ด๋‹ค. tensorflow 1.15 ๋ฒ„์ „ ํ˜ธํ™˜์ด ๊ฐ€๋Šฅํ•œ ๋ฐ๋ชจ ๋ฒ„์ „์œผ๋กœ์จ, ์œˆ๋„์šฐ์™€ WSL2 ์–‘์ชฝ ๋ชจ๋‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํˆด์ด๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์œˆ๋„์šฐ์ƒ์—์„œ๋Š” AMD์™€ Intel์˜ GPU๋Š” ML์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋˜ํ„ฐ๋ผ ํ•ด๋‹น GPU๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ž‘์—…์ž๋“ค์—๊ฒŒ๋Š” ํฌ์†Œ์‹.[1] ๋˜ํ•œ DirectML ์ž์ฒด๋Š” 2019๋…„ ๋ฐœํ‘œ์ธ๋ฐ, ์ด๋ฅผ ์ด์šฉํ•ด AMD ์ง„์˜์—์„œ๋Š” DLSS์— ๋Œ€์‘ํ•˜๋Š” ํˆด์„ ๊ฐœ๋ฐœํ•œ๋‹จ ์†Œ์‹์ด ์žˆ๋‹ค.

3. ํŠน์ง•[ํŽธ์ง‘]

OpenCL์„ ์ง€์›ํ•˜๋Š” ์žฅ๋น„๋Š” CPU๋“  GPU๋“  ํ˜น์€ ๊ทธ ์ด์™ธ์˜ ์—ฐ์‚ฐ ์žฅ๋น„๋“  ๋ชจ๋‘ ๊ฐ€์ ธ๋‹ค ๋™์‹œ์— ์“ธ ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋งŒ ํ›„๋ฐœ์ฃผ์ž๋ผ์„œ ๊ทธ๋Ÿฐ์ง€ ๋งŽ์ด ์•Œ๋ ค์ ธ ์žˆ์ง€ ์•Š๋‹ค. OpenCL์€ ๊ณต๊ฐœ ๊ทœ๊ฒฉ(API)์ผ ๋ฟ์ด์ง€ ์†Œ์Šค๊ฐ€ ๊ณต๊ฐœ๋œ ๊ฒŒ ์•„๋‹ˆ๋ฉฐ, ๊ตฌํ˜„์€ ์ „์ ์œผ๋กœ ๊ฐœ๋ฐœ์‚ฌ์— ๋‹ฌ๋ ค ์žˆ๋‹ค. CUDA๋Š” NVIDIA ํ•˜๋“œ์›จ์–ด์—์„œ๋งŒ ๋™์ž‘ํ•œ๋‹ค๋Š” ๋‹จ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ์žฅ๋ž˜๊ฐ€ ๊ธฐ๋Œ€๋œ๋‹ค๊ณ  ๋ณด๋Š” ์‚ฌ๋žŒ๋„ ์žˆ๊ณ , AMD ์ธก๊ณผ ์ธํ…” ์ธก์—์„  OpenCL์„ ๋ฐ€๊ณ  ์žˆ๋‹ค. ํ˜„์žฌ ํด๋กœ์ฆˆ๋“œ ์†Œ์Šค ๋“œ๋ผ์ด๋ฒ„ ์ค‘์—์„œ๋Š” AMD APP SDK 3.0์ด OpenCL 2.0์„ ์ง€์›ํ•œ๋‹ค. NVIDIA๋Š” ์ž์‚ฌ์—์„œ ๋จผ์ € ๊ฐœ๋ฐœ๋œ CUDA๋ฅผ ๋ฐ€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•„์ง OpenCL 1.2๊นŒ์ง€๋งŒ ์ง€์›ํ•œ๋‹ค. 2.0๋„ 2016๋…„ ์ดํ›„ ๋ถˆ์™„์ „ํ•˜๊ฒŒ๋‚˜๋งˆ ์ง€์›ํ•˜๊ธฐ๋Š” ํ•œ๋‹ค. ๊ทธ์— ๋น„ํ•˜๋ฉด ์˜คํ”ˆ์†Œ์Šค ์ง„์˜์˜ mesa๋Š” OpenCL 2.0์„ ์ง€์›ํ•œ๋‹ค.

OS X์˜ ๊ฒฝ์šฐ, 10.6 Snow Leopard๋ถ€ํ„ฐ ๊ธฐ๋ณธ์ ์œผ๋กœ OpenCL์„ ์ง€์›ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋”ฐ๋ผ์„œ ๋ณ„๋„์˜ SDK/๋“œ๋ผ์ด๋ฒ„ ์„ค์น˜ ๋“ฑ์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค. ๋‹ค๋งŒ 1.1์ด ๋‚˜์™”์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋ฒ„์ „์ด ๊ณ„์† 1.0์— ๋จธ๋ฌผ๋Ÿฌ ์žˆ์œผ๋ฏ€๋กœ ๊ตณ์ด 1.1์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋ณ„๋„๋กœ ๋“œ๋ผ์ด๋ฒ„ ๋ฐ SDK๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•œ๋‹ค. ๋˜ํ•œ ์ผ๋ถ€ ํ—ค๋” ํŒŒ์ผ์„ includeํ•  ๋•Œ ๋‹ค์†Œ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค. ๋งŒ๋“ค์–ด ๋†“๊ณ ๋„ ๊ณต๊ฐœ๋ฅผ ์•ˆ ํ•˜๋Š” ๊ฒƒ์„ ๋ณด๋ฉด ์• ํ”Œ์€ ์ธค๋ฐ๋ ˆ์ธ๊ฐ€๋ณด๋‹ค.

GPU๋งŒ ์ œ์–ดํ•˜๋Š” CUDA์— ๋น„ํ•ด ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์žฅ๋น„๋ฅผ ๋™์‹œ์— ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ์•„๋ฌด๋ž˜๋„ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ๋งŽ์ด ๊ธธ์–ด์ง€๊ณ  ์ดˆ๊ธฐํ™” ๊ณผ์ •๋„ ํ•˜๋‚˜ํ•˜๋‚˜ ๋‹ค ํ•ด ์ค˜์•ผ ํ•˜๋Š” ๊ฒฐ์ ์ด ์žˆ๋‹ค. ์ฝ”๋“œ ๊ธธ์ด๊ฐ€ CUDA ์ฝ”๋“œ์— ๋น„ํ•ด ์••๋„์ ์œผ๋กœ ๊ธธ๊ณ , ๋ช…๋ น์–ด๊ฐ€ ๋งŽ์•„์„œ ์•„๋ฌด๋ž˜๋„ ์ฒ˜์Œ ๋ฐฐ์šฐ๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ๋ฌธํ„ฑ์ด ๋†’๋‹ค. ๋Œ€์‹  ์—ฌ๋Ÿฌ ์žฅ๋น„๋ฅผ ๋™์‹œ์— ํ†ต์ œํ•  ์ˆ˜ ์žˆ๊ณ , ๊ทธ ๋ฐฉ๋ฒ• ๋˜ํ•œ CUDA๋ณด๋‹ค ์„ธ๋ จ๋œ ๋ฉด์ด ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  CUDA์— ๋น„ํ•ด OpenGL๊ณผ ๊ฒฐํ•ฉ์‹œํ‚ค๊ธฐ ์ข‹๋‹ค. ๋‹ค๋งŒ, ๊ฒŒ์ž„์ฒ˜๋Ÿผ OpenGL์„ ์ ๊ทน ํ™œ์šฉํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ๋Š” ์žฅ์น˜์˜ ์ดˆ๊ธฐํ™” ๋ฌธ์ œ๋กœ ๋Œ€๋ถ€๋ถ„์˜ ๋“œ๋ผ์ด๋ฒ„์—์„œ ๋”œ๋ ˆ์ด๊ฐ€ ์ƒ๊ธฐ๋ฏ€๋กœ, ๊ฐ„๋‹จํ•œ ํ–‰๋ ฌ ์—ฐ์‚ฐ์„ CPU์˜ SSE๋‚˜ neon์„ ์ด์šฉํ•˜๊ณ , ๊ฝค๋‚˜ ๋ฌด๊ฑฐ์šด ๊ณ„์‚ฐ์ด๋ผ๋ฉด GLSL Compute Shader๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ๋‚ซ๋‹ค.

PyOpenCL์ด๋ผ๋Š” ํŒŒ์ด์ฌ wrapper๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŽธ๋ฆฌํ•˜๊ณ  ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด ์ฐพ์•„์„œ ๋ฐฐ์›Œ ๋ณด์ž.

Java ๋˜ํ•œ OpenCL์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก wrapper๊ฐ€ ์กด์žฌํ•œ๋‹ค. ๊ด€์‹ฌ์žˆ๋Š” ์‚ฌ๋žŒ์€ jocl ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์—์„œ ๊ฐ„๋‹จํ•˜๋ฉด์„œ ์ข‹์€ ์ƒ˜ํ”Œ๋“ค์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. (๋‹น์—ฐํžˆ ๋ฉ”์ด๋ธ์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€๊ฐ€ ๋œ๋‹ค)

ํ˜„์žฌ๋Š” ์Šค๋งˆํŠธํฐ์—์„œ๋„ OpenCL์„ ์ง€์›ํ•˜๊ณ  ์žˆ๊ธด ํ•˜๋‹ค. ๋‹ค๋งŒ OpenGL๊ณผ์˜ OpenGL ES์˜ ๊ด€๊ณ„์ฒ˜๋Ÿผ ํ’€ ๋ฐ์Šคํฌํ†ฑ OpenCL์€ ์•„๋‹ˆ๊ณ , OpenCL ES๋ฅผ ์ง€์›ํ•œ๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ์˜ ๊ฒฝ์šฐ์—๋Š” SDK๋ฅผ ์ง€์›ํ•˜๋ฉฐ, ์ตœ๊ทผ ์•ˆ๋“œ๋กœ์ด๋“œ ์Šค๋งˆํŠธํฐ์˜ ๊ฒฝ์šฐ๋Š” ๋Œ€๋ถ€๋ถ„ Open CL 2.0 Full profile์„ ์ง€์›ํ•œ๋‹ค. iOS์˜ ๊ฒฝ์šฐ 4.3 ๋ฒ„์ „์— ํžŒํŠธ๋ฅผ ๋„ฃ์–ด ๋†จ์œผ๋ฉฐ, 5.0 ๋ฒ„์ „๋ถ€ํ„ฐ๋Š” ํ”„๋ผ์ด๋น— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์•ˆ์— ๋ฐ•์•„๋„ฃ๊ณ  ์žˆ์—ˆ๋‹ค๊ฐ€ iOS 12๋ถ€ํ„ฐ ์ง€์›์„ ์ค‘๋‹จํ–ˆ๋‹ค.

4. ์—ญ์‚ฌ[ํŽธ์ง‘]

2010๋…„ 6์›” 14์ผ OpenCL 1.1 ๋ฒ„์ „์ด ๋ฐœํ‘œ๋˜์–ด OpenGL๊ณผ์˜ ์ƒํ˜ธ ์šด์šฉ์„ฑ์ด ๊ฐœ์„ ๋˜์—ˆ๋‹ค.

2011๋…„ 11์›” 15์ผ OpenCL 1.2 ๋ฒ„์ „์ด ๋ฐœํ‘œ๋˜์—ˆ๋‹ค. OpenGL๋ฟ๋งŒ ์•„๋‹ˆ๋ผ DirectX์˜ ์ผ๋ถ€ ๊ธฐ๋Šฅ๊ณผ ๊ณต์œ ๊ฐ€ ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค.

2013๋…„ 11์›” 18์ผ OpenCL 2.0 ์ตœ์ข… ์ŠคํŽ™์„ ๋ฐœํ‘œํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  NVIDIA, AMD ๊ฐ๊ฐ SDK๋ฅผ ์ œ๊ณตํ•œ๋‹ค. (NVIDIA ๋Š” CUDA ํˆดํ‚ท์— ํฌํ•จํ•˜์—ฌ ์ œ๊ณต, AMD ๋Š” ์ž์ฒด IDE๋ฅผ ์ œ์ž‘ํ•จ) 2.0์— ์‹ ๊ธฐ์ˆ ์ธ HSA๊ฐ€ ์ถ”๊ฐ€๋์œผ๋ฉฐ, AMD APU ์นฉ์…‹์€ 2014๋…„ ์ดˆ์— ์ถœ์‹œํ•œ ์นด๋ฒ ๋ฆฌ๋ถ€ํ„ฐ, ์ธํ…”์€ ๋ธŒ๋กœ๋“œ์›ฐ๋ถ€ํ„ฐ ์ง€์›๋œ๋‹ค.

2015๋…„ 3์›” GDC์—์„œ Vulkan API์™€ ํ•จ๊ป˜ OpenCL 2.1์„ ๋ฐœํ‘œํ•˜์—ฌ SPIR-V์™€์˜ ์—ฐ๋™์„ ์†Œ๊ฐœํ–ˆ๋Š”๋ฐ ์ดํ›„์— ์ถœ์‹œ๋œ ์ธํ…” ์Šค์นด์ด๋ ˆ์ดํฌ, ์นด๋น„๋ ˆ์ดํฌ๊ฐ€ ํ˜„์žฌ OpenCL 2.1์ด ์•„๋‹Œ 2.0 ๋ฒ„์ „์— ๋จธ๋ฌผ๊ณ  ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  11์›” 18์ผ์— OpenCL 2.1์˜ ์ตœ์ข… ์ŠคํŽ™์ด ๋ฐœํ‘œ๋˜์—ˆ๋‹ค.

2017๋…„ 5์›” 16์ผ SPIR-V 1.1๊ณผ ์—ฐ๋™ ๊ฐ€๋Šฅํ•œ OpenCL 2.2๊ฐ€ ์ตœ์ข… ๋ฐœํ‘œ๋˜์—ˆ๋‹ค.

2020๋…„ 4์›” 27์ผ OpenCL 3.0 ํ‘œ์ค€์ด ๋ฐœํ‘œ๋˜์—ˆ๋‹ค. OpenCL 2.x ์—์„œ ์ถ”๊ฐ€๋œ ๋ชจ๋“  ๊ธฐ๋Šฅ๋“ค์ด Optional ๋กœ ๋ณ€๊ฒฝ๋˜๊ณ  ์‚ฌ์‹ค์ƒ ๋‹ค์‹œ OpenCL 1.2 ๋กœ ๋Œ์•„์™”๋Š”๋ฐ ๊ฐ€๋œฉ์ด๋‚˜ ๋นˆ์•ฝํ•œ ํ™˜๊ฒฝ์—์„œ ํ”Œ๋žซํผ์˜ ํŒŒํŽธํ™”๋งŒ ์œ ๋ฐœํ•œ๋‹ค๊ณ  ๋น„ํŒํ•˜๋Š” ๋ชฉ์†Œ๋ฆฌ๊ฐ€ ๋†’๋‹ค.