๐Python JIT(Just-in_Time)์ปดํ์ผ๋ฌ๋ก ์คํ์๊ฐ ์ต์ ํ
์๋ง JIT์ ๋ํด ์๋ฐ๋ฅผ ๊ฒฝํํ์ จ๋ ๋ถ๋ค์ ์ด๋ฏธ ์์๋ ๋ถ๋ค๋ ๋ง์ผ์ค ๊ฒ์ ๋๋ค. ์๋ฐ ์ญ์ ์ธํฐํ๋ฆฌํฐ ์ธ์ด์ด๊ณ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ๋ณด์ํ๊ธฐ ์ํด JIT์ปดํ์ผ๋ฌ๋ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. Python ๋ํ, ์ธํฐํ๋ฆฌํฐ ์ธ์ด๋ก ์ฝ๋๋ฅผ ํ๋ฒ์ ํ์ค์ฉ ์ฝ์ด ์คํํ๋ ๋ฐฉ์์ ๋๋ค. ๋งค๋ฒ ์ฝ๋๋ฅผ ํ์ฌํ๊ณ , ๊ธฐ๊ณ์ด๋ก ๋ฐ๊พธ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ค๋ณด๋ ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๋ ์ธ์ด์ ๋นํด ์คํ์๋๊ฐ ๋๋ฆฝ๋๋ค. ํ์ง๋ง ์์ค์ฝ๋๋ฅผ ๋ฐ์ดํธ์ฝ๋ ํํ๋ก ์ปดํ์ผํ๋ Just-In-Time ์ปดํ์ผ๋ฌ๋ฅผ ์ด์ฉํ๋ฉด ๋ง์ ๊ฐ์ ํจ๊ณผ๋ฅผ ์ป์์ ์์ต๋๋ค. ๐ JIT์ปดํ์ผ๋ฌ๊ฐ ๋น ๋ฅธ ์ด์ . JIT์ปดํ์ผ๋ฌ๋ ๊ฐ์ ์ฝ๋๋ฅผ ๋งค๋ฒ ํด์ํ๋๊ฒ ์๋๋ผ, ์ฒ์ ์คํ๋ ๋ ์ธํฐํ๋ฆฌํธ ๋ฐฉ์์ผ๋ก ๊ธฐ๊ณ์ด ์ฝ๋๋ฅผ ์์ฑํ๊ณ ,์บ์ฑ๋ ์ฝ๋๋ฅผ ๊ฐ์ ธ๋ค ์ฐ๊ธฐ ๋๋ฌธ์ ์ธํฐํ๋ฆฌํฐ์ ๋๋ฆฐ ์คํ ์๋๋ฅผ ๊ฐ์ ํ ์ ์์ต๋๋ค. (* ์ฐธ๊ณ : JAVA์ ๊ฒฝ์ฐ Method์์ญ์ ์๋ ์ฝ๋ ์บ์(Code Cache) ๊ณต๊ฐ์ JIT๋ก ์ปดํ์ผ๋ ๊ธฐ๊ณ์ด ์ฝ๋๋ฅผ ์บ์ฑ) ๐น Python์์ JIT์ปดํ์ผ๋ฌ๋ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ Python์์๋ JIT์ปดํ์ผ๋ฌ๋ ์ฌ์ฉํ ์ ์๋ ๋ํ์ ์ธ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ์ต๋๋ค. โถ๏ธ PyPy(https://www.pypy.org) โถ๏ธ Numba(https://numba.pydata.org) โ PyPy (https://www.pypy.org/download.html) ํ์ด์ฌ์ ๊ธฐ๋ณธ ์ธํฐํ๋ฆฌํฐ์ธ CPython์ ๋์ฒดํ๋ ๊ตฌํ์ฒด์ ๋๋ค. ํ์ฌ๋ 3.9๋ฒ์ ์ด ๋์์์ผ๋ฉฐ, CPyhon3.7๋ณด๋ค ์ฝ 4.9๋ฐฐ ๋น ๋ฅด๋ค๊ณ ๊ณต์ ํํ์ด์ง์ ๋์ ์์ต๋๋ค. ์ฌ์ฉ๋ฐฉ๋ฒ์ pypy์ ์ํ๋ ๋ฒ์ ์ผ๋ก ๋ค์ด๋ฐ์ ์ค์นํ ํ์ ์ฝ๋๋ฅผ ์์ฑํ์ฌ ์คํํ๋ ๋ฐฉ์์ธ python test.py >> pypy test.py ๋ก ๋ณ๊ฒฝํด์ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค. ๊ธฐ์กด Python์ ๋นํด ์์ฃผ์ฐ๋ ์ฝ๋๋ฅผ ์บ์ฑํด์ ๊ฐ์ง๊ณ ์๊ธฐ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์ฌ์ฉํ๊ณ ์ฌ๋ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํธํ์ฑ ๋ฌธ์ ์ ๋ํด ๋จ์ ์ผ๋ก ๋ง์ด ์ธ๊ธ๋๋ค์ โ Numba(http://numba.pydata.org/numba-doc/latest/index.html) ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ PyPy๋ณด๋ค ๊ณ ๋ คํ ๊ฒ ์ ๊ณ ์ฌ์ฉํ๊ธฐ ํจ์ฌ ๊ฐ๋จํฉ๋๋ค. numba๋ฅผ requirments.txt์ ์ถ๊ฐ, pip install์ ํตํด์ ์ค์น๋ฅผ ํ๋ฉด๋์ด ์์ฃผ ํธ๋ฆฌํฉ๋๋ค. Numba์ LLVM(Low Level Virtual Machine)์ปดํ์ผ๋ฌ๋ฅผ ์ด์ฉํด, ์์น ์ฐ์ฐ์ ๊ฐ์ํํด์ฃผ๋ฉฐ, ํนํ Numpy์ฝ๋ ์ฒ๋ฆฌ์ ํนํ๋์ด ์์ต๋๋ค. PyPy์ฒ๋ผ ์ ์ฒด ์ฝ๋์ ๋ํ ์ต์ ํ๋ฅผ ํด์ฃผ์ง๋ ๋ชปํ๋, ์กฐ๊ฐ ์ฝ๋๋ ํ์ํ ๋ถ๋ถ์ ์ฝ๋ ์ต์ ํ๋ฅผ ํ ๋ ์ ์ฉํฉ๋๋ค. numba๋ฅผ importํํ, ๋ด๊ฐ ์ต์ ํ๊ฐ ํ์ํ ํจ์์ ๋ฐ์ฝ๋ ์ดํฐ๋ก @jit๋๋ @njit๋ฅผ ์ ํ ์ ํด์ฃผ๋ฉด๋ฉ๋๋ค. (*์์ ์ฝ๋ ์ฐธ์กฐ, ์ฝ๋ ์คํ์๊ฐ์ ์คํฌ๋ฆฐ์ท๋ฅผ ๋๋ฌ์ ๋ณด์ ์ผ ์ ๋๋ก ๋ณด์ ๋๋ค.) ๋จ์ ์ด๋ผ๋ฉด, ํด ์ฒด์ธ์ผ๋ก, LLVM์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๊ธฐ์ ์์กด๊ด๊ณ์ ์กด์ฌํฉ๋๋ค. ๐ก๐ก๐ก ์ฌ์ค Python์์๋ Cython์ ์ด์ฉํ๋ค๋์ง, C,C++์ ํ์ฉํ๋ ๋ฑ์ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ์คํ์๊ฐ์ ์ต์ ํํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ด ๋ฐฉ๋ฒ๋ค์ด ์ค๋ ๋ง์๋๋ฆฐ ๋ฐฉ๋ฒ๋ค๋ณด๋ค๋ ์ฌ์ฉํ๊ธฐ ๋ณต์กํ๊ณ ๋ค์ ๋ฒ๊ฑฐ๋กญ๊ธฐ์ ๋ฌ๋์ปค๋ธ๊ฐ ์์ต๋๋ค. ํ์ง๋ง, PyPy์ ์ฝ๋ ์์ ์์ด ์๋ ํฅ์์ ์ด๋ฃฐ์ ์์ผ๋ฉฐ, Numba์ ๊ฒฝ์ฐ ๋จ์ํ ๋ฐ์ฝ๋ ์ดํฐ ์ถ๊ฐ๋ง์ผ๋ก ์ฑ๋ฅํฅ์์ ์ด๋ฃฐ์ ์์ต๋๋ค. ๐ Reference https://towardsdatascience.com/this-decorator-will-make-python-30-times-faster-715ca5a66d5f https://namu.wiki/w/JIT#fn-2 https://hongl.tistory.com/204 https://strawberry.report/python-code-optimization/ https://numba.pydata.org https://www.pypy.org