LLVM์ ์ฐฝ๋ฆฝ์์ด์ ์์ ์ค๊ณ์์ด์ Swift ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ฐฝ์์์ธ Chris Lattner์ Tensorflow ๋ฐ JAX์ ๊ฐ์ Google AI ํ๋ก์ ํธ์ ์ ์ฑ ์์์๋ Tim Davis๋ R&D์ ๋ํ ์ฌ์ฉ ํธ์์ฑ๊ณผ ์ ์ํ ํ๋กํ ํ์ดํ์ ๊ฒฐํฉํ ์๋ก์ด Mojo ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์๊ฐํ์ต๋๋ค. ๊ณ ์ฑ๋ฅ ์ต์ข ์ ํ์ ๋ํ ์ ํฉ์ฑ. ์ฒซ ๋ฒ์งธ๋ Python ์ธ์ด์ ์น์ํ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ๋ฌ์ฑ๋๊ณ , ๋ ๋ฒ์งธ๋ ๊ธฐ๊ณ์ด ์ฝ๋๋ก ์ปดํ์ผํ๋ ๊ธฐ๋ฅ, ์์ ํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฉ์ปค๋์ฆ, ํ๋์จ์ด ๊ณ์ฐ ๊ฐ์์ ์ํ ๋๊ตฌ ์ฌ์ฉ์ ํตํด ๋ฌ์ฑ๋ฉ๋๋ค.
์ด ํ๋ก์ ํธ๋ ๋จธ์ ๋ฌ๋ ๊ฐ๋ฐ์ ์ค์ ์ ๋๊ณ ์์ง๋ง, ์์คํ ํ๋ก๊ทธ๋๋ฐ ๋๊ตฌ๋ก Python ์ธ์ด์ ๊ธฐ๋ฅ์ ํ์ฅํ๋ ๋ฒ์ฉ ์ธ์ด๋ก๋ ์ ๊ณต๋๋ฉฐ ๊ด๋ฒ์ํ ์์ ์ ์ ํฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ด ์ธ์ด๋ ๊ณ ์ฑ๋ฅ ์ปดํจํ , ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐ ๋ณํ๊ณผ ๊ฐ์ ๋ถ์ผ์ ์ ์ฉํ ์ ์์ต๋๋ค. Mojo์ ํฅ๋ฏธ๋ก์ด ๊ธฐ๋ฅ ์ค ํ๋๋ ํ ์คํธ ํ์ฅ์ ".mojo" ์ธ์๋ ์ฝ๋ ํ์ผ์ ํ์ฅ์๋ก ์ด๋ชจํฐ์ฝ ๊ธฐํธ "๐ฅ"(์: "helloworld.๐ฅ)๋ฅผ ์ง์ ํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
ํ์ฌ ์ด ์ธ์ด๋ ์ง์ค์ ์ธ ๊ฐ๋ฐ ๋จ๊ณ์ ์์ผ๋ฉฐ ํ ์คํธ๋ฅผ ์ํด ์จ๋ผ์ธ ์ธํฐํ์ด์ค๋ง ์ ๊ณต๋ฉ๋๋ค. ๋ํํ ์น ํ๊ฒฝ์ ์ด์์ ๋ํ ํผ๋๋ฐฑ์ ๋ฐ์ ํ, ๋ก์ปฌ ์์คํ ์์ ์คํํ๊ธฐ ์ํ ๋ณ๋์ ์ด์ ๋ธ๋ฆฌ๋ฅผ ๋์ค์ ๊ณต๊ฐํ ์์ ์ ๋๋ค. ์ปดํ์ผ๋ฌ, JIT ๋ฐ ๊ธฐํ ๊ด๋ จ ์์ ์ ๋ํ ์์ค ์ฝ๋๋ ๋ด๋ถ ์ํคํ ์ฒ ์ค๊ณ๊ฐ ์๋ฃ๋ ํ ์คํ ์์ค๋ก ๊ณต๊ฐ๋ ์์ ์ ๋๋ค(๋น๊ณต๊ฐ๋ก ์๋ํ๋ ํ๋กํ ํ์ ์ ๊ฐ๋ฐํ๋ ๋ชจ๋ธ์ LLVM, Clang ๋ฐ Swift ๊ฐ๋ฐ์ ์ด๊ธฐ ๋จ๊ณ์ ์ ์ฌํฉ๋๋ค). Mojo์ ๊ตฌ๋ฌธ์ Python ๊ธฐ๋ฐ์ด๊ณ ์ ํ ์์คํ ์ C/C++์ ๊ฐ๊น๊ธฐ ๋๋ฌธ์ ํฅํ ๊ณํ์๋ ๊ธฐ์กด C/C++ ๋ฐ Python ํ๋ก์ ํธ๋ฅผ Mojo๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ์์ ์ ๊ฐ์ํํ๋ ๋๊ตฌ๋ฅผ ๊ฐ๋ฐํ๊ณ Python๊ณผ Mojo ์ฝ๋๋ฅผ ๊ฒฐํฉํ ํ์ด๋ธ๋ฆฌ๋ ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ๋ ๊ฒ์ด ํฌํจ๋ฉ๋๋ค.
์ด ํ๋ก์ ํธ๋ ์์คํ ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ด๊ธฐ์ข ์์คํ ์ ํ๋์จ์ด ๋ฆฌ์์ค๋ฅผ ํ์ฉํ์ฌ ๊ณ์ฐ์ ์ํํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ์๋ฅผ ๋ค์ด, GPU, ์ ๋ฌธํ๋ ๋จธ์ ๋ฌ๋ ๊ฐ์๊ธฐ, SIMD(๋จ์ผ ๋ช ๋ น ๋ฒกํฐ ๋จธ์๋) ํ๋ก์ธ์๋ฅผ ์ฌ์ฉํ์ฌ Mojo ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๊ณ ๊ณ์ฐ์ ๋ณ๋ ฌํํ ์ ์์ต๋๋ค. ๊ธฐ์กด CPython์ ์ต์ ํ ์์ ์ ์ฐธ์ฌํ๋ ๋์ Python ์ธ์ด์ ๋ณ๋ ํ์ ์งํฉ์ ๊ฐ๋ฐํ๊ธฐ๋ก ํ ์ด์ ๋ก๋ ์ปดํ์ผ์ ์ค์ ์ ๋๊ณ , ์์คํ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฅ์ ํตํฉํ๊ณ , GPU ๋ฐ ๋ค์ํ ํ๋์จ์ด ๊ฐ์๊ธฐ์์ ์ฝ๋๋ฅผ ์คํํ ์ ์๋ ๊ทผ๋ณธ์ ์ผ๋ก ๋ค๋ฅธ ๋ด๋ถ ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ๊ฒ์ด ์์ต๋๋ค. ๋์์, Mojo ๊ฐ๋ฐ์๋ ๊ฐ๋ฅํ ํ CPython๊ณผ์ ํธํ์ฑ์ ์ ์งํ๋ ค๊ณ ํฉ๋๋ค.
Mojo๋ JIT ํด์ ๋ชจ๋์ ์คํ ํ์ผ๋ก ์ปดํ์ผํ๋ ๋ฐ ๋ชจ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค(AOT, ์ฌ์ ์ปดํ์ผ). ์ปดํ์ผ๋ฌ์๋ ์๋ ์ต์ ํ, ์บ์ฑ, ๋ถ์ฐ ์ปดํ์ผ์ ์ํ ์ต์ ๊ธฐ์ ์ด ๋ด์ฅ๋์ด ์์ต๋๋ค. Mojo ์์ค ์ฝ๋๋ LLVM ํ๋ก์ ํธ์์ ๊ฐ๋ฐํ ์ ์์ค ์ค๊ฐ ์ฝ๋ MLIR(Multi-Level Intermediate Representation)๋ก ๋ณํ๋์ด ๋ฐ์ดํฐ ํ๋ฆ ๊ทธ๋ํ ์ฒ๋ฆฌ๋ฅผ ์ต์ ํํ๊ธฐ ์ํ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๋ฉด MLIR์ ์ง์ํ๋ ๋ค์ํ ๋ฐฑ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋จธ์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์ถ๊ฐ์ ์ธ ํ๋์จ์ด ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ ๊ณ์ฐ ์๋๋ฅผ ๋์ด๋ฉด, ์ง์ฝ์ ์ธ ๊ณ์ฐ์ ๊ฒฝ์ฐ C/C++ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฅ๊ฐํ๋ ์ฑ๋ฅ์ ๋ฌ์ฑํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, Mandelbrot ์งํฉ์ ์์ฑํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ์คํธํ ๋ AWS ํด๋ผ์ฐ๋์์ Mojo ์ธ์ด๋ก ์ปดํ์ผ๋ ์ ํ๋ฆฌ์ผ์ด์ (r7iz.metal-16xl)์ ์คํํ ๋ C++ ๊ตฌํ๋ณด๋ค 6๋ฐฐ ๋ ๋น ๋ฅธ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค(0.03์ด ๋ 0.20์ด). ํ์ค CPython 35๋ฅผ ์ฌ์ฉํ ๋๋ Python ์ ํ๋ฆฌ์ผ์ด์ ๋ณด๋ค 3.10.9๋ฐฐ ๋ ๋น ๋ฅด๊ณ (0.03์ด ๋ 1027์ด), PYPY๋ฅผ ์ฌ์ฉํ ๋๋ 1500๋ฐฐ ๋ ๋น ๋ฆ ๋๋ค(0.03์ด ๋ 46.1์ด).
๋จธ์ ๋ฌ๋ ์ฑ๋ฅ์ ํ๊ฐํ ๋, Mojo๋ก ์์ฑ๋ Modular Inference Engine AI ์คํ์ TensorFlow ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ธฐ๋ฐ ์๋ฃจ์ ๊ณผ ๋น๊ตํ์ ๋ Intel ํ๋ก์ธ์๊ฐ ํ์ฌ๋ ์์คํ ์์ ์ธ์ด ๋ชจ๋ธ์ ์ฒ๋ฆฌํ ๋ 3๋ฐฐ, ์ถ์ฒ ๋ชจ๋ธ์ ์คํํ ๋ 6.4๋ฐฐ, ์๊ฐ ์ ๋ณด ์ฒ๋ฆฌ ๋ชจ๋ธ์ ์คํํ ๋ 2.1๋ฐฐ ๋ ๋นจ๋์ต๋๋ค. AMD ํ๋ก์ธ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, Mojo๋ฅผ ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ ํฅ์์ด ๊ฐ๊ฐ 3.2๋ฐฐ, 5๋ฐฐ, 2.2๋ฐฐ์๊ณ , ARM ํ๋ก์ธ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ฐ๊ฐ 5.3๋ฐฐ, 7.5๋ฐฐ, 1.7๋ฐฐ์์ต๋๋ค. PyTorch ๊ธฐ๋ฐ ์๋ฃจ์ ์ Intel CPU์์๋ Mojo๋ณด๋ค 1.4๋ฐฐ, 1.1๋ฐฐ, 1.5๋ฐฐ ๋ค์ฒ์ก๊ณ , AMD CPU์์๋ 2.1๋ฐฐ, 1.2๋ฐฐ, 1.5๋ฐฐ ๋ค์ฒ์ก์ผ๋ฉฐ, ARM CPU์์๋ 4๋ฐฐ, 4.3๋ฐฐ, 1.3๋ฐฐ ๋ค์ฒ์ก์ต๋๋ค.

์ด ์ธ์ด๋ Rust์์ ์ฐพ์ ์ ์๋ ์ฐธ์กฐ ์๋ช ์ถ์ ๋ฐ ๋น๋ฆผ ๊ฒ์ฌ๊ธฐ์ ๊ฐ์ ์ ์ ํ์ดํ ๋ฐ ์ ์์ค ๋ฉ๋ชจ๋ฆฌ ์์ ๊ธฐ๋ฅ์ ์ง์ํฉ๋๋ค. ํฌ์ธํฐ ์์ ๊ธฐ๋ฅ ์ธ์๋ ์ด ์ธ์ด๋ Pointer ์ ํ์ ์ฌ์ฉํ์ฌ ์์ ํ์ง ์์ ๋ชจ๋์์ ์ง์ ๋ฉ๋ชจ๋ฆฌ์ ์ก์ธ์คํ๊ฑฐ๋, ๊ฐ๋ณ SIMD ๋ช ๋ น์ด๋ฅผ ํธ์ถํ๊ฑฐ๋, TensorCores ๋ฐ AMX์ ๊ฐ์ ํ๋์จ์ด ํ์ฅ์ ์ก์ธ์คํ๋ ๋ฑ์ ์ ์์ค ๊ธฐ๋ฅ๋ ์ ๊ณตํฉ๋๋ค.

๋ชจ๋ ๋ณ์์ ๋ํด ๋ช
์์ ์ผ๋ก ์ ํ์ด ์ ์๋ ํจ์์ ๊ธฐ์กด Python ์ฝ๋์ ์ต์ ํ๋ Python ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ๊ธฐ ์ฝ๊ฒ ํ๊ธฐ ์ํด "def" ๋์ ๋ณ๋์ ํค์๋ "fn"์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ์๋ฉ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ํด๋์ค์ ๊ฒฝ์ฐ ์ปดํ์ผ ์์ ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ํจํนํด์ผ ํ๋ ๊ฒฝ์ฐ(C ์ธ์ด์ฒ๋ผ) "class" ๋์ "struct" ์ ํ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. C/C++ ์ธ์ด์์ ๋ชจ๋์ ๊ฐ๋จํ ๊ฐ์ ธ์ค๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ cos ํจ์๋ฅผ ๊ฐ์ ธ์ค๋ ค๋ฉด "from "math.h" import cos"๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
์ถ์ฒ : opennet.ru
