OpenGL, Vulkan ๋ฐ OpenCL ์ ํ๊ตฐ ์ฌ์ ๊ฐ๋ฐ์ ๋ด๋นํ๋ Khronos ๊ด์ฌ์ฌ๋
ํ ๋จ๊ณ์์ ์ฌ์์ ์์ ์ํ๋ก ์ง์ ๋์์ผ๋ฉฐ, ์ด๋ ๋ค์์ ํตํด ์ ์ก๋ ํผ๋๋ฐฑ์ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ ๊ฐ๋ฅ์ฑ์ ์๋ฏธํฉ๋๋ค.
๊ฐ์ฅ ์ฃผ๋ชฉํ ๋งํ
- 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 ์ปดํจํ ์ฝ์ด์ ํ์ ๊ทธ๋ฃน ์์ ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ์ง์ ๋ฉ๋ชจ๋ฆฌ ์ก์ธ์ค๊ฐ ๊ฐ๋ฅํ 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++ ์ ํ๋ฆฌ์ผ์ด์ ์ด์ ๋ธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. - Vulkan API๋ฅผ ํตํด OpenCL์ ๋ธ๋ก๋์บ์คํ
ํ๊ธฐ ์ํ ์ปดํ์ผ๋ฌ๊ฐ ์ ์๋์์ต๋๋ค.
clspv , OpenCL ์ปค๋์ Vulkan SPIR-V ํํ์ผ๋ก ๋ณํํ๊ณ ๋ ์ด์ดclvk OpenCL API๊ฐ Vulkan ์์์ ์๋ํ๋๋ก ํ์ฑํํฉ๋๋ค.
์ถ์ฒ : opennet.ru