LLVM ํ๋ก์ ํธ๋ ์ด๊ธฐ์ข ์์คํ ์ ํ๋ก๊ทธ๋๋ฐ์ ๋จ์ํํ๊ณ CPU, GPU, FPGA ๋ฐ ๋๋ฉ์ธ๋ณ ํ๋์จ์ด ๊ฐ์๊ธฐ๋ฅผ ์ํ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํ ๋๊ตฌ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ HPVM 2.0(์ด๊ธฐ์ข ๋ณ๋ ฌ ๊ฐ์ ๋จธ์ ) ์ปดํ์ผ๋ฌ์ ๋ฆด๋ฆฌ์ค๋ฅผ ๋์ ํ์ต๋๋ค. ํ๋ก์ ํธ ์ฝ๋๋ Apache 2.0 ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค.
์ด๊ธฐ์ข ๋ณ๋ ฌ ์์คํ ์ ๋ํ ํ๋ก๊ทธ๋๋ฐ์ ๋ณ๋ ฌ์ฑ์ ๋ฌ์ฑํ๊ธฐ ์ํด ์๋ก ๋ค๋ฅธ ๋ชจ๋ธ(CPU ์ฝ์ด, ๋ฒกํฐ ๋ช ๋ น์ด, GPU ๋ฑ)์ ์ฌ์ฉํ๋ ๊ตฌ์ฑ ์์์ ํ ์์คํ , ์๋ก ๋ค๋ฅธ ๋ช ๋ น์ด ์ธํธ ๋ฐ ์๋ก ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๊ณ์ธต์ผ๋ก ์ธํด ๋ณต์กํฉ๋๋ค. ๊ฐ ์์คํ ์ ์ด๋ฌํ ๊ตฌ์ฑ ์์์ ๊ณ ์ ํ ์กฐํฉ์ ์ฌ์ฉํฉ๋๋ค. HPVM ํ๋ก์ ํธ์ ์ฃผ์ ์์ด๋์ด๋ GPU, ๋ฒกํฐ ๋ช ๋ น, ๋ฉํฐ ์ฝ์ด ํ๋ก์ธ์, FPGA ๋ฐ ๋ค์ํ ํน์ ์ปดํจํ ์ ํฌํจํ์ฌ ๋ณ๋ ฌ ์ปดํจํ ์ ์ง์ํ๋ ๋ค์ํ ์ ํ์ ํ๋์จ์ด์ ์ฌ์ฉํ ์ ์๋ ๋ณ๋ ฌ ํ๋ก๊ทธ๋จ์ ํตํฉ ํํ์ ์ปดํ์ผํ๋ ๋ฐ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ๊ฐ์๊ธฐ ์นฉ.
๋ค๋ฅธ ์์คํ ๊ณผ ๋ฌ๋ฆฌ HPVM์ ์ด๊ธฐ์ข ์ปดํจํ ์ ๊ตฌ์ฑํ๊ธฐ ์ํ ์ธ ๊ฐ์ง ๊ฐ๋ฅ์ฑ, ์ฆ IR(์ค๊ฐ ํํ), V-ISA(๊ฐ์ ๋ช ๋ น์ด ์งํฉ ์ํคํ ์ฒ) ๋ฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๋ฐ ์ฅ๋น์ ๋ ๋ฆฝ์ ์ธ ๋ฐํ์ ์ค์ผ์ค๋ง์ ๊ฒฐํฉํ๋ ค๊ณ ํ์ต๋๋ค.
- ์ค๊ฐ ํํ HPVM์ ๊ณ์ธต์ ๋ฐ์ดํฐ ํ๋ฆ ๊ทธ๋ํ๋ฅผ ์ฌ์ฉํ์ฌ ์์ , ๋ฐ์ดํฐ ๋ฐ ๊ณ์ฐ ํ์ดํ๋ผ์ธ ์์ค์์ ๋ณ๋ ฌ์ฑ์ ์บก์ฒํจ์ผ๋ก์จ LLVM ๋ช ๋ น์ ์ค๊ฐ ํํ์ ํ์ฅํฉ๋๋ค. HPVM ์ค๊ฐ ํํ์๋ ๋ฒกํฐ ๋ช ๋ น๊ณผ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ ํฌํจ๋ฉ๋๋ค. ์ค๊ฐ ํํ์ ์ฌ์ฉํ๋ ์ฃผ์ ๋ชฉ์ ์ ์ด๊ธฐ์ข ์์คํ ์ ๋ํ ํจ์จ์ ์ธ ์ฝ๋ ์์ฑ ๋ฐ ์ต์ ํ์ ๋๋ค.
- V-ISA(Virtual Instruction Set Architecture)๋ ํ์ ์์ค ํ๋์จ์ด๋ฅผ ์ถ์ํํ๊ณ ๊ธฐ๋ณธ ๋์์ฑ ๋ชจ๋ธ์ธ ๋ฐ์ดํฐ ํ๋ฆ ๊ทธ๋ํ๋ง ์ฌ์ฉํ์ฌ ๋ค์ํ ํํ์ ๋ณ๋ ฌ์ฑ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์ํคํ ์ฒ๋ฅผ ํตํฉํฉ๋๋ค. V-ISA๋ ๋ณ๋ ฌ ์ปดํจํ ์ ์ํด ์๋ก ๋ค๋ฅธ ์ ํ์ ํ๋์จ์ด ๊ฐ ์ด์์ฑ์ ๊ตฌํํ๊ณ ์ด๊ธฐ์ข ์์คํ ์ ์๋ก ๋ค๋ฅธ ์์๋ฅผ ์ฌ์ฉํ ๋ ์ฑ๋ฅ์ ์์ง ์๋๋ก ํฉ๋๋ค. Virtual ISA๋ CPU, GPU, FPGA ๋ฐ ๋ค์ํ ๊ฐ์๊ธฐ์์ ์คํํ ์ ์๋ ์ผ๋ฐ ํ๋ก๊ทธ๋จ ์คํ ๊ฐ๋ฅ ์ฝ๋๋ฅผ ์ ๊ณตํ๋ ๋ฐ์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์ ์ฐํ ์ปดํจํ ํ๋ก์ธ์ค ์ค์ผ์ค๋ง ์ ์ฑ ์ ๋ฐํ์์ ์ ์ฉ๋๋ฉฐ ํ๋ก๊ทธ๋จ(๊ทธ๋ํ ๊ตฌ์กฐ)์ ๋ํ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํ๋๊ณ ์์คํ ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ๋์ ์ปดํจํ ์ฅ์น์์ ์คํํ๊ธฐ ์ํด ๊ฐ๋ณ ํ๋ก๊ทธ๋จ ๋ ธ๋๋ฅผ ์ปดํ์ผํ์ฌ ๊ตฌํ๋ฉ๋๋ค.
์ด ํ๋ก์ ํธ์์ ๊ฐ๋ฐํ ์ฝ๋ ์์ฑ๊ธฐ๋ NVIDIA GPU(cuDNN ๋ฐ OpenCL), Intel AVX ๋ฒกํฐ ๋ช ๋ น, FPGA ๋ฐ ๋ฉํฐ์ฝ์ด x86 CPU๋ฅผ ์ฌ์ฉํ์ฌ ์คํํ๊ธฐ ์ํด ๊ฐ์ ISA๋ฅผ ์ฌ์ฉํ์ฌ ์ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ ธ๋๋ฅผ ๋ณํํ ์ ์์ต๋๋ค. HPVM ๋ณํ๊ธฐ ๊ฒฐ๊ณผ์ ์ฑ๋ฅ์ GPU ๋ฐ ๋ฒกํฐ ์ปดํจํ ์ฅ์น์ฉ์ผ๋ก ์๋์ผ๋ก ์์ฑ๋ OpenCL ์ฝ๋์ ๋น์ทํฉ๋๋ค.
HPVM 2.0์ ์ฃผ์ ํ์ :
- HPVM์์ ์ปดํ์ผํ๊ธฐ ์ํ C/C++ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์ ๋ณ๋ ฌํ๋ฅผ ๋จ์ํํ๋ Hetero-C++ ์ธ์ด ํ๋ฐํธ์๋๊ฐ ์ ์๋์์ต๋๋ค. Hetero-C++๋ ๋ฐ์ดํฐ ์์ค ๋ณ๋ ฌ ์ฒ๋ฆฌ ๋ฐ HPVM ์ค๋ ๋ ๊ทธ๋ํ์ ๋งคํ๋๋ ๊ณ์ธต์ ์์ ์ ๋ํ ํ์ฅ์ ์ ์ํฉ๋๋ค.
- Intel FPGA์์ ์ฝ๋ ์คํ์ ์ง์ํ๊ธฐ ์ํด FPGA ๋ฐฑ์๋๊ฐ ์ถ๊ฐ๋์์ต๋๋ค. ์คํ์ ๊ตฌ์ฑํ๊ธฐ ์ํด OpenCL์ฉ Intel FPGA SDK๊ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- DSE(Design Space Exploration) ํ๋ ์์ํฌ๊ฐ ์ถ๊ฐ๋์์ต๋๋ค. ์ฌ๊ธฐ์๋ ์ง์ ๋ ํ๋์จ์ด ํ๋ซํผ์ ๋ง๊ฒ ์์ฉ ํ๋ก๊ทธ๋จ์ ์๋์ผ๋ก ์กฐ์ ํ๊ธฐ ์ํ ์ปดํ์ผ๋ฌ ์ต์ ํ ๋ฐ ๋ณ๋ชฉ ํ์ ๊ฐ์ง ๋ฉ์ปค๋์ฆ์ด ํฌํจ๋ฉ๋๋ค. ์ด ํ๋ ์์ํฌ์๋ Intel์ FPGA์ฉ ๊ธฐ์ฑ ์ฑ๋ฅ ๋ชจ๋ธ์ด ํฌํจ๋์ด ์์ผ๋ฉฐ HPVM์์ ์ง์ํ๋ ๋ชจ๋ ์ฅ์น์ ๋ํ ์ต์ ํ๋ฅผ ์ํด ์์ ์ ํ๋ก์ธ์๋ฅผ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. HPVM ๋ฐ์ดํฐ ํ๋ฆ ๊ทธ๋ํ ์์ค๊ณผ LLVM ์์ค ๋ชจ๋์์ ์ต์ ํ๋ฅผ ์ ์ฉํ ์ ์์ต๋๋ค.
- LLVM ๊ตฌ์ฑ ์์๊ฐ ๋ฒ์ 13.0์ผ๋ก ์ ๋ฐ์ดํธ๋์์ต๋๋ค.
- ์ฝ๋๋ฒ ์ด์ค, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ์ ํธ๋ฆฌํฐ๋ฅผ ๋ณด๋ค ์ฝ๊ฒ โโํ์ํ ์ ์๋๋ก ์ฝ๋๊ฐ ์ฌ๊ตฌ์ฑ๋์์ต๋๋ค.
- ํ ์คํธ๋ฅผ ์ํ ์ธํ๋ผ๊ฐ ๊ฐ์ ๋์์ผ๋ฉฐ ๋ค์ํ HPVM ๊ตฌ์ฑ ์์์ ๋ํ ์๋ก์ด ํ ์คํธ๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
์ถ์ฒ : opennet.ru