LLVM Creator, ์ƒˆ๋กœ์šด Mojo ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๊ฐœ๋ฐœ

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๋ฐฐ ๋’ค์ฒ˜์กŒ์Šต๋‹ˆ๋‹ค.

LLVM Creator, ์ƒˆ๋กœ์šด Mojo ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๊ฐœ๋ฐœ

์ด ์–ธ์–ด๋Š” Rust์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ์ฐธ์กฐ ์ˆ˜๋ช… ์ถ”์  ๋ฐ ๋นŒ๋ฆผ ๊ฒ€์‚ฌ๊ธฐ์™€ ๊ฐ™์€ ์ •์  ํƒ€์ดํ•‘ ๋ฐ ์ €์ˆ˜์ค€ ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ํฌ์ธํ„ฐ ์•ˆ์ „ ๊ธฐ๋Šฅ ์™ธ์—๋„ ์ด ์–ธ์–ด๋Š” Pointer ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜์—ฌ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๋ชจ๋“œ์—์„œ ์ง์ ‘ ๋ฉ”๋ชจ๋ฆฌ์— ์•ก์„ธ์Šคํ•˜๊ฑฐ๋‚˜, ๊ฐœ๋ณ„ SIMD ๋ช…๋ น์–ด๋ฅผ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜, TensorCores ๋ฐ AMX์™€ ๊ฐ™์€ ํ•˜๋“œ์›จ์–ด ํ™•์žฅ์— ์•ก์„ธ์Šคํ•˜๋Š” ๋“ฑ์˜ ์ €์ˆ˜์ค€ ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

LLVM Creator, ์ƒˆ๋กœ์šด Mojo ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๊ฐœ๋ฐœ

๋ชจ๋“  ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ๋ช…์‹œ์ ์œผ๋กœ ์œ ํ˜•์ด ์ •์˜๋œ ํ•จ์ˆ˜์˜ ๊ธฐ์กด Python ์ฝ”๋“œ์™€ ์ตœ์ ํ™”๋œ Python ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ธฐ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด "def" ๋Œ€์‹  ๋ณ„๋„์˜ ํ‚ค์›Œ๋“œ "fn"์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ œ์•ˆ๋ฉ๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํด๋ž˜์Šค์˜ ๊ฒฝ์šฐ ์ปดํŒŒ์ผ ์‹œ์ ์— ๋ฉ”๋ชจ๋ฆฌ์— ์ •์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํŒจํ‚นํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ(C ์–ธ์–ด์ฒ˜๋Ÿผ) "class" ๋Œ€์‹  "struct" ์œ ํ˜•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. C/C++ ์–ธ์–ด์—์„œ ๋ชจ๋“ˆ์„ ๊ฐ„๋‹จํžˆ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ˆ˜ํ•™ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ cos ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด "from "math.h" import cos"๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

DDoS ๋ณดํ˜ธ, VPS VDS ์„œ๋ฒ„๊ฐ€ ์žˆ๋Š” ์‚ฌ์ดํŠธ๋ฅผ ์œ„ํ•œ ์•ˆ์ •์ ์ธ ํ˜ธ์ŠคํŒ… ๊ตฌ์ž… ๐Ÿ”ฅ DDoS ๊ณต๊ฒฉ ๋ฐฉ์ง€ ๊ธฐ๋Šฅ์ด ํƒ‘์žฌ๋œ ์•ˆ์ •์ ์ธ ์›น์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ…, VPS ๋ฐ VDS ์„œ๋ฒ„๋ฅผ ๊ตฌ๋งคํ•˜์„ธ์š” | ProHoster