NVIDIA๋ Rust ์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ GPU์์ ์คํ๋๋ ์ปค๋์ ๊ฐ๋ฐํ ์ ์๋๋ก ํ๋ CUDA Rust ํดํท ๊ฐ๋ฐ์ ๋ฐํํ์ต๋๋ค. ์ด ํดํท์ ์ปดํ์ผ ์ ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ์ ๋ณด์ฅํ๊ณ ๊ฒฝ์ ์กฐ๊ฑด์ ๋ฐฉ์งํฉ๋๋ค. ๋ด๋ ์๋ CUDA C++ ๋ฐ CUDA Python ํดํท์ฒ๋ผ ์์ฉ ํ๋ก์ ํธ์ ์ ํฉํ ์์ค์ผ๋ก CUDA Rust๊ฐ ๊ฐ๋ฐ๋ ์์ ์ ๋๋ค.
CUDA Rust ํด์ฒด์ธ์ ๋ณ๋ ฌ ์ปค๋ ๊ฐ๋ฐ์ ์ํ ๋ ๊ฐ์ง ๋ชจ๋ธ, SIMT(Single Instruction, Multiple Threads)์ Tile์ ์ง์ํฉ๋๋ค. SIMT ๋ชจ๋ธ์ ๋จ์ผ ์ค๋ ๋๋ฅผ ์ ์์ค์์ ์ ์ํ๊ณ ์์ฒ ๊ฐ์ ์ค๋ ๋๋ฅผ ์คํ ๋ฐ ๊ด๋ฆฌํ ์ ์๋๋ก ํฉ๋๋ค. Tile ๋ชจ๋ธ์ ๋ ๋์ ์์ค์ ์ถ์ํ๋ฅผ ์ ๊ณตํ๋ฉฐ, ๊ฐ๋ณ ์ค๋ ๋๋ฅผ ๋ช ์์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๋์ ๋ฐ์ดํฐ ๋ธ๋ก(ํ์ผ)์ ์ฒ๋ฆฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด Tile IR ์ปดํ์ผ๋ฌ๊ฐ ๋ชจ๋ ์ค๋ ๋ ์กฐ์, ์ ๊ทผ ๋๊ธฐํ, ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐ ํ ์ ์ฝ์ด ์ ์ฒด์ ๊ฑธ์น ๋ฐ์ดํฐ ๋ถ์ฐ์ ์ฒ๋ฆฌํฉ๋๋ค.
SIMT ๋ชจ๋ธ์ ์ฌ์ฉํ๋ Rust ์ธ์ด ๊ฐ๋ฐ์ ์ํด cuda-oxide ์ปดํ์ผ๋ฌ๊ฐ ๊ฐ๋ฐ ์ค์ ๋๋ค. ์ด ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ค ํ์ ์์คํ ๊ณผ Rust ์์ ๊ถ ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ Rust ์ธ์ด ์ฝ๋๋ฅผ ์ปดํ์ผํ๊ณ , ์ด๋ฅผ ์คํ ๊ฐ๋ฅํ ๋ช ๋ น์ด๋ก ์ง์ ๋ณํํ ์ ์์ต๋๋ค. ๊ฐ์ ๊ธฐ๊ธฐ CUDA PTX(๋ณ๋ ฌ ์ค๋ ๋ ์คํ). GPU ์ปค๋์ ์ผ๋ฐ Rust๋ก ์์ฑ๋์ง๋ง, no_std ํ๊ฒฝ์์ ์คํ๋๋ฉฐ ํ์ค Rust ๋ผ์ด๋ธ๋ฌ๋ฆฌ(libstd)์ ์ ๊ทผํ ์ ์๊ณ libcore ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ์์ ํน์ Rust ์ถ์ํ ๊ธฐ๋ฅ๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
Rust๋ก ์์ฑ๋ CUDA ์ปค๋์ ํ์ ๋ณดํธ(safe), unsafe ๋ธ๋ก ์ฌ์ฉ, ๊ทธ๋ฆฌ๊ณ ์ ์์ค ํ๋์จ์ด ๋ช ๋ น์ด ์ ๊ทผ์ ํ์ฉํฉ๋๋ค. ์์ ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด DisjointSlice ํ์ ์ด ์ ์๋์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ๊ฐ ์ค๋ ๋๋ ์์ ์ ๋ฐ์ดํฐ์๋ง ๋ฐฐํ์ ์ผ๋ก ์ ๊ทผํ ์ ์์ต๋๋ค. cuda-oxide ์ฝ๋๋ Apache 2.0 ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค.
Tail ๋ชจ๋ธ์ ๊ตฌํํ๊ธฐ ์ํด cutile-rs ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ํฉ๋๋ค. ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Rust ๊ด์ฉ ์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ CUDA ์ปค๋๋ก ์ง์ ์ปดํ์ผ๋๋ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋๋ก ํฉ๋๋ค. cutile-rs๋ Rust์ ์๊ฒฉํ ์์ ๊ถ ๋ฐ ์ฐจ์ฉ ๊ท์น์ GPU์์ ์คํ๋๋ ์ฝ๋์ ์ ์ฉํฉ๋๋ค. ์ปค๋์ ๋ฐ์ดํฐ ๋ธ๋ก์์ ์๋ํ๋ ๋จ์ผ ์ค๋ ๋ ํ๋ก๊ทธ๋จ์ผ๋ก ๊ตฌํ๋๋ฉฐ, ์ปดํ์ผ๋ฌ๋ ๊ณ์ฐ์ ์๋์ผ๋ก ์ค๋ ๋๋ก ๋ถํ ํ๊ณ ์ค๋ ๋ ๊ฐ ๋๊ธฐํ๋ฅผ ๋ณด์ฅํฉ๋๋ค. ์ค๋ ๋๋ ๋ถ๋ณ ํ
์์ ๋ํ ๊ณต์ ์ ๊ทผ ๊ถํ์ ๊ฐ์ง๋ฉฐ, ๊ฐ๋ณ ํ
์๋ ์์ ํ ์ ๊ทผ์ ์ํด ์๋ก ๋ถ๋ฆฌ๋ ๋ธ๋ก์ผ๋ก ๋ถํ ๋ฉ๋๋ค. cutile-rs ์ฝ๋๋ Apache 2.0 ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค.
์ถ์ฒ : opennet.ru
