๋ค์์ NumPy์์ BLIS ์ง์์ ๋ํ ๋ ผ์๋ฅผ์ํ ์ผ๋ฐ์ ์ธ ์ถ์ ๊ธฐ ๋ฌธ์ ์ ๋๋ค. ์ง๊ธ๊น์ง ์ฐ๋ฆฌ๋ ๋ช ๋ชฉ์ ๋ฌด๊ด ํ ๋ ๊ฐ์ ์ค๋ ๋์์ ์ด์ ๋ํด ๋ช ๊ฐ์ง ๋ ผ์ํ์ต๋๋ค.
๊ทธ๋์ ์ด๊ฒ์ ๋ค์๊ณผ ๊ฐ์ ํฅํ ํ ๋ก ์ ํตํฉํ๊ธฐ์ํ ์๋ก์ด ๋ฌธ์ ์ ๋๋ค. :-)
๊ฐ์กฐํด์ผ ํ ํ์ฌ ๋ฏธํด๊ฒฐ ๋ฌธ์ :
CC : @tkelman @ matthew-brett @fgvanzee
BLIS๊ฐ site.cfg
์ ํฌํจ ๋ ๊ฒ์ ํ์ธํ์ต๋๋ค.
libFLAME ๋ ์ง์ํ ์ ์์ต๋๊น?
https://www.cs.utexas.edu/%7Eflame/web/libFLAME.html ์ ์ค๋ช ์ ์์ ์ด ํ์ํ ์ ์์ง๋ง libFLAME์ด ์ค์ ๋ก LAPACK API๋ฅผ ๊ตฌํํ๋ค๋ ๊ฒ์ด ๋ถ๋ช ํ์ง ์์ต๋๋ค.
@rgommers libflame์ ์ค์ ๋ก netlib LAPACK API๋ฅผ ์ ๊ณตํ๊ณ libflame์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ์ง ์๋ ๋ชจ๋ ๊ฒ์ ๋ํ ๊ตฌํ์ ์ ๊ณตํฉ๋๋ค.
FWIW, BLIS๋ ์ด๋ฒ ํธ๊ฐ ์ด๋ฆฐ ์ด๋๋ก ํฐ ์ง์ ์ ์ด๋ฃจ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, BLIS๋ ์ด์ ๋ฐํ์ ๊ตฌ์ฑ์ ๊ตฌํํ๊ณ ๊ตฌ์ฑ ์๊ฐ ๊ตฌ์ฑ์ด ๋ฐํ์ ์ธํ๋ผ ์ธก๋ฉด์์ ๋ค์ ๊ตฌํ๋์์ต๋๋ค. BLIS๋ ์ด์ ๋ณด๋ค ํฌ๊ด์ ์ธ ํ
์คํธ ์ค์ํธ ์ธ์๋ ํตํฉ ๋ BLAS ํ
์คํธ ๋๋ผ์ด๋ฒ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ชจ ๋๋ฆฌ ์ ํค๋ ์์ฑ (500 ๊ฐ ์ด์์ ๊ฐ๋ฐ ํค๋ ๋์ ๋จ์ผ blis.h)๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฒด ์ด๊ธฐํ๋ ์ ์ฉ๋์ด ์ค์น๋ ์ ํ์ ๋ ์ฝ๊ฒ ๊ด๋ฆฌ ํ ์ โโ์์ต๋๋ค. ๋ํ ์ ์ ๋ฐ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋น๋์ ๋ํด๋ณด๋ค ํ์คํ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋ฆ ์ง์ ๊ท์น์ ๋ฐ๋ฅด๋ฉฐ soname
ํฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก, ๋น๋ ์์คํ
์ ์ปดํ์ผ๋ฌ์ ์ด์
๋ธ๋ฌ ํธํ์ฑ์ ๊ฒ์ฌํ๋ ๊ฒ์ด ํจ์ฌ ๋ ๋๋ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ด ๋ฐ๋ก ์ ๋จธ๋ฆฌ ์์์ ์๊ฐํ ์์๋ ๊ฒ์
๋๋ค.
@fgvanzee ๊ฐ์ฌํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ๋๋ numpy.distutils
์ ์ง์์ ์ถ๊ฐํ๊ธฐ ์ํด +1์
๋๋ค.
์ง๊ธ์ ์๊ฐ์ด ๋๋ฌด ๋ถ์กฑํด์ ์ ์ด๋ 9 ์๊น์ง๋ ์ผํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ์ฌ๋์ด์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ถ๋ค๋ฉด ์๋์ ์ผ๋ก ๊ฐ๋จํด์ผํฉ๋๋ค (gh-7294์ ๊ฐ์ ์ค์ ๋ฐ๋ผ). ๋ฌธ์ ํด๊ฒฐ / ๊ฒํ ๋ฅผ ๋์ ๋๋ฆฌ๊ฒ ์ต๋๋ค.
๊ทธ๊ฒ์ ํฐ ์ง์ ์ฒ๋ผ ๋ค๋ฆฝ๋๋ค. numpy / scipy (์ฑ๋ฅ ๋ฐ ์์ ์ฑ ์ธก๋ฉด)์ ๋ํด OpenBLAS์ ์คํ ๊ฐ๋ฅํ ๋์์ด๋๊ธฐ๊น์ง ์ผ๋ง๋ ๊ฑธ๋ฆฝ๋๊น?
(Fortran ์๋ง์ผ๋ก ์ธํด Windows์ conda
์ ๋ํ scipy-openblas๊ฐ ์์ง ์์ต๋๋ค : https://github.com/conda-forge/scipy-feedstock/blob/master/recipe/ meta.yaml # L14)
MSVC ABI ํธํ BLAS ๋ฐ LAPACK์ ์ํ๋ ๊ฒฝ์ฐ ์ฌ์ ํ ์ฌ์ด ์์ ํ ์คํ ์์ค ์ต์ ์ด ์์ต๋๋ค. ์์ฆ์๋ clang-cl๊ณผ flang์ด ์กด์ฌํ์ง๋ง ๋ฌธ์ ๋ ์์ ๊ณผ ๊ฐ์ ์ปดํ์ผ๋ฌ ๊ฐ์ฉ์ฑ์ด ์๋๋ผ ์์คํ ์ ์ฐ์ฑ์ ๊ตฌ์ถํ๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฑ์๊ฐ ์ด์ ์ ํ๊ฐํ๊ฑฐ๋ ์ง์ ํ ์ ์ด์๋ ์กฐํฉ์ ์ฌ์ฉํ๋ ค๋ ๊ฒ์ ๋๋ค. ์ฐธ์กฐ https://github.com/flame/blis/issues/57#issuecomment -284614032
@rgommers BLIS๋ ํ์ฌ OpenBLAS์ ๋ํ ์คํ ๊ฐ๋ฅํ ๋์์ด๋ผ๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค. AMD๊ฐ ACML์ ํฌ๊ธฐํ๊ณ BLIS๋ฅผ ์๋ก์ด ์คํ ์์ค ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์๋ฃจ์ ์ ๊ธฐ๋ฐ์ผ๋ก ์์ ํ ์์ฉ ํ ๊ฒ์ ์ถฉ๋ถํ ์คํ ๊ฐ๋ฅํฉ๋๋ค. (์ฐ๋ฆฌ๋ ๊ธฐ์ ํ์์๊ฐ ์์ผ๋ฉฐ ๊ณผ๊ฑฐ ์๋ ๋์ ๊ตญ๋ฆฝ ๊ณผํ ์ฌ๋จ์ ํ์์ ๋ฐ์์ต๋๋ค.)
์ฑ๋ฅ ์ธก๋ฉด์์ ์ ํํ ํน์ฑํ๋๋ณด๊ณ ์๋ ์์ , ๋ถ๋ ์์์ ๋ฐ์ดํฐ ์ ํ, ํ๋์จ์ด ๋ฐ ๊ด์ฌ์๋ ๋ฌธ์ ํฌ๊ธฐ ๋ฒ์์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ๊ทธ๋ฌ๋ ์ผ๋ฐ์ ์ผ๋ก BLIS๋ ์ผ๋ฐ์ ์ผ๋ก OpenBLAS๋ฅผ ์ถฉ์กฑํ๊ฑฐ๋ ๋ฅ๊ฐํฉ๋๋ค. ๊ฐ์ฅ ์์ ๋ฌธ์ ํฌ๊ธฐ๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ฌธ์ ์ ๋ํ ์์ค 3 ์ฑ๋ฅ (300 ๊ฐ ๋ฏธ๋ง). ๋ํ OpenBLAS๊ฐ ์ ๊ณตํ๋ ๊ฒ๋ณด๋ค ๋ ์ ์ฐํ ๋ ๋ฒจ 3 ๋ณ๋ ฌํ ์ ๋ต์ ์ฌ์ฉํฉ๋๋ค (๋ชจ ๋๋ฆฌ ์ ์ด์ ๋ธ๋ฆฌ ์ปค๋ ์ค๊ณ๋ก ์ธํด).
์์ ์ฑ ์ธก๋ฉด์์ BLIS๊ฐ ์๋นํ ์์ ์ ์ด๋ผ๊ณ ์๊ฐํ๊ณ ์ถ์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ฒ๊ทธ ๋ณด๊ณ ์์ ๋งค์ฐ ๋์ํ๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ ์์ผ๋ฉฐ ์ง๋ 5 ๊ฐ์ ๋์ ์ปค๋ฎค๋ํฐ์ ๊ด์ฌ์ด ๊ธ์ฆํ ๋๋ถ์ ๋ง์ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ณ ์์ ํ ์์์์ต๋๋ค (๋๋ถ๋ถ ๋น๋ ์์คํ ๊ด๋ จ). ์ด๋ฅผ ํตํด ์ต์ข ์ฌ์ฉ์์ ํจํค์ง ๊ด๋ฆฌ์์ ์ฌ์ฉ์ ๊ฒฝํ์ด ์ํ ํด์ก์ต๋๋ค.
๋ํ BLIS๋ (0 ์ผ์งธ๋ถํฐ) BLAS์ ์ ์ฌํ ๊ธฐ๋ฅ์ ์์ ์งํฉ์ ์ ๊ณตํ์ผ๋ฉฐ BLAS ํธํ์ฑ ๊ณ์ธต๊ณผ ๋ถ๋ฆฌ ๋ ๋ ๊ฐ์ ์๋ก์ด API๋ฅผ ํตํด ์ํํ์ต๋๋ค.
์ด๋ BLAS ์ฐ๊ฒฐ์ด ํ์ํ ์ํํธ์จ์ด๋ฅผ ์ด๋ฏธ ๋ณด์ ํ๊ณ ์๋ ๋ ๊ฑฐ์ ์ฌ์ฉ์๋ฅผ ์ง์ํ ๋ฟ๋ง ์๋๋ผ BLAS ์ธํฐํ์ด์ค์ ๋ํ ํน๋ณํ ์นํ๋ ฅ์ ๋๋ผ์ง ๋ชปํ ์์๋ ์ฌ์ฉ์ ์ง์ ๊ณ ๋ฐ๋ ์ ํ ๋์ ์๋ฃจ์ ์ ์ฒ์๋ถํฐ ๊ตฌ์ถํ๋ ๋ฐ ๊ด์ฌ์ด์๋ ์ฌ์ฉ์์๊ฒ ํ๋ฅญํ ๋๊ตฌ ์์๋ฅผ ์ ๊ณตํฉ๋๋ค.
๊ธฐ์กด BLAS ๊ตฌํ๊ณผ BLAS API ์์ฒด์ ๋ค์ํ ๋จ์ ์ ๋ํ ์ข์ ๊ฐ์์ ํ์ด๋ BLIS๋ 2012 ๋ ๋ถํฐ ์ ์ฌ๋์ ๋ ธ๋์ด์์ต๋๋ค. ์๋ฌด๋ฐ๋ ๊ฐ์ง ์๊ณ ๋ ๋์์ง ๊ฒ์ ๋๋ค. :)
์ ๊ฐ์ฌํฉ๋๋ค @tkelman. Cygwin :( :(
Linux / macOS์์ BLIS์ ๋ํด ์ปดํ์ผ ๋ numpy๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋๋ค์ ๊ฒฝํ์ ๋ฃ๋ ๊ฒ์ ํฅ๋ฏธ๋ก์ธ ๊ฒ์ ๋๋ค.
@fgvanzee ์ปจํ ์คํธ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. libFLAME ์ง์์ ์ถ๊ฐํ๊ณ SciPy ๋ฒค์น ๋งํฌ ์ ํ๊ตฐ์ ์ฌ์ฉํด ๋ณด๋ฉด ํฅ๋ฏธ๋ก์ธ ๊ฒ์ ๋๋ค.
@rgommers Re : libflame : ๊ด์ฌ์ ๊ฐ์ ธ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. libflame์ ์ผ๋ถ TLC๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. BLIS๋งํผ ๋ชจ์์ด ์ข์ง๋ ์์ต๋๋ค. (์ฐ๋ฆฌ๋ ์ํ๋๋๋ก ์ง์ํ ์๊ฐ / ์์์ด ์์ผ๋ฉฐ ์ง๋ 6 ๋ ๋์ ๊ฑฐ์ 100 % ๊ด์ฌ์ ๊ธฐ์ธ์ฌ BLIS๊ฐ OpenBLAS์ ์คํ ๊ฐ๋ฅํ๊ณ ๊ฒฝ์๋ ฅ์๋ ๋์์ด ๋ ์์๋ ๊ณณ์ผ๋ก ์ด๋ํ๋ ๋ฐ ์ง์คํ์ต๋๋ค. ์ธ)
์ธ์ ๊ฐ BLIS๊ฐ ์ฑ์ํ๊ณ ์ฐ๊ตฌ ๋ฐฉ๋ฒ์ด ์์ง๋๋ฉด libflame / LAPACK ์์ค ๊ธฐ๋ฅ (์ : Cholesky, LU, QR ๋ถํด)์ผ๋ก ๋ค์์ฃผ์๋ฅผ ๋๋ฆด ๊ฒ์ ๋๋ค. ์ด๋ ์ด๋ฌํ ๊ตฌํ์ BLIS์ ์ ์ง์ ์ผ๋ก ์ถ๊ฐํ๋ ํํ๋ฅผ ์ทจํ๊ฑฐ๋ ๊ถ๊ทน์ ์ผ๋ก libflame์ ๋์ฒดํ๊ธฐ ์ํด ์์ ํ ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ํฌํจ ํ ์ ์์ต๋๋ค. ํ์์ ๊ฒฝ์ฐ BLIS์ ํ์ ์์ค API๋ฅผ ํ์ฉํ๋๋ก ์ค๊ณ๋์ด ํ์ฌ BLAS๋ฅผ ํตํด ํผํ ์์๋ ์ผ๋ถ ํจ์ ํธ์ถ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๋ณต์ฌ ์ค๋ฒ ํค๋๋ฅผ ํผํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์กฐ์ฌํ๊ธฐ๋ฅผ ๊ธฐ๋ํ๋ ๋ง์ ์ฃผ์ ์ค ํ๋ ์ผ๋ฟ์ ๋๋ค.
๋ฉํฐ ์ค๋ ๋ฉ์์ด Intel Skylake์์ NumPy 1.15 ๋ฐ BLIS 0.3.2 ๋ก์ด ๊ธฐ์ฌ์ ๋ฒค์น ๋งํฌ๋ฅผ ์คํ
Dotted two 4096x4096 matrices in 4.29 s.
Dotted two vectors of length 524288 in 0.39 ms.
SVD of a 2048x1024 matrix in 13.60 s.
Cholesky decomposition of a 2048x2048 matrix in 2.21 s.
Eigendecomposition of a 2048x2048 matrix in 67.65 s.
์ธํ MKL 2018.3 :
Dotted two 4096x4096 matrices in 2.09 s.
Dotted two vectors of length 524288 in 0.23 ms.
SVD of a 2048x1024 matrix in 1.11 s.
Cholesky decomposition of a 2048x2048 matrix in 0.19 s.
Eigendecomposition of a 2048x2048 matrix in 7.83 s.
4.29 ์ด์ ๋ ๊ฐ์ 4096x4096 ํ๋ ฌ์ ์ ์ผ๋ก ๊ตฌ๋ถํ์ต๋๋ค.
@homocomputeris ์ฃ์กํฉ๋๋ค. ์ ์ ๋ ํ๋ ฌ์ ๋ํ ์ฐ์ฐ์ ์ค๋ช ํ๋ ๋ฐ ์ฌ์ฉ ๋ "์ "๋์ฌ๋ฅผ ๋ค์ด ๋ณธ ์ ์ด ์์ต๋๋ค. ๊ทธ๊ฒ ํ๋ ฌ ๊ณฑ์ ์ธ๊ฐ์?
@fgvanzee ์์ฆ BLIS์์ Windows ์ง์ ์ํ๋ ์ด๋ป์ต๋๊น? Windows์์ ๋น๋ํ๋ ๊ฒ์ด ๋๋ถ๋ถ ์ง์๋์ง ์์๋ ๊ฒ์ ๊ธฐ์ตํฉ๋๋ค.
@fgvanzee ๋ฐ ์, numpy.dot
์ Python์์ GEMM์ ํธ์ถํ๋ ์ ํต์ ์ธ ๋ฐฉ๋ฒ์
๋๋ค. (์ด์ํ ์ด๋ฆ์ ์ผ์ข
์ด์ง๋ง ๋ฒกํฐ-๋ฒกํฐ, ๋ฒกํฐ-ํ๋ ฌ, ํ๋ ฌ-ํ๋ ฌ์ ๋ชจ๋ ๋์ผํ API์์ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์
๋๋ค.)
@njsmith "๊ธฐ๋ณธ"Windows ์ง์ ์ํ๋ ๋๋ถ๋ถ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค. ์ํ๊น๊ฒ๋ ์ด๋ฌํ ์ง์์ด ์ด๋ฃจ์ด ์ง๋๋กํ๋ ๋ฐ์๋ ์ฌ์ ํ ์ ๋ฌธ์ฑ๊ณผ ๊ด์ฌ์ด ๋ถ์กฑํฉ๋๋ค. ๊ทธ๋ฌ๋ Windows 10์ด ์ถ์ ๋ ์ดํ๋ก "Windows ์ฉ ์ฐ๋ถํฌ"๋๋ ์ผ์ข ์ bash ํธํ์ฑ ํ๊ฒฝ์ด์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๋ ์๋ง๋ Windows ์ง์์ ๋ฌ์ฑํ๊ธฐ์ํ ํจ์ฌ ๋ ์ ๋งํ ๋ฐฉ๋ฒ ์ผ ๊ฒ์ ๋๋ค. (๊ทธ๋ฌ๋ ์ฐ๋ฆฌ ๊ทธ๋ฃน์ ์๋ฌด๋ Windows์์ ๊ฐ๋ฐํ๊ฑฐ๋ ์ฌ์ฉํ์ง ์์ผ๋ฏ๋ก ํด๋น ์ต์ ๋ ์กฐ์ฌํ์ง ์์์ต๋๋ค.)
์ข์, ์ง๊ธ์ ๋ง์ง๋ง ๊ฒ์๋ฌผ ํ๋ ...
@homocomputeris ๋ ์ด์ ๊ฐ์ ๋ฒค์น ๋งํฌ๋ฅผ ์ํด
@fgvanzee ๋ค์ดํฐ๋ธ strided ์ง์์ ๋ํด ๋งํ๋ฉด,
@fgvanzee "bash for Windows"๋ ํนํ ๋น ๋ฅด๊ณ ์ํํ VM ์ธ Windows์์ Linux VM์ ์คํํ๋ ๊ฒ๊ณผ ์ค์ง์ ์ผ๋ก ๋์ผํ์ง๋ง ๊ธฐ๋ณธ ํ๊ฒฝ์ ์๋๋๋ค. ๋ฐ๋ผ์ ์ข์ ์์์ ์ด๋ฏธ Windows ์ฉ bash๋ฅผ ์ง์ํ๋ค๋ ๊ฒ์ ๋๋ค. :-)ํ์ง๋ง ๋์ ์์์ ๊ธฐ๋ณธ Windows ์ง์์ ๋์ฒดํ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค.
@njsmith ๋ด ๊ฒฐ๊ณผ๋ ๊ธฐ์ฌ์์์ ๊ฑฐ์ ๋์ผํฉ๋๋ค.
์ต์ MKL, ์ :
Dotted two 4096x4096 matrices in 2.09 s.
Dotted two vectors of length 524288 in 0.23 ms.
SVD of a 2048x1024 matrix in 1.11 s.
Cholesky decomposition of a 2048x2048 matrix in 0.19 s.
Eigendecomposition of a 2048x2048 matrix in 7.83 s.
ํ์๋ CPU๊ฐ ์ต์ ํ ํ ์์๋ ๋ชจ๋ ๊ฒ๊ณผ ๋ฉํฐ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด BLIS๋ฅผ ์ปดํ์ผํ๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅธ๋ค๋ ์ ์ ์ฃผ๋ชฉํ๊ณ ์ถ์ต๋๋ค. MKL์ ๊ฑฐ์ ๋ชจ๋ ๊ฒ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ง๊ณ ์์ต๋๋ค.
@njsmith ์ ๋ฐ์ดํธ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๊ธฐ๋ณธ OS ์ง์์ ๋ฅ๊ฐํ๋ ๊ฒ์ ์๋ค๋ ๋ฐ ๋์ํฉ๋๋ค. ๋ํ @homocomputeris ์ ํ์ด๋ฐ์ ์ ์ ํ๊ฒ ํด์ํ๊ธฐ ์ํด ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์คํ๋๋ ๋ฒค์น ๋งํฌ๋ฅผ ํ์ธํด์ผํ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค.
๋ค์ดํฐ๋ธ ๋ณดํญ ์ง์์ ๋ํด ๋งํ์๋ฉด, ์์ฆ ๋ณดํญ์ ์ด๋ค ์ ํ์ด ์์ต๋๊น? ๋ฐ์ดํฐ ํฌ๊ธฐ์ ์ ํํ ๋ฐฐ์, ์์, ์์๊ฐ ์๋๊ณ ์ ๋ ฌ๋์ด์ผํฉ๋๊น? (๊ธฐ์ต ํ์๊ฒ ์ง๋ง, numpy ๋ฐฐ์ด์ ๋ฐ์ดํธ ๋จ์๋ก ์ธก์ ๋๋ ์์ ํ ์์์ ์ธ ์คํธ๋ผ์ด๋๋ฅผ ํ์ฉํฉ๋๋ค.)
@njsmith ์ ๋ ฌ? ์๋, ๊ธ์ ์ ? ์ฐ๋ฆฌ๊ฐ ๊ทธ ์ ์ฝ์ ํด์ ํ๋ค๊ณ ์๊ฐํ์ง๋ง ์ฒ ์ ํ๊ฒ ํ ์คํธ๋์ง ์์์ต๋๋ค. ๋ฐ์ดํฐ ์ ํ์ ์ ํํ ๋ฐฐ์? ๊ทธ๋, ๊ทธ๋๋.
@devinamatthews ๋ฅผ ํ ๋ก ์ ๊ฐ์ ธ
@homocomputeris size
๋ํด ๋ค๋ฅธ ๊ฐ์ผ๋ก ๋ฒค์น ๋งํฌ๋ฅผ ๋ค์ ์คํ ํ์๊ฒ ์ต๋๊น? ์ ์๊ฐ ์ฌ์ฉํ ๊ฐ (4096)์ด 2์ ๊ฑฐ๋ญ ์ ๊ณฑ์ด๋ผ๋ ๊ฒ์ด BLIS์ ๊ฒฝ์ฐ ํนํ ๋์ ์ฌ์ฉ ์ฌ๋ก์ธ์ง, ์ด์จ๋ ๋๋ถ๋ถ์ ์์ฉ ํ๋ก๊ทธ๋จ์์ ํนํ ํ์ค์ ์ด์ง ์์์ง ๊ถ๊ธํฉ๋๋ค. ๋์ 4000 (๋๋ 3000 ๋๋ 2000)์ ์๋ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
@homocomputeris ๊ทธ๋ฆฌ๊ณ BLIS ๊ฒฐ๊ณผ๋ ๋จ์ผ ์ค๋ ๋์ด๊ณ MKL ๊ฒฐ๊ณผ๋ ๋ค์ค ์ค๋ ๋๋ผ๊ณ ๋งํ์ต๋๊น?
FWIW, ์ผ๋ง ์ ์ Windows์์ BLIS๋ฅผ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ์ ์ดํด ๋ณด์์ต๋๋ค. ํ์ฌ ๊ฐ์ฅ ํฐ ๋ฌธ์ ์ ์ ๋น๋ ์์คํ ์ ๋๋ค. clang์ ์ฌ์ฉํ์ฌ MSVC ํธํ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์์ฑํ๋๋ก mingw์ make๋ฅผ ์ป์ ์ ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ ํ ์์๋ ์๊ฐ ๋์ ๊ฒฐ์ฝ ๊ทธ๊ฒ์ ์ป์ง ๋ชปํ์ง๋ง ๊ฐ๋ฅํด ๋ณด์ ๋๋ค.
์ค์ ์์ค ์ฝ๋ ๋ด์์ ์ํฉ์ ๊ทธ๋ฆฌ ๋์์ง ์์ต๋๋ค. ์ต๊ทผ์๋ ์ด์ ๋ธ๋ฆฌ ์ปค๋์ ๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ์ ํํ์ฌ Windows ์ง์์ ๋ํ ํ ๊ฐ์ง ์ฅ๋ฒฝ์ด ์ ๊ฑฐ๋์์ต๋๋ค. https://github.com/flame/blis/issues/220#issuecomment -397842370 ๋ฐ https://github.com/flame/blis/pull/224๋ฅผ ์ฐธ์กฐํ์ธ์. ์์ค ํ์ผ ์์ฒด๊ฐ MSVC๋ฅผ ๊ธฐ๋ฐ์ผ๋กํ๋ ๋ช ๊ฐ์ง ๋งคํฌ๋ก / ifdef๊ฐ ๋ ๋ง์ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ด๊ฒ์ด ์ธ๋ถ์ธ์ผ๋ก์์ ์ ๊ด์ ์ ๋๋ค. ๋ํ ๊ธฐ์กด BLIS ๋ฉ์ดํฌ ํ์ผ์ MSVC์ ํจ๊ป ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ ๋ชจ๋ฆ ๋๋ค.
@insertinterestingnamehere Ian์ ๋์ง ์์์ต๋๋ค . ๋ํ MSVC๋ ์์ง C99๋ฅผ ์ง์ํฉ๋๊น? ๊ทธ๋ ์ง ์๋ค๋ฉด ๊ทธ๊ฒ์ ๋ ๋ค๋ฅธ ์ฅ์ ๋ฌผ์ ๋๋ค. (BLIS์๋ C99๊ฐ ํ์ํฉ๋๋ค.)
๊ธ์, ๋๋ BLIS๊ฐ ๋ค๋ฅธ ๊ฒ๋ค๊ณผ ๋น๊ตํ ์ ์์์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ์์ ์๋ฅผ ์ฃผ์๊ธฐ ๋๋ฌธ์ ๋ ๊ตฌ์ฒด์ ์ธ ๊ฒ์ ํฌํจํ์ง ์์์ต๋๋ค.
๊ทธ๋ฌ๋ ๋น์ ์ด ๋ฌป๋๋๋ก : ์ค๋ง์ผ :
Intel MKL 2018.3์ 2 ๊ฐ์ ์ค๋ ๋๋ก ์ ํ๋ฉ๋๋ค (์ฆ, ๋ฌผ๋ฆฌ์ CPU ์ฝ์ด).
Dotted two 3851x3851 matrices in 1.62 s.
Dotted two vectors of length 492928 in 0.18 ms.
SVD of a 1925x962 matrix in 0.54 s.
Cholesky decomposition of a 1925x1925 matrix in 0.10 s.
Eigendecomposition of a 1925x1925 matrix in 4.38 s.
BLIS 0.3.2 ์ปดํ์ผ
CFLAGS+=" -fPIC" ./configure --enable-cblas --enable-threading=openmp --enable-shared x86_64
Dotted two 3851x3851 matrices in 3.82 s.
Dotted two vectors of length 492928 in 0.39 ms.
SVD of a 1925x962 matrix in 12.82 s.
Cholesky decomposition of a 1925x1925 matrix in 2.02 s.
Eigendecomposition of a 1925x1925 matrix in 67.80 s.
๋ฐ๋ผ์ BLIS๋ Windows ์ฌ์ฉ ์ฌ๋ก๊ฐ '์๋ํ๋ฉด ๋ง์ง์ง ๋ง์ญ์์ค'๋ผ๊ณ ์์ํ๊ธฐ ๋๋ฌธ์ ์ ์ด๋ Unix / POSIX / ์ด๋ค ์ ์ฌ ์์คํ
์์ NumPy์ ์ํด ํ์คํ ์ง์๋์ด์ผํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ด๊ฐ ๋ชจ๋ฅด๋ ์ ์ผํ ๊ฒ์ MKL / BLIS์ LAPACK / libFLAME ๊ฐ์ ์ฐ๊ฒฐ์
๋๋ค. ์ธํ
์ LAPACK, FFT ๋ฑ๊ณผ ๊ฐ์ด BLAS ์ธ์ ์ต์ ํ ๋ ๋ง์ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๋ค๊ณ ์ฃผ์ฅํฉ๋๋ค.
@fgvanzee ์ 2์ ๊ฑฐ๋ญ ์ ๊ณฑ์ด BLIS์ ๋์๊ฐ์? ๊ฐ์ฅ ๋น ๋ฅธ FFT๋ฅผ ์ํ๋ ๊ฒฝ์ฐ collocations ๋ฉ์๋์ ๋ํด ๋งค์ฐ ์ผ๋ฐ์ ์ ๋๋ค.
numpy ๋ฑ์ ๊ฒฝ์ฐ mingw / MSYS2์์ ๊ฑด๋ฌผ์ ๊ด๋ฆฌํ๋ ๊ฒ์ผ๋ก ์ถฉ๋ถํ ๊ฒ์ ๋๋ค .--- ํ์ฌ Windows์์ openblas๋ก ์ํํ๋ ์์ ์ ๋๋ค (๊ทธ ์์ฒด๋ก ๋ ์ผ์ข ์ ํดํน์ด์ง๋ง). CRT ๋ฆฌ์์ค๋ฅผ ์ ๋ฌํ์ง ์๋ "์ ํต์ ์ธ"API๋ก ์ฌ์ฉ์ ์ ํํ์ง๋ง BLAS / LAPACK์์๋ ๊ด์ฐฎ์ต๋๋ค.
@fgvanzee C99์ ๋ํ ์ข์ ์ง์ . WRT C99 ์ ์ฒ๋ฆฌ๊ธฐ, ๋๋๊ฒ๋ MSVC 2017 ์ ์ฒ๋ฆฌ๊ธฐ์กฐ์ฐจ๋ ๊ฑฐ๊ธฐ์์ ์์ ํ ์กํ์ง ์์์ต๋๋ค. ์๋ง๋ ๊ทธ๋ค์ ํ์ฌ ๊ทธ๊ฒ์ ์์ ํ๊ณ ์์ต๋๋ค (https://docs.microsoft.com/en-us/cpp/visual-cpp-language-conformance#note_D).
@fgvanzee @njsmith ๋ค์์ ์์์ ๋ฐ์ดํธ ์คํธ๋ผ์ด๋๋ฅผ ์ง์ํ๊ธฐ ์ํด ์ํํด์ผํ๋ ์์ ์ ๋๋ค.
1) ์ธํฐํ์ด์ค๋ฅผ ์์ ํฉ๋๋ค. ๋์๊ฒ ๋ฐ์ํ๋ ๊ฐ์ฅ ํธ๋ฆฌํ ์ผ์ ๊ฐ์ฒด ์ธํฐํ์ด์ค์ stride_units
ํ๋๊ทธ์ ๊ฐ์ ๊ฒ์ ์ถ๊ฐํ๋ ๊ฒ์
๋๋ค.
2) ๋ชจ๋ ๋ด๋ถ๋ฅผ ๋ฆฌํฉํฐ๋งํ์ฌ ๋ฐ์ดํธ ์คํธ๋ผ์ด๋ ๋ง ์ฌ์ฉํฉ๋๋ค. ์ด์จ๋ ์ด๊ฒ์ ๋์ ์๊ฐ์ด ์๋ ์ ์์ต๋๋ค.
3) ํจํน ํ ๋ ๋ฐ์ดํฐ ์ ํ ์ ๋ ฌ์ ํ์ธํ๊ณ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์ผ๋ฐ ํจํน ์ปค๋์ ์ฌ์ฉํฉ๋๋ค.
a) ์ผ๋ฐ ํจํน ์ปค๋๋ memcpy
๋ฅผ ์ฌ์ฉํ๋๋ก ์
๋ฐ์ดํธํด์ผํฉ๋๋ค. ๋ฆฌํฐ๋ด ํฌ๊ธฐ ๋งค๊ฐ ๋ณ์๋ฅผ ์ฌ์ฉํ๋๋ก ์ ์ ํ ์ ์๋ค๋ฉด ๋์ฐํ๊ฒ ์ง์ฆ๋ ์ง ์์์ผํฉ๋๋ค.
4) C๊ฐ ์ ๋ ฌ๋์ง ์์ ๊ฒฝ์ฐ memcpy
์ฌ์ฉํ์ฌ C์ ์ก์ธ์คํ๋ ๊ฐ์ ๋ง์ดํฌ๋ก ์ปค๋๋ ์ฌ์ฉํฉ๋๋ค.
์ด๊ฒ์ ์
๋ ฅ ๋ฐ ์ถ๋ ฅ ํ๋ ฌ์๋ง ํด๋น๋ฉ๋๋ค. alpha
๋ฐ beta
๊ฐ ์์์ ํฌ์ธํฐ๊ฐ ๋ ์ ์๋ค๋ฉด ๋ ๋ง์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. x86์์๋ ์ ๋ ฌ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ธ ์ ์์ง๋ง ๋ค๋ฅธ ์ํคํ
์ฒ (ํนํ ARM)๊ฐ ๋ฌธ์ ๊ฐ ๋ ์ ์์ต๋๋ค. ์ปดํ์ผ๋ฌ๋ ์๋ ๋ฒกํฐํ ํ ๋ ์ถ๊ฐ ์ ๋ ฌ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์๋ ์์ต๋๋ค.
@homocomputeris :
gemm
์ฐ์ฐ์ด C์ ๋ฐฐ์ ๋ฐ๋ ์ค์ 6x8 ๋ง์ดํฌ๋ก ํ์ผ์ ์
๋ฐ์ดํธ ํ ๋ ํด๋น 6 ๊ฐ ํ์ ๋ชจ๋ L1 ์บ์์ ์ค์ ๋ ๋์ผํ ์ฐ๊ด์ฑ์ ๋งคํ๋๋ฉฐ ๋ถ๊ฐํผํ๊ฒ ์ผ๋ถ๋ ์ ๊ฑฐ๋๊ธฐ ์ ์ ์ ๊ฑฐ๋ฉ๋๋ค. ์ฌ์ฌ์ฉ. ์ด๋ฌํ ์์ ์ถฉ๋ ์คํจ๋ ์ฑ๋ฅ ๊ทธ๋ํ์ ๊ฐ๋ ์ฑ๋ฅ์ด ๊ธ์ฆํ๋ ๊ฒ์ผ๋ก ํ์๋ฉ๋๋ค. ๋ด๊ฐ ์๋ ํ,์ด ์ฑ๋ฅ ์ ํ๋ฅผ ์ฝ๊ฒ ํด๊ฒฐํ ์์๋ ๋ฐฉ๋ฒ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฏธ ํ๋ ฌ A์ B๋ฅผ ํจํน / ๋ณต์ฌํ๊ธฐ ๋๋ฌธ์ ํฐ ์ํฅ์ ๋ฏธ์น์ง๋ ์์ง๋ง, ์์ฒญ๋ ๋ฉ๋ชจ๋ฆฌ ๋ณต์ฌ ํํธ๋ฅผ๋ฐ์ง ์๊ณ ๋ ํ๋ ฌ C๋ฅผ ๋ ์ ๋ฆฌํ ์ ํ ์ฐจ์์ผ๋ก ํจํน ํ ์ ์์ต๋๋ค. (์น๋ฃ๋ฒ์ ์ง๋ณ๋ณด๋ค ๋ ๋์ ๊ฒ์
๋๋ค.) ์ด์ MKL์์ด๋ฅผ ์ํ ํ ์์๋ ๋ฐฉ๋ฒ์ ๊ฐ์ง๊ณ ์์ ์ ์์ต๋๋ค. ์๋ง๋ ์ถฉ๋ ๋๋ฝ ํ์๋ฅผ ์ต์ํํ๋ ๋ค๋ฅธ ๋ชจ์์ ๋ง์ดํฌ๋ก ์ปค๋๋ก ์ ํ ํ ์ ์์ต๋๋ค. ์๋๋ฉด ๊ทธ๋ ์ง ์์ ์๋ ์์ง๋ง BLIS๊ฐ์ด๋ฅผ ์ํํ๊ธฐ ์ํด ์ด๋ค ์กฐ์น๋ ์ทจํ์ง ์๋๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ๊ทํ์ ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ด ๋์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.@fgvanzee ์
๋ฐ์ดํธ๋์์ต๋๋ค. ๋ด ์๋ชป์ BLIS๋ฅผ ๊ตฌ์ฑ์ ๋ฃ์์ง๋ง ์ด๋ค ์ด์ ๋ก MKL๋ก ์ปดํ์ผ๋์์ต๋๋ค.
SVD ๋ฐ EVD๊ฐ LAPACK์ ๊ตฌํ๋์ด ์์ต๋๊น?
@homocomputeris ์, LAPACK์ SVD ๋ฐ EVD๋ฅผ ๊ตฌํํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ MKL์ ๊ตฌํ์ด ๋งค์ฐ ๋น ๋ฅด๊ธฐ๋ฅผ ๊ธฐ๋ํฉ๋๋ค.
๊ทธ๋ฌ๋ EVD๋ ์ฝ๊ฐ ๋ชจํธํฉ๋๋ค. ์ผ๋ฐํ ๋ ๊ณ ์ ๊ฐ ๋ฌธ์ ์ Hermitian (๋๋ ๋์นญ) EVD๊ฐ ์์ต๋๋ค. ์ผ๊ฐ EVD๋ ์์ง๋ง ์ผ๋ฐ์ ์ผ๋ก Hermitian EVD๋ฅผ ๊ตฌํํ๋ ์ฌ๋๋ค์ ์ ์ธํ๊ณ ๋ ๊ทธ๊ฒ์ ๊ด์ฌ์ด์๋ ์ฌ๋์ ๊ฑฐ์ ์์ต๋๋ค.
NumPy๋ 2018 ๋ ๋ง์ Python 2.7 ๋ฐ 3.4 ์ง์์ ์ค๋จ ํ ์์ ์ด๋ฉฐ, ์ด๋ C99๋ฅผ ์ค์ํ๋ ์ต์ MSVC ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํ ๊ฒ์ ๋๋ค. ์ด๋ ๊ณต์ 2.7 ์ง์์ด ์ข ๋ฃ๋๊ธฐ ์ ์ ์ฐ๋ฆฌ๊ฐ ์ด๋ํ๋ ์ด์ ์ค ํ๋์ ๋๋ค. ์ต์ MSVC ์ปดํ์ผ๋ฌ์ C99 ์ง์์ ๋ํ ์์ธํ ๋ด์ฉ์ http://tinyurl.com/yazmczel ์ ์ฐธ์กฐํ์ญ์์ค. ์ง์์ด ์์ ํ์ง๋ ์์ง๋ง (์์ ํ ์ฌ๋์ด ์์ต๋๊น?) ์ถฉ๋ถํ ์ ์์ต๋๋ค. ์ผ๋ถ (Intel)๊ฐ ํฅ์๋ ์์น ์ง์์ ์ํด ์์ฒญ ํ์ผ๋ฏ๋ก NumPy ์์ฒด๋ฅผ ์ธ์ ๊ฐ C99๋ก ์ฎ๊ธธ ๊ฒ์ ๋๋ค.
@charris ์ด ์ ๋ณด๋ฅผ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค, Charles. ์๋ง ์ถฉ๋ถํ ๊ฒ์ด๋ค ๊ตฌํ ๋ ๊ฒ์ด๋ค ์ด๋ค ๊ฒฝ์ฐ์ง๋ง, ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ์๋ ํ ๋๊น์ง ์ฐ๋ฆฌ๋ ํ์คํ ์ ์ ์์ต๋๋ค.
์ด์จ๋ BLIS๋ ๋๋ฆฌ ์ฑํ๋๊ธฐ ์์ํ๊ธฐ ์ํด MKL์ ์ด๊ธธ ํ์๊ฐ ์์ต๋๋ค. ์ง์ ์ ์ธ ๊ฒฝ์์๋ OpenBLAS์ ๋๋ค.
BLIS๋ ๋๋ฆฌ ์ฑํ๋๊ธฐ ์์ํ๊ธฐ ์ํด MKL์ ์ด๊ธธ ํ์๊ฐ ์์ต๋๋ค. ์ง์ ์ ์ธ ๊ฒฝ์์๋ OpenBLAS์ ๋๋ค.
๋ ์ด์ ๋์ ํ ์ ์์ต๋๋ค. MKL์ ์์ฒด ๋ฆฌ๊ทธ์ ์์ต๋๋ค.
@njsmith Just curious : numpy ์ปค๋ฎค๋ํฐ๋ ํผํฉ ์ ๋ฐ๋ ๋ฐ / ๋๋ ํผํฉ ๋๋ฉ์ธ์์ gemm
๋ฅผ ์ํ ํ ์์๋ ์๋ก์ด API / ๊ธฐ๋ฅ์ ์ผ๋ง๋ ๊ด์ฌ์ด ์์ต๋๊น? ์ฆ, ๊ฐ ํผ์ฐ์ฐ์๋ A์ B ์ค ํ๋ ๋๋ ๋ ๋ค์ (์ ์ฌ์ ์ผ๋ก) ๋ค๋ฅธ ์ ๋ฐ๋๋ก ์ํ๋๋ ๊ณ์ฐ๊ณผ ํจ๊ป ๋ค๋ฅธ ๋ฐ์ดํฐ ์ ํ์ผ ์ ์์ต๋๋ค.
@fgvanzee ๊ด์ฌ์ด ์์ต๋๋ค. ํ๋ค๋ฆฌ์ง ์์ต๋๋ค . ๊ทธ๋ฌ๋ ํ์ฌ ์ฐ๋ฆฌ๋ ์๊ฐ๊ณผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ชจํ๋ ์ ํ ๋ณํ์ ์ํํฉ๋๋ค. ๋ํ ์ ์ ์ ํ์ ๋ํด ์ต์ ํ ๋ ๋ฃจํด์ ๊ฐ๋ ์์ด๋์ด๋ฅผ ๊ฐ์ง๊ณ ๋์์ต๋๋ค.ํ์ง๋ง ๋ถ์ธ์ด ์ค๋ฒํ๋ก๋ก ์ธํด ๋์ดํฌ ์์๋ ๊ณ ํต์ ๊ฒช์ง ์๋ ์ ์ผํ ์ ํ์ผ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ํญ์ float16์ด ์์ต๋๋ค. ML ์ง์์ ์ด๋ฌํ ๊ธฐ๋ฅ์ ๋ ๊ด์ฌ์ด์์ ์ ์์ต๋๋ค. @GaelVaroquaux ์๊ฐ?
@charris ์, ์ฌ๋ก์ ์๊ฐ gemm
๋ํด 128 ๊ฐ์ ์ ํ ์กฐํฉ์ด ์์ผ๋ฉฐ,์ด ์ซ์๋ ํ๋ ฌ ์ ์ฅ ๊ฐ๋ฅ์ฑ๋ฟ๋ง ์๋๋ผ ์ ์น / ํ์ฉ ๋งค๊ฐ ๋ณ์์์ ๋ชจ๋ ์กฐํฉ ํฝ์ฐฝ์ ์ ์ธํฉ๋๋ค (์ด ๊ฒฝ์ฐ ์ต๋ 55,296).
์ฑ๋ฅ์ด ๋ฎ์ ์ฐธ์กฐ ๊ตฌํ์ ํตํด์๋ 128 ๊ฐ ์ผ์ด์ค๋ฅผ ์์ ํ ๊ตฌํํ๋ ๊ฒ์ ์ฃผ๋ชฉํ ๋งํ ๋ฉฐ, ์ค๋ฒ ํค๋๋ฅผ ์ต์ํํ๋ ๊ณ ์ฑ๋ฅ ๋ฐฉ์์ผ๋ก ์ํํ๋ ๊ฒ์ ๋งค์ฐ ํน๋ณํฉ๋๋ค. (๊ทธ๋ฆฌ๊ณ BLIS์ ๊ฐ์ฒด ๊ธฐ๋ฐ ๊ธฐ๋ฐ ๋๋ถ์ ์ด๊ฒ์ ๊ตฌํํ๋ฉด ์ถ๊ฐ ๊ฐ์ฒด ์ฝ๋ ์ธก๋ฉด์์ ๋น์ฉ์ด ๊ฑฐ์ ๋ค์ง ์์ต๋๋ค.)
๊ด์ฌ์ด ์์ผ์๋ฉด ์์ผ๋ก ๋ฉฐ์น ๋๋ ๋ช ์ฃผ ์์ ์ ํฌ ํ๋ก์ ํธ๋ฅผ ์์ฒญํ์๊ธฐ ๋ฐ๋๋๋ค. :)
BLIS ํฌํฌ๋ ์์ ํ๊ฐ์?
์ด์จ๋ BLIS๋ ๋๋ฆฌ ์ฑํ๋๊ธฐ ์์ํ๊ธฐ ์ํด MKL์ ์ด๊ธธ ํ์๊ฐ ์์ต๋๋ค. ์ง์ ์ ์ธ ๊ฒฝ์์๋ OpenBLAS์ ๋๋ค.
๊ณผ์ฐ. ์์งํ ๋งํด์ NumPy + BLAS๊ฐ ๋ด ์์คํ
์์ ์๋ํ๋๋ก ๋ง๋ค ์๋ ์์์ง๋ง ์ด์ ์ ์ธ์ฉ ํ ๊ธฐ์ฌ๋ฅผ ๋ณด๋ฉด ๋งค์ฐ ๋น์ทํ ์ฑ๋ฅ์ ๋ณด์ด๋ ๊ฒ ๊ฐ์ต๋๋ค.
์๋ง๋ libFLAME์ NumPy์ ์ฐ๊ฒฐ๋๋ฉด LAPACK ์์
์๋๋ฅผ ๋์ผ ์ ์์ต๋๋ค.
AMD์ BLIS / libFLAME ํฌํฌ๋ฅผ ์ต์ Zen CPU์ ๋ฒค์น๋งํนํ์ฌ ๊ฐ์ ๋์๋์ง ํ์ธํ๋ ๋ ๋ค๋ฅธ ํฅ๋ฏธ๋ก์ด ์ง๋ฌธ์ ๋๋ค. ๋ฌธ์ ๊ฐ์๋ Intel ํ๋ก์ธ์์ ๊ด์ ์์ ๋ณผ ๋ ํจ์ฌ ๋ ํฅ๋ฏธ๋ก์์ง๋๋ค.
Linux ๋ฐ Windows์์ ํ์ฌ numpy์ ๊ณต์ ํ ์๋ OpenBLAS์ ์ฌ์ ๋น๋ ๋ ์ฌ๋ณธ์ด ํฌํจ๋์ด ์์ผ๋ฏ๋ก ์ด๋ฌํ ํ๋ซํผ์์ ์ฌ๋ณธ์ ์ป๋ ๊ฐ์ฅ ๋น ๋ฅธ ๋ฐฉ๋ฒ์ pip install numpy
์
๋๋ค. (๋ฌผ๋ก ์ด ๋ฒ์ ์ ๋ก์ปฌ์์ BLIS๋ฅผ ๋น๋ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ปดํ์ผ๋ฌ์ ๋ค๋ฅธ ์ปดํ์ผ๋ฌ๋ก ๋น๋ ๋์๊ธฐ ๋๋ฌธ์ ์์ ํ ๊ณต์ ํ์ง ์์ต๋๋ค.ํ์ง๋ง ํ ๊ฐ์ง ์์ด๋์ด๋ฅผ ์ป์ ์ ์์ต๋๋ค.)
BLIS ํฌํฌ๋ ์์ ํ๊ฐ์?
@jakirkham ๋๋ ์ด๊ฒ์ ๋ํด @devinamatthews์๊ฒ ๋ง์, ๊ทธ๋ ๋๋ต์ '์'๋ผ๊ณ ์๊ฐํ๋ ๊ฒ ๊ฐ๋ค. BLIS๋ OpenBLAS์ฒ๋ผ ์ค๋ ๋ ํ์ ์ ์งํ๋ ๋์ ์์ฒญ์ (์ : gemm
๊ฐ ํธ์ถ ๋ ๋) ์ค๋ ๋๋ฅผ ์์ฑํฉ๋๋ค.
๊ทธ๋๋ ๊ถ๊ธํฉ๋๋ค. numpy๋ ์ด๋ค ์ข ๋ฅ์ ์ค๋ ๋ฉ ๋ชจ๋ธ์ ๊ธฐ๋ / ์ ํธ / ์ข ์ํฉ๋๊น? ์ฌ๋ฌ ๊ฐ์ ๋งค์ฐ ์์ ๋ฌธ์ ๋ฅผ ์ฐ์์ ์ผ๋ก ํธ์ถํ๋ ์ฌ์ฉ ์ฌ๋ก์์ ์ค๋ฒ ํค๋๋ฅผ ์ค์ด๊ธฐ ์ํด ์ค๋ ๋ฉ ํ์ด ํ์ํฉ๋๊น? (BLIS์ ์ฃผ๋ฌธํ ์ค๋ ๋ฉ์ ์ด๋ฌํ ์ข ๋ฅ์ ์ฌ์ฉ์ ์ ํฉํ์ง ์์ต๋๋ค.)
ํธ์ง : ๋น์ทํ ๋งฅ๋ฝ์์ pthreads๊ฐ ํ์ํฉ๋๊น, ์๋๋ฉด OpenMP๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๊น?
์ ๋ณด์ ๋ํด์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๊ทธ๋ ๋ค๋ฉด pthreads, OpenMP๋ฅผ ๋ชจ๋ ์ฌ์ฉํ๊ณ ์์ต๋๊น? FWIW์๋ GCC์ OpenMP์ ์๋ ค์ง ๋ฌธ์ ๊ฐ ์์ผ๋ฉฐ AFAIK๊ฐ ํด๊ฒฐ๋์ง ์์๋ค๋ @ogrisel ). ํ์ด์ฌ์์ multiprocessing
๋ชจ๋์ ํตํด ๋ถ๊ธฐํ๋ ๊ฒ์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ณ๋ ฌ ์ฒ๋ฆฌ ์ ๋ต ์ค ํ๋์
๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ํ์ด์ฌ์์๋ ํฌํฌ ์์ ๋ฐฉ์์ผ๋ก ์ค๋ ๋ (์์ ์ด์ ๋ก pthreads ์ ํธ)๋ฅผ ์ฌ์ฉํ ์์๋ ๊ฒ์ด ๋งค์ฐ ์ค์ํฉ๋๋ค. ์์ฆ์๋ fork-exec๋ฅผ ์ฌ์ฉํ๋ loky ์ ๊ฐ์ ์ต์
์ด ๋ ๋ง์ด ์์ง๋ง.
๋ถ๋ช ํ Nathaniel์ ๋๋ณด๋ค ์ด๊ฒ์ ๋ํด ๋ ๋ง์ด ์๊ฒ ์ง๋ง, ์ด๋ฏธ์ด ์ฃผ์์ ์ฐ๊ธฐ ์์ํ๊ธฐ ๋๋ฌธ์ IIUC NumPy๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ (์ : BLAS)๋ฅผ ์ ์ธํ๊ณ ๋ ์ค๋ ๋ฉ ์์ฒด๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค. NumPy๋ GIL ์ ์ถฉ๋ถํ ์์ฃผ ๋ฆด๋ฆฌ์คํ๋ฏ๋ก Python์ ์ค๋ ๋ฉ์ด ๋ค์ ํจ๊ณผ์ ์ผ ์ ์์ต๋๋ค. Joblib, Dask ๋ฑ๊ณผ ๊ฐ์ ๊ฒ๋ค์ด์ด ์ ๋ต์ ํ์ฉํฉ๋๋ค.
์ค๋ ๋ ํ์ ๊ดํด์๋ NumPy / SciPy๋ฅผ ์ฌ์ฉํ์ฌ Python์์ ์ผ๋ จ์ BLAS ๋ฃจํด์ ์ํํ๋ ์ฑ๋ฅ์ ์ต๋ํํ๊ธฐ ์ํด ML ๊ธฐ์ ์ ํ๋กํ์ผ ๋งํ๋ ์ค์ด์๊ธฐ ๋๋ฌธ์ ์ด์ ๋ํด ์ง๋ฌธํ๋ ๊ฒ์ด ํฅ๋ฏธ ๋กญ์ต๋๋ค. OpenBLAS์ ์ ์ ํ ์์ ์ฝ์ด๋ฅผ ์ฌ์ฉํ๋ฉด์ด ๋ฃจํด์ Python์์ ๋ช ์์ ์ธ ์ค๋ ๋ฉ (NumPy ๋ฐ SciPy ํฌํจ)์ด ์ฌ์ฉ๋์ง ์๋๋ผ๋ ๋ฃจํด์ ๊ธธ์ด์ ๋ํด ์ฝ์ด๋ฅผ ํฌํ์ํฌ ์ ์์ต๋๋ค. OpenBLAS๊ฐ ์ผ์. ์, ์ค๋ ๋ ํ์ ๋ฏฟ์ ์ ์์๋งํผ ๊ฐ์น๊ฐ ์์ต๋๋ค.
๋ค๋ฅธ ์ ์์ BLIS๋ ๋์ ์ํคํ ์ฒ ๊ฐ์ง๋ฅผ ์ฒ๋ฆฌํฉ๋๊น? ์ด๊ฒ์ ํ ๋ฒ ๋น๋ํ๊ณ ๋ค์ํ ๋ค๋ฅธ ์์คํ ์ ๋ฐฐํฌ ํ ์์๋ ์ํฐํฉํธ๋ฅผ ๋น๋ํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
@jakirkham ๊ทํ์ ์๊ฒฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ค๋ ๋ ํ์ด์๋ ๊ฒ์ผ๋ก ๊ด์ฐฐ ๋ ๋น์ฉ์ ์ ๋ฌํ๋ ํ๋ ฌ ํผ์ฐ์ฐ์์ ํฌ๊ธฐ์ ์ํ์ค์ธ ์์
์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. gemm
์ด (๊ฐ) ๋ชฉํ๋กํ๋ ์ผ๋ฐ์ ์ธ ์์
์ด๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค (๋ด๊ฐ ํ๋ฆฐ ๊ฒฝ์ฐ ์์ ํด์ฃผ์ธ์).ํ์ง๋ง ์ผ๋ฐ์ ์ธ ๋ฌธ์ ํฌ๊ธฐ๋ ๋ฌด์์ด๋ผ๊ณ ์๊ฐํ์ญ๋๊น? BLIS์ create / join ๋ชจ๋ธ์ ๋น์ฉ์ A, B, C๊ฐ 40x40 ์ธ ํ๋ ฌ ๊ณฑ์
์ ๋ฐ๋ณต์ ์ผ๋ก ์ํํ๋ ๊ฒฝ์ฐ ๋ํ๋ ์ ์์ง๋ง 400x400 ์ด์์์๋ ๊ทธ๋ค์ง ๋ง์ง ์์ ๊ฒ์
๋๋ค. (TBH, 40x40 ๋ฌธ์ ๋ฅผ ๋ณ๋ ฌํํจ์ผ๋ก์จ ์์๋๋ ์๋ ํฅ์์ ๊ธฐ ๋ํด์๋ ์๋ฉ๋๋ค.)
๋ค๋ฅธ ์ ์์ BLIS๋ ๋์ ์ํคํ ์ฒ ๊ฐ์ง๋ฅผ ์ฒ๋ฆฌํฉ๋๊น? ์ด๊ฒ์ ํ ๋ฒ ๋น๋ํ๊ณ ๋ค์ํ ๋ค๋ฅธ ์์คํ ์ ๋ฐฐํฌ ํ ์์๋ ์ํฐํฉํธ๋ฅผ ๋น๋ํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
์. ์ด ๊ธฐ๋ฅ์ ์ผ๋ง ์ ์ธ 2017 ๋
ํ๋ฐ๊ธฐ์ ๊ตฌํ๋์์ต๋๋ค. BLIS๋ ์ด์ ์ผ๋ถ ํด๋ฆฌ์คํฑ (์ : cpuid
ํตํด ๋ฐํ์์ ์ ํ๋๋ ํน์ ํ์ ๊ตฌ์ฑ์ผ๋ก ์์ "๊ตฌ์ฑ ์ ํ๊ตฐ"์ ๋์์ผ๋ก ํ ์ ์์ต๋๋ค intel64
, amd64
, x86_64
์
๋๋ค.
@fgvanzee ์ค์ ๋ก ์์ ํ๋ ฌ์ ์ฑ๋ฅ์ด OpenBLAS์ ์ฝ์ ์ค ํ๋๋ผ๊ณ ์๊ฐํ๋ฏ๋ก BLIS๊ฐ ๋ค์ ๋๋ ค์ง๋ฉด ์ฝ๊ฐ ๊ฑฑ์ ๋ฉ๋๋ค ... ์ฌ๋๋ค์ ๋ถ๋ช ํ ๋ชจ๋ ์ข ๋ฅ์ ์ํฉ์์ numpy๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๋ง ์ค์ํ๊ฒ ์๊ฐํฉ๋๋ค. ํน์ ๊ฒฝ์ฐ์ ๋ํ ์กฐ์ ์์ด "๊ทธ๋ฅ ์๋"ํฉ๋๋ค. (๋๋ ์ด๊ฒ์ด ๊ฐ์ฅ ์ค์ํ ๋ ๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ๋ฒค์น ๋งํฌ๋ฅผ ์คํํ๋ ์๊ณ ๋ฆฌ์ฆ ์์ฑ์์ ์ ๋ฌธ ์์คํ ๊ด๋ฆฌ์์ ํจ๊ป ์ผ์ฃผ์ผ ๋์ ์ํผ ์ปดํจํฐ ์์ ์ ์คํํ๋ ์ ๋ฌธ๊ฐ ์ธ ๊ณ ์ ์ ์ธ ๊ณ ๋ฐ๋ ์ ํ ๋์ ์ค์ ๊ณผ ์ฝ๊ฐ ๋ค๋ฅธ ๊ฒ ๊ฐ์ต๋๋ค.) ์๋ฅผ ๋ค์ด, ์ฌ๋๋ค์ ์ข ์ข numpy๋ฅผ 3x3 ํ๋ ฌ.
์ด๋ค ๊ฒฝ์ฐ์๋ ์ด๊ฒ์ ์ ์ ํ๊ฒ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ๋๋ฌด ์์ ๋ฌธ์ ๊ฐ ์์์ ์ธ์ํ๊ณ ์ค๋ ๋ฉ์ ์์ ํ ๊ฑด๋ ๋ฐ๋ ๋ฌธ์ ์ผ ์ ์์ต๋๋ค. 3x3 gemm์ ๊ฒฝ์ฐ ์ต์ ์ ๋ฐฉ๋ฒ์ ๊ฐ๋ฅํ ํ ์ด๋ฆฌ์์ ๊ฒ์ ๋๋ค.
ํ์ง๋ง ์ด๋ฌํ ์ข ๋ฅ์ ์กฐ์ (๋๋ ์ค๋ ๋ ํ ๋ ์ค๋ ๋ ํ ์์)์ BLIS๊ฐ ๊ด๋ฒ์ํ๊ฒ ๋ฐฐํฌ๋๊ธฐ ์์ํ๋ฉด ์ปค๋ฎค๋ํฐ๊ฐ ๋ฐ์ด ๋ค๊ณ ์ํ ํ ์์ ์ผ ์ ์์ต๋๋ค.
์ฌ์ค ์ ๋ฅผ ์๊ธฐ์์ผ์ค๋๋ค. ์ ๋ ์ง๋์ฃผ์ ์์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๋ ๋์ ์์ค์ ์ค๋ ๋ฉ์ ๊ด๋ฆฌํ๊ณ ์์๊ธฐ ๋๋ฌธ์ gemm ๋จ์ผ ์ค๋ ๋๋ฅผ ํธ์ถํ๊ธฐ๋ฅผ ์ํ๋ค๋ ๊ฒ์ ์๊ณ ์๋ ๋๊ตฐ๊ฐ์ ์ด์ผ๊ธฐํ์ต๋๋ค. ๊ทธ๋ ํ์ค blas ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ๋๋ค. ์ ์ด๋ ์์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ด๋ถ์์ ํธ์ถํ๊ธฐ ์ฌ์ด ์ ์ญ ์ค์ ์ ํตํด ์ด๋ฃจ์ด์ง๋๋ค. BLIS์ ๋ค์ดํฐ๋ธ API๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์๊ฐ ํธ์ถ ๋จ์๋ก ์ค๋ ๋ ๊ตฌ์ฑ์ ์ ์ด ํ ์ ์์ต๋๊น? IIRC๋ BLAS ํธํ์ฑ ๋ ์ด์ด ์ธ๋ถ์ ์ ์ญ ๊ตฌ์ฑ์ด ์ ํ ์๊ธฐ ๋๋ฌธ์ ๊ทธ๋ ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ ๋ ์ค์ ๋ก ์์ ํ๋ ฌ์ ์ฑ๋ฅ์ด OpenBLAS์ ์ฝ์ ์ค ํ๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ฐ๋ผ์ BLIS๊ฐ ๋ค์ ๋๋ ค์ง๋ค๋ฉด ์ฝ๊ฐ ๊ฑฑ์ ์ด๋ฉ๋๋ค. ์ฌ๋๋ค์ ๋ชจ๋ ์ํฉ์์ numpy๋ฅผ ํ์คํ ์ฌ์ฉํ๋ฏ๋ก "๊ทธ๋ฅ ํน์ ๊ฒฝ์ฐ์ ๋ง๊ฒ ์กฐ์ ํ ํ์๊ฐ ์์ต๋๋ค.
๋๋ ๊ทธ๊ฒ์ด "๊ทธ๋ฅ ์๋ํ๊ธฐ"๋ฅผ ๋ฐ๋ผ๋ ๊ฒ์ ์ดํดํ๋ค. ๊ทธ๋ฌ๋ ๋๋ ๋น์ ์๊ฒ ํ์ค์ ์ด๊ณ ์ ์งํ๊ฒํ๋ ค๊ณ ๋ ธ๋ ฅํ๊ณ ์๋ค. 3x3 ๋ฌธ์ ๊ฐ ์๊ณ ์ฑ๋ฅ์ด ์ ๋ง ์ค์ํ๋ค๋ฉด BLIS๋ฅผ ์ฌ์ฉํ์ง ์์์ผ ํ ๊ฒ์ ๋๋ค. BLIS๊ฐ 3x3์ ์์งํ ํธ๋ฆฌํ ๋ฃจํ๋ณด๋ค 10 ๋ฐฐ ๋๋ฆฌ๊ฒ ์คํ๋๋ค๋ ๋ง์ด ์๋๋๋ค. BLIS์ ๊ตฌํ์ด ๋ฐ์ด๋ ๋ฌธ์ ํฌ๊ธฐ๊ฐ ์๋๋ผ๋ ๊ฒ์ ๋๋ค.
์์ ๋ฌธ์ ์ ๋ํด OpenBLAS์ ๋ค์ ๋ถ๋ง์กฑ ํ์ ๋ค๋ ๋ง์ ๋ฃ๊ณ ๋๋์ต๋๋ค. ๋น์ ์ ๊ธฐ์ค์ ์ ๋ฌด์์ ๋๊น? ํฐ ๋ฌธ์ ๋ณด๋ค ์ฑ๋ฅ์ด ๋ฎ๋ค๋ ๊ฒ๋ฟ์ ๋๊น? ์์ ๋ฌธ์ ์ ๋ํด ๊ฐ๋ฅํ ์ต๊ณ ์ ์ฑ๋ฅ์ ์ป์ผ๋ ค๋ฉด ํฐ ๋ฌธ์ ์๋ ๋ค๋ฅธ ์ ๋ต์ด ํ์ํฉ๋๋ค. ์ด๊ฒ์ด ๋๋ถ๋ถ์ ํ๋ก์ ํธ๊ฐ ๋ ์ค ํ๋๋ฅผ ๋์์ผ๋ก ํ ๋ค์ ๋์์ด ์๋ ๊ฒฝ์ฐ๋ฅผ ์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ์ด์ ์ ๋๋ค.
์ด๋ค ๊ฒฝ์ฐ์๋ ์ด๊ฒ์ ์ ์ ํ๊ฒ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ๋๋ฌด ์์ ๋ฌธ์ ๊ฐ ์์์ ์ธ์ํ๊ณ ์ค๋ ๋ฉ์ ์์ ํ ๊ฑด๋ ๋ฐ๋ ๋ฌธ์ ์ผ ์ ์์ต๋๋ค. 3x3 gemm์ ๊ฒฝ์ฐ ์ต์ ์ ๋ฐฉ๋ฒ์ ๊ฐ๋ฅํ ํ ์ด๋ฆฌ์์ ๊ฒ์ ๋๋ค.
์ปท์คํ๊ฐ ์ด์์ ์ด๋ผ๋ ๋ฐ ๋์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ ์ปท์คํ๊ฐ ์ด๋์ ์์ด์ผํ๋์ง ๊ฒฐ์ ํ๋ ๊ฒ์ ์ฌ์ํ ์ผ์ด ์๋๋ฉฐ ๊ฐ์ฅ ํ์คํ๊ฒ ์ํคํ ์ฒ (๋ฐ ๋ ๋ฒจ 3 ์ด์ ์ ๋ฐ)์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. ๊ทธ๋์ ๊ทธ๊ฒ์ ๋งค์ฐ ๊ฐ๋ฅํ์ง๋ง ์์ง ๊ตฌํ๋์ง ์์๊ฑฐ๋ ์ ๊ณ ๋ ค๋์ง ์์์ต๋๋ค.
ํ์ง๋ง ์ด๋ฌํ ์ข ๋ฅ์ ์กฐ์ (๋๋ ์ค๋ ๋ ํ ๋ ์ค๋ ๋ ํ ์์)์ BLIS๊ฐ ๊ด๋ฒ์ํ๊ฒ ๋ฐฐํฌ๋๊ธฐ ์์ํ๋ฉด ์ปค๋ฎค๋ํฐ๊ฐ ๋ฐ์ด ๋ค๊ณ ์ํ ํ ์์ ์ผ ์ ์์ต๋๋ค.
์.
์ฌ์ค ์ ๋ฅผ ์๊ธฐ์์ผ์ค๋๋ค. ์ ๋ ์ง๋์ฃผ์ ์์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๋ ๋์ ์์ค์ ์ค๋ ๋ฉ์ ๊ด๋ฆฌํ๊ณ ์์๊ธฐ ๋๋ฌธ์ gemm ๋จ์ผ ์ค๋ ๋๋ฅผ ํธ์ถํ๊ธฐ๋ฅผ ์ํ๋ค๋ ๊ฒ์ ์๊ณ ์๋ ๋๊ตฐ๊ฐ์ ์ด์ผ๊ธฐํ์ต๋๋ค. ๊ทธ๋ ํ์ค blas ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ๋๋ค. ์ ์ด๋ ์์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ด๋ถ์์ ํธ์ถํ๊ธฐ ์ฌ์ด ์ ์ญ ์ค์ ์ ํตํด ์ด๋ฃจ์ด์ง๋๋ค.
๋ฉํฐ ์ค๋ ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์์ฐจ gemm
๋ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ์ข์ํ๋ ์ฌ์ฉ ์ฌ๋ก ์ค ํ๋์
๋๋ค. (์๋ฆผ : ์์ฐจ gemm
๋ง ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ฉํฐ ์ค๋ ๋ฉ์ ๋นํ์ฑํ ํ ์ํ๋ก BLIS๋ฅผ ๊ตฌ์ฑ ํ ์ ์์ต๋๋ค.ํ์ง๋ง ํ ๋ฒ ๋น๋ํ๊ณ ๋์ค์ ์ค๋ ๋ฉ์ ๊ฒฐ์ ํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.)
BLIS์ ๋ค์ดํฐ๋ธ API๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์๊ฐ ํธ์ถ ๋จ์๋ก ์ค๋ ๋ ๊ตฌ์ฑ์ ์ ์ด ํ ์ ์์ต๋๊น? IIRC๋ BLAS ํธํ์ฑ ๋ ์ด์ด ์ธ๋ถ์ ์ ์ญ ๊ตฌ์ฑ์ด ์ ํ ์๊ธฐ ๋๋ฌธ์ ๊ทธ๋ ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ฉํฐ ์ค๋ ๋ฉ์ด ํ์ฑํ ๋ ์ํ์์ BLIS๋ฅผ ๊ตฌ์ฑํ๋๋ผ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ ๋นํ์ฑํ๋ฉ๋๋ค (ํ๋์ ์ค๋ ๋). ์ด๊ฒ์ด ๊ทธ๊ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์์๋ ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ ๋ฐํ์์ ๋ณ๋ ฌ ์ฒ๋ฆฌ ์ ๋๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. BLIS์ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ ๋ฐํ์์ ์ค์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฌ์ ํ BLIS ๋ด๋ถ์ ์ผ๋ก setenv()
๋ฐ getenv()
๋ฅผ ํตํด ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํ๊ณ ์ฝ๋ ์์
์ด ํฌํจ๋ฉ๋๋ค. (์์ธํ ๋ด์ฉ์ ๋ฉํฐ ์ค๋ ๋ฉ ์ํค ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.) ๊ทธ๋์ ๊ทธ๊ฒ์ด ๋น์ ์ ์น๊ตฌ์๊ฒ ๊ฑฐ๋๋ฅผ ๋ฐฉํดํ๋์ง ํ์ ํ์ง ๋ชปํฉ๋๋ค. ์ค๋ ๋ฉ์๋ณด๋ค ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์ (ํ๊ฒฝ ๋ณ์๋ฅผ ํฌํจํ์ง ์์)์ผ๋ก ์ง์ ํ ์์๋ API๋ฅผ ๊ตฌํํ๊ณ ์ถ์ง๋ง ์์ง ๊ทธ ์ ๋๋ ์๋๋๋ค. ๋๋ถ๋ถ์ ์ธํฐํ์ด์ค์ ๊ดํ ๊ฒ์
๋๋ค. ์ธํ๋ผ๊ฐ ๋ชจ๋ ์ ์๋ฆฌ์ ์์ต๋๋ค. ๋ฌธ์ ์ ์ผ๋ถ๋ ์ฐ๋ฆฌ ๋ชจ๋๊ฐ ๋ณ๋ ฌํ ํ ๋ ํ๋์ ์ซ์๋ฅผ ์ง์ ํ๋๋ก ์๋
์ ๊ฑธ์ณ (์ : OMP_NUM_THREADS
๋ฑ) ๊ต์ก์ ๋ฐ์์ผ๋ฉฐ, ์ด๋ BLIS๊ฐ ์ ํธํ๋ ์ ๋ณด๋ฅผ ์ง๋์น๊ฒ ๋จ์ํ ํ ๊ฒ์
๋๋ค. gemm
์๊ณ ๋ฆฌ์ฆ์๋ 5 ๊ฐ์ ๋ฃจํ๊ฐ ์์ผ๋ฉฐ ๊ทธ์ค 4 ๊ฐ๋ ๋ณ๋ ฌํ ๋ ์ ์์ต๋๋ค (ํฅํ 5 ๊ฐ). ํ๋์ ์ซ์๋ก ์ถ์ธก ํ ์ ์์ง๋ง ํ๋์จ์ด ํ ํด๋ก์ง์ ๋ฐ๋ผ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก ์ด์์ ์ด์ง ์์ต๋๋ค. ์ด๊ฒ์ด์ด ์ ์ ์์ ์งํ์ ๋ฐฉํดํ๋ ๋ถ๋ถ์ ์ผ๋ถ์
๋๋ค.
@devinamatthews ๊ฐ์ ๋งฅ๋ฝ์์ TBLIS๋ฅผ ์ถ๊ฐ ํ ๊ธฐํ๊ฐ ์์ต๋๊น?
3x3 ๋ฌธ์ ๊ฐ ์๊ณ ์ฑ๋ฅ์ด ์ ๋ง ์ค์ํ๋ค๋ฉด BLIS๋ฅผ ์ฌ์ฉํ์ง ์์์ผ ํ ๊ฒ์ ๋๋ค. BLIS๊ฐ 3x3์ ์์งํ ํธ๋ฆฌํ ๋ฃจํ๋ณด๋ค 10 ๋ฐฐ ๋๋ฆฌ๊ฒ ์คํ๋๋ค๋ ๋ง์ด ์๋๋๋ค. BLIS์ ๊ตฌํ์ด ๋ฐ์ด๋ ๋ฌธ์ ํฌ๊ธฐ๊ฐ ์๋๋ผ๋ ๊ฒ์ ๋๋ค.
3x3 ๋ฌธ์ ์ ๋ํด ์ต์ ์ ์ฑ๋ฅ์ ์ป๋ ๊ฒ์ ๋ํด ๊ทธ๋ค์ง ๊ฑฑ์ ํ์ง ์์ต๋๋ค (๋ฌผ๋ก ์ป์ ์ ์๋ค๋ฉด ์ข๊ฒ ์ง ๋ง!). ๊ทธ๋ฌ๋ ๊ทน๋จ์ ์ธ ์๋ฅผ ๋ค์๋ฉด : numpy๊ฐ ๊ธฐ๋ณธ ์ ํ ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก BLIS๋ก ์ปดํ์ผ๋๊ณ ์ผ๋ถ ์ฌ์ฉ์๊ฐ numpy๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋์ a @ b
๋ฅผ ์์ฑํ๋ฉด 10 ๋ฐฐ ๋๋ฆฌ๊ฒ ์คํ๋์ง ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ์์งํ ๊ตฌํ๋ณด๋ค. ์ฌ์ฉ์๊ฐ 3x3 ํ๋ ฌ์ ๋ค์คํํ๊ธฐ ์ ์ numpy๋ฅผ ๋ค์ ๋น๋ํ๊ธฐ๋ฅผ ๊ธฐ๋ํ๋ ๊ฒ์ ๋๋ฌด ๋ง์ ์ง๋ฌธ์
๋๋ค. :-). ํนํ ํ ๊ณณ์์ 3x3 ํ๋ ฌ์ ๊ณฑํ๋ ๋์ผํ ํ๋ก๊ทธ๋จ์ด ๋ค๋ฅธ ๊ณณ์์๋ 1000x1000 ํ๋ ฌ์ ๊ณฑํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
์๋ฆผ : ์์ฐจ gemm์ด ์ ์ผํ ์ฌ์ฉ ์ฌ๋ก ์ธ ๊ฒฝ์ฐ, ๊ทธ๋ ๋ฉํฐ ์ค๋ ๋ฉ์ ๋นํ์ฑํ ํ ์ํ์์ BLIS๋ฅผ ๊ตฌ์ฑ ํ ์ ์์ต๋๋ค. ํ์ง๋ง ํ ๋ฒ ๋น๋ํ๊ณ ๋์ค์ ์ค๋ ๋ฉ์ ๊ฒฐ์ ํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
๊ทธ๋ Python ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐฐ์กํ๊ณ ์์ต๋๋ค. ๊ทธ๋ ์ฌ์ฉ์๊ฐ ์์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ ์์ ๋์ผํ ํ๋ก์ธ์ค์์ ํจ๊ป ์คํ๋๋ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ์์ฒด ์ฝ๋์ ๊ฒฐํฉ ํ ๊ฒ์ผ๋ก ๊ธฐ๋ํฉ๋๋ค. ๊ทธ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ GEMM์ ์ฌ์ฉํ๋ฉฐ, ๊ทธ๊ฐ ์ ์ดํ์ง ์๊ฑฐ๋ ์ฌ์ง์ด ์๊ณ ์๋ ๋ค๋ฅธ ์ฝ๋ ์ค ์ผ๋ถ๋ GEMM์ ์ฌ์ฉํ๊ธฐ๋ฅผ ์ํ ๊ฒ์
๋๋ค. ๊ทธ๋ ๋์ผํ ํ๋ก์ธ์ค์์ ๋ฐ์ํ ์์๋ GEMM์ ๋ํ ๋ค๋ฅธ ๊ด๋ จ์๋ ํธ์ถ์ ์ฐ์ฐํ ์ํฅ์์ฃผ์ง ์๊ณ GEMM์ ๋ํ ํธ์ถ์ ๋ํ ์ค๋ ๋ฉ์ ์ ์ด ํ ์ ์๊ธฐ๋ฅผ ์ํฉ๋๋ค. ์ด์์ ์ผ๋ก๋ GEMM ์ฌ๋ณธ์ ์ง์ ๋ฐฐ์กํ์ง ์๊ณ ๋์ด ์์
์ ์ํ ํ ์ ์์ต๋๋ค. ์ ๋๋ก ์ํํ๋ ๊ฒ์ ๋งค์ฐ ์ฑ ๊ฐ์๊ณ , ํ๋ก๊ทธ๋จ์ ๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฌ๋ณธ ๋ ๊ฐ๋ฅผ ํฌํจํด์ผํ๋ค๋ ๊ฒ์ ๊ฐ๋
์ ์ผ๋ก ๋ชจ์์ ์
๋๋ค. ๋ฐ๋ผ์ ๋จ์ผ ์ ์ ๋ณ์ number_of_threads
๋ ๋ณต์ฌ๋ณธ์ ์ป์ ์ ์์ต๋๋ค. ๊ทธ๊ฒ ๋ ๋ง์ด ๋๋์?
์์งํ ๊ตฌํ๋ณด๋ค 10 ๋ฐฐ ๋๋ฆฌ๊ฒ ์คํ๋์ง ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ด์ ์๊ฐํด ๋ณด๋ฉด ๋งค์ฐ ์์ (3x3) ๋ฌธ์ ์ ๋ํด ์์งํ ๊ฒ๋ณด๋ค ๋ช ๋ฐฐ ๋๋ฆฌ๋ค๊ณ ํด๋ ๋๋ผ์ง ์์ ๊ฒ์
๋๋ค.ํ์ง๋ง ํฌ๋ก์ค ์ค๋ฒ ํฌ์ธํธ๋ 16x16๋งํผ ์์ ์๋ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ๋ฐ์ฐฝ๊ณ ๋ฅผ ๋ถ์ด๊ธฐ ์ฌ์ด ๋ฌธ์ ์
๋๋ค. (๋ชจ๋ ๋ ๋ฒจ 3 ์์
์ ๋ํด ์ํํ๊ณ ์ถ์ต๋๋ค.)
๊ทธ๋ Python ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐฐ์กํ๊ณ ์์ต๋๋ค. ๊ทธ๋ ์ฌ์ฉ์๊ฐ ์์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ ์์ ๋์ผํ ํ๋ก์ธ์ค์์ ํจ๊ป ์คํ๋๋ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ์์ฒด ์ฝ๋์ ๊ฒฐํฉ ํ ๊ฒ์ผ๋ก ๊ธฐ๋ํฉ๋๋ค. ๊ทธ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ GEMM์ ์ฌ์ฉํ๋ฉฐ, ๊ทธ๊ฐ ์ ์ดํ์ง ์๊ฑฐ๋ ์ฌ์ง์ด ์๊ณ ์๋ ๋ค๋ฅธ ์ฝ๋ ์ค ์ผ๋ถ๋ GEMM์ ์ฌ์ฉํ๊ธฐ๋ฅผ ์ํ ๊ฒ์ ๋๋ค. ๊ทธ๋ ๋์ผํ ํ๋ก์ธ์ค์์ ๋ฐ์ํ ์์๋ GEMM์ ๋ํ ๋ค๋ฅธ ๊ด๋ จ์๋ ํธ์ถ์ ์ฐ์ฐํ ์ํฅ์์ฃผ์ง ์๊ณ GEMM์ ๋ํ ํธ์ถ์ ๋ํ ์ค๋ ๋ฉ์ ์ ์ด ํ ์ ์๊ธฐ๋ฅผ ์ํฉ๋๋ค. ์ด์์ ์ผ๋ก๋ GEMM ์ฌ๋ณธ์ ์ง์ ๋ฐฐ์กํ์ง ์๊ณ ๋์ด ์์ ์ ์ํ ํ ์ ์์ต๋๋ค. ์ ๋๋ก ์ํํ๋ ๊ฒ์ ๋งค์ฐ ์ฑ ๊ฐ์๊ณ , ํ๋ก๊ทธ๋จ์ ๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฌ๋ณธ ๋ ๊ฐ๋ฅผ ํฌํจํด์ผํ๋ค๋ ๊ฒ์ ๊ฐ๋ ์ ์ผ๋ก ๋ชจ์์ ์ ๋๋ค. ๋ฐ๋ผ์ ๋จ์ผ ์ ์ ๋ณ์ number_of_threads์ ๋ ๋ณต์ฌ๋ณธ์ ์ป์ ์ ์์ต๋๋ค. ๊ทธ๊ฒ ๋ ๋ง์ด ๋๋์?
๋ค, ๋์์ด๋์์ต๋๋ค. ์ธ๋ถ ์ฌํญ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๊ทธ๋ ์์ง ์กด์ฌํ์ง ์๋ ์ค๋ ๋ฉ API์ ๋ํ ์๋ฒฝํ ํ๋ณด๊ฐ ๋ ๊ฒ ๊ฐ์ต๋๋ค. (๊ฐ์ธ์ ์ผ๋ก๋ ํ๊ฒฝ ๋ณ์ ๊ท์น์ ๊ฒฝ๊ณ์ ์ ๋ฏธ์น ์ง ํ๋ ๊ฐ ์ด์์ ๊ฒฝ์ฐ์ ๋ด ํ๋ ฅ์์ ๋ด ๊ฐ์ ์ ํํํ๋ค ์๊ฐํฉ๋๋ค. ๊ทธ ๋ง์ HPC ์ฌ์ฉ์ / benchmarkers์ ๋์ ํ๋ฒ ๋ฒค ๋ฉด์ ์ ์คํ๋ ค ํธ๋ฆฌํ๋ค, ์ฐ๋ฆฌ๊ฐ ๊ฐ๋คํด์ผํ๋ฏ๋ก ํ๊ฒฝ ๋ณ์ ์ฌ์ฉ์ ๋ฐฐ์ ํ์ง ์๋ ์ ์ ํ ๋ฐํ์ API๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋๊ฐ ๋ง์กฑํ ์ ์๋๋กํฉ๋๋ค.)
์ด๊ฒ์ด ํ์คํ ์ฐ๋ฆฌ์ ๋ ์ด๋์ ์๋ค๋ ๊ฒ์ ๊ทธ์๊ฒ ์ ๋ฌ ํ์๊ฒ ์ต๋๊น? ๋๋ ๋ก๋ฒํธ์ ํจ๊ป ๋ชจ์ด๊ฒ ์ต๋๋ค. ๊ทธ๋ ๋ด๊ฐ์ด ์ผ์ ์๊ฐ์ ๋ณด๋ด๋ ๊ฒ์ ์กฐ๋ง๊ฐ ์น์ธ ํ ๋งํผ ์ถฉ๋ถํ ๊ด์ฌ์ด์์ ๊ฒ์ ๋๋ค. (์ค๋ ๋ฉ API๋ ํ๋์ ๊ทธ์ ์์๋ฆฌ์คํธ์์์์ต๋๋ค.)
MSVC ABI๋ฅผ ๋์์ผ๋กํ๋ clang.exe๋ฅผ ์ฌ์ฉํ์ฌ Windows์ BLIS๋ฅผ ๋น๋ํ๋ ๊ฒ์ ํ์คํ ๊ฐ๋ฅํฉ๋๋ค. ๋ช ์๊ฐ์ ๋ณด๋๊ณ ์ฌ๊ธฐ ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ต๋๋ค. ํ์ํ ๋ณ๊ฒฝ ํ์๋ OpenBLAS์ ๋นํด ๋๋๋๋ก ์ ์์ต๋๋ค.
๋ก๊ทธ๋ ์ฌ๊ธฐ์ ์์ต๋๋ค . ๋ชจ๋ BLIS ๋ฐ BLAS ํ
์คํธ๋ฅผ ํต๊ณผํฉ๋๋ค.
@isuruf ์๊ฐ์๋ด์ด
ํ ๋ฆฌํ์คํธ์ ๊ดํด์๋ ๋ช ๊ฐ์ง ์ฝ๋ฉํธ / ์์ฒญ (๋ชจ๋ ์์ฃผ ์ฌ์ํ)์ด ์์ง๋ง ํ ๋ฆฌํ์คํธ ์์ฒด์ ๋ํ ๋ํ๋ฅผ ์์ํ๊ฒ ์ต๋๋ค.
์ถ์ : f2c
์ค๋ฅ๋ฅผ ์์๋ผ ์์์ด์ ๋คํ์
๋๋ค. libf2c์ ์ถฉ๋ถํ ๋ถ๋ถ์ BLAS ํ
์คํธ ๋๋ผ์ด๋ฒ ์์ค ( libf2c.a
๋ก ์ปดํ์ผ ๋จ)๋ก ๊ฐ์ ธ ์์ ๋งํฌ๋ฅผ ๋ง๋ค ์ ์๋๋กํ์ต๋๋ค. ๋น๋ก ํค๋ ํ์ผ์ ์ฝ๊ฐ์ ํด์ปค๊ฐ ํ์ํ์ต๋๋ค. (์ ๋ Fortran ์ฝ๋๋ฅผ ์ ์งํ๋ ๊ฒ์ ์ข์ํ์ง ์์ต๋๋ค. Fortran๋ณด๋ค f2c'ed C๋ฅผ ๋ณด๋ ๊ฒ์ด ๋ซ์ต๋๋ค.
์ธํ MKL 2018.3 :
Dotted two 4096x4096 matrices in 2.09 s.
Dotted two vectors of length 524288 in 0.23 ms.
SVD of a 2048x1024 matrix in 1.11 s.
Cholesky decomposition of a 2048x2048 matrix in 0.19 s.
Eigendecomposition of a 2048x2048 matrix in 7.83 s.
์์์ ์ฌ์ฉ ๋ ๋ฒค์น ๋งํฌ์ ๋ํ ๋จ์ด. Robert๋์ด ๋ฒค์น ๋งํฌ (๋๋ numpy?)๊ฐ Cholesky, EVD ๋ฐ SVD๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์์ง ๋ชปํ๋ค๋ฉด ํด๋น ์์
์ ๊ฒฐ๊ณผ๊ฐ ๊ทธ๋ค์ง ์๋ฏธ๊ฐ ์์ ๊ฒ์์ ์๊ธฐ ์์ผฐ์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ด๋ ์คํค ๋ถํด์ netlib LAPACK ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ฉด ์๊ณ ๋ฆฌ์ฆ ๋ธ๋ก ํฌ๊ธฐ๊ฐ ์๋ชป๋ฉ๋๋ค (์ด์์ ์ธ ๊ฒ๊ณผ๋ ๊ฑฐ๋ฆฌ๊ฐ ๋ฉ์ด์ง). ๋ํ MKL์ ๋ํ numpy ๋งํฌ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ MKL์๋ ๋น ๋ฅธ gemm
์ธ์๋ ์์ฒด Cholesky ์ธ์ ๋ถํด ๊ตฌํ์ด ์๊ธฐ ๋๋ฌธ์ ์ํฉ์ด ๋ ์๊ณก ๋ ์ ์์ผ๋ฏ๋ก ๋น๊ตํ ๋ ์ฌ๊ณผ ๋ ์ฌ๊ณผ๊ฐ ์๋ ์๋ ์์ต๋๋ค. MKL.
๋๋ ๋น์ ์ด ๋จ์ํ ์ฑ๋ฅ์ ๋ํ ์ผ๋ฐ์ ์ธ ์์ด๋์ด๋ฅผ ์ป๊ธฐ ์ํด ๊ทธ๊ฒ์ ์ฌ์ฉํ์ ์๋ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ผ๋ฉฐ, ๊ด์ฐฎ์ต๋๋ค. ์์ฃผ ๊ทผ์ฌํ ๋น๊ต๋ฅผ ์ํด ๊ทธ๊ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ ํ์ฉํ์ง ์๋ ์ธ๋ถ ์ฌํญ์ ์ ๋ง๊ฐ ์จ์ด์์ ์ ์์์ ์ดํดํ์ญ์์ค.
์ผ๋ฐ์ ์ผ๋ก numpy๋ ์ฌ์ฉ ๊ฐ๋ฅํ LAPACK ๋๋ LAPACK ์ ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด ์ด์ ๊ฐ์ ์์ ์ ์ฐ๊ธฐํฉ๋๋ค. MKL ๋น๋๋ ์ธํ ์ด MKL ๋ด๋ถ์ ์ ๊ณตํ๋ LAPACK์ ํ๋ ๋ ํฌํฌ๋ฅผ ๊ฑฐ์ ํ์คํ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. BLIS ๋น๋๋ ์๋ง๋ ์ฐธ์กฐ LAPACK ๋๋ ์ด์ ์ ์ฌํ ๊ฒ์ ์ฌ์ฉํ๊ณ ์์ ๊ฒ์ ๋๋ค.
์ด๋ค ์๋ฏธ์์ ์ด๊ฒ์ ๊ณต์ ํฉ๋๋ค. ๋น ๋ฅธ SVD๋ฅผ ์ํํ๊ธฐ ์ํด numpy ๊ตฌ์ฑ์ ์ ํํ๋ ค๋ ๊ฒฝ์ฐ MKL์ ์ฌ์ฉ ๊ฐ๋ฅํ ์กฐ์ ๋ ๋ฒ์ ์ด ์๊ณ BLIS์๋์๋ ๊ฒ์ด ๊ด๋ จ์ด ์์ต๋๋ค. (์ ๋ OpenBLAS๊ฐ ๊ทธ ์ฌ์ด์ ์๋ค๊ณ ๋ฏฟ์ต๋๋ค. ๊ทธ๋ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ๊ป LAPACK์ ์์ ๋ ๋ฒ์ ์ ์ ๊ณตํ์ง๋ง MKL ๋ฒ์ ๋ณด๋ค ์ฐธ์กฐ ๊ตฌํ์ ํจ์ฌ ๋ ๊ฐ๊น์ต๋๋ค.)ํ์ง๋ง BLIS๊ฐ ๋ฌด์์ธ์ง, ์ ๊ทธ ์ด์ ๋ฅผ ์ดํดํ๋ ค๊ณ ํ๋ค๋ฉด ๊ฒฐ๊ณผ๋ ์ด์ ๊ฐ์ด ๋ณด์ ๋๋ค. ์์ํ GEMM ํจ์จ์ฑ๋ณด๋ค SVD / ๋ฑ์ ๋ ๋ง์ ๊ฒ์ด ์๋ค๋ ๊ฒ์ ๊ธฐ์ตํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์ด๋ค ์๋ฏธ์์ ์ด๊ฒ์ ๊ณต์ ํฉ๋๋ค.
๋๋ ์ดํดํ๊ณ ๋์ํ๋ค. ์ผ๋ถ ์ฌ๋๋ค์ ์ด์ ์ ์ ์ ๋ ๊ฒ๊ณผ ๊ฐ์ ๋ฒค์น ๋งํฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋จ์ผ ํ๋์จ์ด์์ ์ ๋ ์ฑ๋ฅ์ ์ธก์ ํ๊ณ (์ฆ, ๊ตฌํ์ด ์ต๊ณ ์ฑ๋ฅ์ ๋นํด ์ผ๋ง๋ ์ข์์ง ํ๋จํ๊ธฐ ์ํด),์ด๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํ์ ๋น๊ตํ๋ค๋ ์ฌ์ค๋ก ์ธํด ๋ณต์กํฉ๋๋ค. ๋๋ ๋ก๋ฒํธ์ Cholesky et al. ํ์๋ณด๋ค ์ ์๋ฅผ ๋ ๋ง์ด ๊ฒจ๋ฅํฉ๋๋ค.
@njsmith @insertinterestingnamehere @rgommers @charris Isuru ์ ๋น ๋ฅธ ์์
๋๋ถ์ ์ฐ๋ฆฌ๋ ๊ทธ์ Appveyor ๊ธฐ๋ฐ Windows ์ง์์ BLIS์ master
๋ธ๋์น๋ก ๊ตฌ์ฒดํํ๊ณ ๋ณํฉ ํ ์์์์ต๋๋ค. ์ด ๋ฌธ์ ๊ฐ numpy์ ๋ํ Windows ์ง์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋์ง ์ฌ๋ถ์ ์ ๋๋ฅผ ์๋ ค์ฃผ์ญ์์ค.
@fgvanzee PR์ ์ฐ๊ฒฐํ ์ ์์ต๋๊น?
PR์ ์ฐ๊ฒฐํ ์ ์์ต๋๊น?
๋ค, ์ฌ๊ธฐ ์์ต๋๋ค.
์ด๊ธฐ ๋น๋ ์ค์ ์ ํ๋ฅญํฉ๋๋ค! ์ ์ด๋ ์ด๋ก ์์ผ๋ก๋ Windows์์ BLIS๋ก numpy๋ฅผ ๋น๋ํ๋ ๊ฒ์ผ๋ก ์ถฉ๋ถํด์ผํฉ๋๋ค. dll ๋น๋ ๋๋ MinGW ์ง์๊ณผ ๊ฐ์ ๊ฒ์ ๋์ค์ ์ถ๊ฐ ํ ์ ์์ต๋๋ค.
์ด ๊ฒฝ์ฐ ์ฌ์ฉ๋๋ ์ข ์์ฑ์ ๋ํด์ฃผ์ํด์ผ ํ ์ฌํญ : pthreads-win32๋ LGPL์ ๋๋ค. ๊ทธ๋๋ ๊ทธ๊ฒ์ ๋ํด ๋ฌด์์ํด์ผํ๋์ง IDK.
๋ผ์ด์ ์ค๋ ์ด๋ ค์ด ๋ฌธ์ ์ ๋๋ค. ๋๋ ๋ฒ์ ์ ์ฑ ์ผ๋ก ์ธํด LGPL๊ณผ ๊ฐ์ "์นดํผ ๋ ํํธ"๋ผ์ด์ผ์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ด๋ ต์ง๋ง "ํ์ฉ"๋ผ์ด์ผ์ค๋ ๋ฌธ์ ๊ฐ๋์ง ์๋ ๋ช๋ช ๋๊ธฐ์ ์ ์๊ณ ์์ต๋๋ค. NumPy / SciPy ์ฝ๋๋ฒ ์ด์ค ๋๋ ํ ์ LGPL ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ์ ๋นํ๊ฑด ์๋๊ฑด ํ์คํ ์ฐ๋ ค์ ์์ธ์ด ๋ ๊ฒ์ ๋๋ค.
์ฌ๊ธฐ์ ์ฝ๋๋ฒ ์ด์ค์ ์ถ๊ฐํ์ง ์์ต๋๋ค. LGPL ๋ถํ์ ๋ฐํด๋ก ์ด์กํ๋ ๊ฒ์ ๋ฌธ์ ๊ฐ๋์ง ์์ต๋๋ค. ์ด์ ๋ฐํ์ ์์ธ๊ฐ์๋ GPL ์ธ gfortran dll์ ์ ๊ณตํ๊ณ ์์ต๋๋ค. gh-8689 ์ฐธ์กฐ
๊ณผ์ฐ. ๋ํ ๊ทธ๋ฌํ ํ์ฌ๊ฐ MKL์ ์ ํธํ๋๋ผ๋ ๋๋ผ์ง ์์ ๊ฒ์ ๋๋ค.
LGPL ๊ตฌ์ฑ ์์๊ฐ ์ ์ ์ผ๋ก ๋งํฌ๋์ง ์์๋์ง ํ์ธํ๋ฉด๋ฉ๋๋ค.
@jakirkham ๊ทํ์ ์๊ฒฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ค๋ ๋ ํ์ด์๋ ๊ฒ์ผ๋ก ๊ด์ฐฐ ๋ ๋น์ฉ์ ์ ๋ฌํ๋ ํ๋ ฌ ํผ์ฐ์ฐ์์ ํฌ๊ธฐ์ ์ํ์ค์ธ ์์ ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. gemm์ด ๋น์ ์ด ๋ชฉํ๋ก ์ผ๋ ์ ํ์ ์ธ ์์ ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง (๋ด๊ฐ ํ๋ ธ๋ค๋ฉด ์์ ํ์ญ์์ค), ์ด๋ค ๋ฌธ์ ํฌ๊ธฐ๊ฐ ์ ํ์ ์ธ ๊ฒ์ผ๋ก ๊ฐ์ฃผํฉ๋๊น? BLIS์ create / join ๋ชจ๋ธ์ ๋น์ฉ์ A, B, C๊ฐ 40x40 ์ธ ํ๋ ฌ ๊ณฑ์ ์ ๋ฐ๋ณต์ ์ผ๋ก ์ํํ๋ ๊ฒฝ์ฐ ๋ํ๋ ์ ์์ง๋ง 400x400 ์ด์์์๋ ๊ทธ๋ค์ง ๋ง์ง ์์ ๊ฒ์ ๋๋ค. (TBH, 40x40 ๋ฌธ์ ๋ฅผ ๋ณ๋ ฌํํจ์ผ๋ก์จ ์์๋๋ ์๋ ํฅ์์ ๊ธฐ ๋ํด์๋ ์๋ฉ๋๋ค.)
์ฃผ๋ก GEMM๊ณผ SYRK๊ฐ ์ผ๋ฐ์ ์ ๋๋ค. GEMV๊ฐ ๊ฐ๋ ๋์ค์ง๋ง ๊ฐ๋ฅํ๋ฉด ํฐ GEMM ์์ ์ผ๋ก ํตํฉ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
์ ์ด๋ 10 ^ 6 ์์์ ์ฐจ์ ์ธ 1 ์ฐจ์์ ๊ฐ๋ ๊ฒ์ ์ฐ๋ฆฌ์๊ฒ ๋น์ ํ์ด ์๋๋๋ค. ๋ค๋ฅธ ํ๋๋ 10 ^ 3์์ 10 ^ 6๊น์ง์ ๋๋ค. ๊ทธ๋์ ๊ทธ๊ฒ์ ์๋นํ ๋ค๋ฆ ๋๋ค. ์ค๋ ๋ ํ์ ์ฌ์ฉํ๊ธฐ ์ํดํด์ผ โโํ ์ผ์ด ์์ต๋๊น, ์๋๋ฉด ์๋์ผ๋ก ๋ฐ์ํฉ๋๊น? ๋ํ ํ๋ก์ธ์ค๊ฐ ๋ถ๊ธฐ๋๋ฉด ์ค๋ ๋ ํ์ด ์ด๋ป๊ฒ ์๋ํฉ๋๊น?
๋ค๋ฅธ ์ ์์ BLIS๋ ๋์ ์ํคํ ์ฒ ๊ฐ์ง๋ฅผ ์ฒ๋ฆฌํฉ๋๊น? ์ด๊ฒ์ ํ ๋ฒ ๋น๋ํ๊ณ ๋ค์ํ ๋ค๋ฅธ ์์คํ ์ ๋ฐฐํฌ ํ ์์๋ ์ํฐํฉํธ๋ฅผ ๋น๋ํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
์. ์ด ๊ธฐ๋ฅ์ ์ผ๋ง ์ ์ธ 2017 ๋ ํ๋ฐ๊ธฐ์ ๊ตฌํ๋์์ต๋๋ค. BLIS๋ ์ด์ ์ผ๋ถ ํด๋ฆฌ์คํฑ (์ : cpuid ๋ช ๋ น)์ ํตํด ๋ฐํ์์ ์ ํ๋๋ ํน์ ํ์ ๊ตฌ์ฑ์ ์ฌ์ฉํ์ฌ ์์ "๊ตฌ์ฑ ์ ํ๊ตฐ"์ ๋์์ผ๋ก ํ ์ ์์ต๋๋ค. ์ง์๋๋ ์ ํ๊ตฐ์ ์๋ intel64, amd64, x86_64์ ๋๋ค.
์ด์ ๋ํด ์ฝ๊ฐ์ ๋จธ๋ฆฌ๋ง์ ๋ถ์ด๊ธฐ ์ํด Broadwell์ ํตํด Nehalem์ ์ฌ์ฉํ๋ ์ค๋๋ ์ปดํจํฐ๊ฐ ์์ต๋๋ค. ์๋ก์ด ๊ฐ์ธ์ฉ ์ปดํจํฐ์๋ Kaby Lake๊ฐ์์ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ง์๋์ง ์๋ ๋ด์ฅ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ ๋ ์ปดํจํฐ์์ ์คํํ๋ ๊ฒฝ์ฐ ์ถฉ๋ํ์ง ์๋ ๋์์ ์ ๊ณต๋๋ ์ํคํ ์ฒ๋ฅผ ์ต๋ํ ํ์ฉํ ์์๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. Flame์ ํ์ ๊ตฌ์ฑ์ด์ด ๋ฒ์๋ฅผ ์ง์ํฉ๋๊น? ๋ค๋ฅธ ์ํคํ ์ฒ์์ ์ ์ ํ ์ปค๋์ ๋์คํจ์นํ๊ธฐ ์ํด ๋ด์ฅ ๋ ์ถ๊ฐ ์ฝ๋๊ฐ ์์ต๋๊น? ์ด๊ฒ์ ์ผ๋ง๋ ์ธ๋ถํ๋ฉ๋๊น? ์ด๋ฌํ ์ปค๋์ด ์๋์ง ํ์ธํ๊ธฐ ์ํด ๋น๋ ์ค์ ์ํํด์ผ ํ ์์ ์ด ์์ต๋๊น?
x86_64
๊ตฌ์ฑ์ ์ฌ์ฉํ์ฌ @jakirkham์ ๊ตฌ์ถํ๋ฉด ๋ค์๊ณผ ๊ฐ์
์ด๋ค ์ค ์ผ๋ถ๋ ์๋ก์ด ์ปดํ์ผ๋ฌ ๋ฐ / ๋๋ binutils ๋ฒ์ ์ด ํ์ํ์ง๋ง ๋น๋ ๋จธ์ ์์๋ง ํ์ํฉ๋๋ค.
AFAIK libflame์๋ ์ํคํ ์ฒ์ ๋ํ ํน์ ์ปค๋์ด ์์ต๋๋ค. ์ด๋ ๋ชจ๋ BLIS์ ๋ฌ๋ ค ์์ต๋๋ค.
@jakirkham ์ฐ๋ฆฌ๋ ์ค๋ ๋ ํ ๊ตฌํ์ ์ถ๊ฐํด์ผํฉ๋๋ค. ์ง๊ธ์ ํฌํฌ๋ก๋ถํฐ ์์ ํด์ผํ๋ ๊ธฐ๋ณธ fork-join ๊ตฌํ์ ๋๋ค.
AFAIK libflame์๋ ์ํคํ ์ฒ์ ๋ํ ํน์ ์ปค๋์ด ์์ต๋๋ค. ์ด๋ ๋ชจ๋ BLIS์ ๋ฌ๋ ค ์์ต๋๋ค.
์ด๊ฒ์ ๋๋ถ๋ถ ์ ํํฉ๋๋ค. libflame์๋ Givens ํ์ ์ ์ ์ฉํ๊ธฐ์ํ ๋ช ๊ฐ์ง ๋ด์ฅ (ํ์ฌ SSE ๋ง) ์ปค๋์ด ์์ง๋ง ์ด๋ฌํ ์ปค๋์ libflame์ ์ํ์ง ์์ผ๋ฉฐ BLIS๊ฐ ์์ฑ ๋ ๋น์ ์กด์ฌํ์ง ์์๊ธฐ ๋๋ฌธ์ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๊ณณ์ด ์์์ต๋๋ค. ๊ทธ๋ค์ ์์ฉํ์ญ์์ค. ๊ฒฐ๊ตญ ์ด๋ฌํ ์ปค๋์ ๋ค์ ์์ฑ๋๊ณ ์ ๋ฐ์ดํธ๋๋ฉฐ BLIS๋ก ์ฌ๋ฐฐ์น๋ฉ๋๋ค.
Flame์ ํ์ ๊ตฌ์ฑ์ด์ด ๋ฒ์๋ฅผ ์ง์ํฉ๋๊น? ๋ค๋ฅธ ์ํคํ ์ฒ์์ ์ ์ ํ ์ปค๋์ ๋์คํจ์นํ๊ธฐ ์ํด ๋ด์ฅ ๋ ์ถ๊ฐ ์ฝ๋๊ฐ ์์ต๋๊น? ์ด๊ฒ์ ์ผ๋ง๋ ์ธ๋ถํ๋ฉ๋๊น? ์ด๋ฌํ ์ปค๋์ด ์๋์ง ํ์ธํ๊ธฐ ์ํด ๋น๋ ์ค์ ์ํํด์ผ ํ ์์ ์ด ์์ต๋๊น?
@jakirkham ์ด ๊ฒฝ์ฐ "๋ถ๊ฝ"์ด ๋ฌด์จ ๋ป์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. libflame๊ณผ BLIS์ ๋ ๊ฐ์ง ์ ํ์ด ์์ต๋๋ค. libflame์์ฃผ์๊ฐ ํ์ํ๊ณ ์ฌ ์์ฑ์ด ํ์ํ ์ ์์ง๋ง ์ง๋ ๋ช ๋ ๋์ ๊ฑฐ์ ๋ชจ๋ ์ฃผ์๊ฐ BLIS์์์์ต๋๋ค.
ํ ์คํธ๋ก "Flame"์ "BLIS"๋ก ๋ฐ๊พธ๋ฉด ๋๋ต์ "์, ๋๋ถ๋ถ"์ ๋๋ค.
์ผ๋ง๋ ์ธ๋ถํ๋ฉ๋๊น?
๋ฌด์จ ๋ป์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ง๋ง BLIS์ ์ปค๋ ์ง์์ OpenBLAS๋งํผ ๊ด๋ฒ์ํ์ง ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ฐ๋ฆฌ๋ ์ข
์ข
๋ณต์กํ ๋๋ฉ์ธ trsm
์ต์ ํํ์ง ์์ต๋๋ค. ์ปค๋์ ์ผ๋ถ ์กฐํฉ์์ ํ์ ๊ตฌ์ฑ์ ์ํด ํ์ฉ๋ฉ๋๋ค. ํ์ ๊ตฌ์ฑ์ cpuid
๋ฅผ ํตํด ์ ํ๋ฉ๋๋ค. ํ์ ๊ตฌ์ฑ์ ์ํด "๋ฑ๋ก"๋ ์ปค๋์ ์ ํํ๊ฒ ์ป์ต๋๋ค. ๋ํธ์ ๋ณผํธ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๊ตฌ์ฑ ์ํค๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
์ด๋ฌํ ์ปค๋์ด ์๋์ง ํ์ธํ๊ธฐ ์ํด ๋น๋ ์ค์ ์ํํด์ผ ํ ์์ ์ด ์์ต๋๊น?
๋น์ ์ด ํ๋์จ์ด ๊ฒ์์ ๋ฐํ์ ํ์ํ๋ฉด ๊ตฌ์ฑ ์ ํ๊ตฐ (์ : ๋์ intel64
, x86_64
๋์ ํน์ ํ์ ๊ตฌ์ฑ์ ๊ตฌ์ฑ ํ์์ () ๋๋ auto
, ์ ํ์ ํน์ ํ์ ๊ตฌ์ฑ). ๊ทธ๊ฒ ๋ค์ผ.
์ค๋ ๋ ํ์ ์ฌ์ฉํ๊ธฐ ์ํดํด์ผ โโํ ์ผ์ด ์์ต๋๊น, ์๋๋ฉด ์๋์ผ๋ก ๋ฐ์ํฉ๋๊น? ๋ํ ํ๋ก์ธ์ค๊ฐ ๋ถ๊ธฐ๋๋ฉด ์ค๋ ๋ ํ์ด ์ด๋ป๊ฒ ์๋ํฉ๋๊น?
์ด์ ์์ด ์ค๋ ๋์์ ๋งํ๋ฏ์ด BLIS๋ ์ค๋ ๋ ํ์ ์ฌ์ฉํ์ง ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ ํฌํฌ ์์ ์ ๋ํด Devin์๊ฒ ์ฐ๊ธฐํฉ๋๋ค (๊ทธ๋ฆฌ๊ณ ๊ทธ๋ ํฌํฌ๊ฐ ๋ฌธ์ ๊ฐ๋์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ ๊ฒ ๊ฐ์ต๋๋ค).
์ฐธ๊ณ ๋ก BLIS conda ํจํค์ง๋ conda-forge์ Linux, osx, Windows์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. (ํ์ฌ ๊ฐ๋ฐ ๋ธ๋์น๋ฅผ ๊ตฌ์ถ ์ค์ด๋ฉฐ ๋ฆด๋ฆฌ์ค๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค). ํจํค์ง๋ pthread๊ฐ ํ์ฑํ๋๊ณ x86_64 ๊ตฌ์ฑ์ผ๋ก ๋น๋๋์์ต๋๋ค.
๊ทธ๋ Python ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฐฐ์กํ๊ณ ์์ต๋๋ค. ๊ทธ๋ ์ฌ์ฉ์๊ฐ ์์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ ์์ ๋์ผํ ํ๋ก์ธ์ค์์ ํจ๊ป ์คํ๋๋ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ์์ฒด ์ฝ๋์ ๊ฒฐํฉ ํ ๊ฒ์ผ๋ก ๊ธฐ๋ํฉ๋๋ค. ๊ทธ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ GEMM์ ์ฌ์ฉํ๋ฉฐ, ๊ทธ๊ฐ ์ ์ดํ์ง ์๊ฑฐ๋ ์ฌ์ง์ด ์๊ณ ์๋ ๋ค๋ฅธ ์ฝ๋ ์ค ์ผ๋ถ๋ GEMM์ ์ฌ์ฉํ๊ธฐ๋ฅผ ์ํ ๊ฒ์ ๋๋ค. ๊ทธ๋ ๋์ผํ ํ๋ก์ธ์ค์์ ๋ฐ์ํ ์์๋ GEMM์ ๋ํ ๋ค๋ฅธ ๊ด๋ จ์๋ ํธ์ถ์ ์ฐ์ฐํ ์ํฅ์์ฃผ์ง ์๊ณ GEMM์ ๋ํ ํธ์ถ์ ๋ํ ์ค๋ ๋ฉ์ ์ ์ด ํ ์ ์๊ธฐ๋ฅผ ์ํฉ๋๋ค.
@njsmith ๋ก๋ฒํธ์ ์ด์ผ๊ธฐ๋ฅผ
@jakirkham ์ธํ ๋ด๋น์ ์ค ํ ๋ช ์ธ @jeffhammond ๋ OpenMP ๊ตฌํ์ด ๋ด๋ถ์ ์ผ๋ก ์ค๋ ๋ ํ ๋ชจ๋ธ์ ์ผ์์ ์ผ๋ก ์ฌ์ฉํ๋ค๊ณ ์๋ ค์ค๋๋ค. ๋ฐ๋ผ์ ๊ทธ๋ BLIS ๋ด์์ ์ค๋ ๋ ํ์ ์ค๋ณต์ผ๋ก ๊ตฌํํ๋ ๊ฒ์ ๊ถ์ฅํ์ง ์์ต๋๋ค.
์ด์ ์ ์ํ๋๋ก numpy๊ฐ pthread๋ฅผ ํ์๋กํ๊ฑฐ๋ ์ ํธํ๋ ๊ฒฝ์ฐ ์ผ ์ ์์ต๋๋ค.์ด ๊ฒฝ์ฐ fork / join-style pthreads API ์๋์์ ๋ฐ์ํ๋ ์ค์ fork / join์ผ๋ก ๋์๊ฐ ์ ์์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด pthreads, OpenMP๋ฅผ ๋ชจ๋ ์ฌ์ฉํ๊ณ ์์ต๋๊น?
๋ํ์ด ์ง๋ฌธ์ ๋๋ตํ๋ ๊ฒ์ ์์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. BLIS์ ๋ค์ค ์ค๋ ๋ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ ๊ตฌ์ฑ ๊ฐ๋ฅํฉ๋๋ค. pthreads ๋๋ OpenMP๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. (๊ทธ๋ฌ๋ ์ด๊ฒ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๊ธฐํ์ ์ฌ์ฉ๋๋ pthread_once()
์ ๋ํ ์์กด์ผ๋ก ์ธํด pthread์ ๋ํ BLIS์ ๋ฌด์กฐ๊ฑด ๋ฐํ์ ์ข
์์ฑ๊ณผ ํผ๋ํด์๋ ์๋ฉ๋๋ค.)
๋ถํํ๋ OpenMP ๊ตฌํ (์ : GOMP)์ด ์ผ๋ฐ์ ์ผ๋ก ํฌํฌ์ ๋ํด ๋ ๊ฐ๋ ฅ ํด์ง์ง ์๋ ํ, Python์์๋ ์ค์ ๋ก ์์ ํ ์ต์ ์ด ์๋๋๋ค. ํนํ ์คํ์์ NumPy๋งํผ ๋ฎ์ ๊ฒ์ ์๋๋๋ค.
๋ถํํ๋ OpenMP ๊ตฌํ (์ : GOMP)์ด ์ผ๋ฐ์ ์ผ๋ก ํฌํฌ์ ๋ํด ๋ ๊ฐ๋ ฅ ํด์ง์ง ์๋ ํ, Python์์๋ ์ค์ ๋ก ์์ ํ ์ต์ ์ด ์๋๋๋ค. ํนํ ์คํ์์ NumPy๋งํผ ๋ฎ์ ๊ฒ์ ์๋๋๋ค.
๊ทธ๋ด ์ ์์ง. ๋ฐ๋ผ์ numpy๋ BLIS๋ฅผ ํตํ ๋ฉํฐ ์ค๋ ๋ฉ์ ์ํด --enable-threading=pthreads
๊ตฌ์ฑ ์ต์
์ ์์กดํ๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆฝ๋๋ค.
pthread๋ก ์ปดํ์ผ ํ ๋ numpy๋ฅผ ํธ์ถํ๋ Python ํ๋ก์ธ์ค / ์ค๋ ๋ ํ๊ณผ ์ค์ฒฉ ๋ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ํ ํ ๋ ์ด๊ณผ ๊ตฌ๋ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ์ ์ด ํ ์์๋ ์ผ๋ถ ๊ณต์ฉ API๊ฐ ์์ต๋๊น?
์ข ๋ ๊ตฌ์ฒด์ ์ผ๋ก ๋ด๊ฐ ์ฐพ๋ ๊ณต์ฉ ๊ธฐํธ์ ์ข ๋ฅ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
https://github.com/tomMoral/loky/pull/135/files#diff -e49a2eb30dd7db1ee9023b8f7306b9deR111
MKL ๋ฐ OpenMP ์ฉ https://github.com/IntelPython/smp ์์ ์ํ๋๋ ์์ ๊ณผ ์ ์ฌํฉ๋๋ค.
pthread๋ก ์ปดํ์ผ ํ ๋ numpy๋ฅผ ํธ์ถํ๋ Python ํ๋ก์ธ์ค / ์ค๋ ๋ ํ๊ณผ ์ค์ฒฉ ๋ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ํ ํ ๋ ์ด๊ณผ ๊ตฌ๋ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ์ ์ด ํ ์์๋ ์ผ๋ถ ๊ณต์ฉ API๊ฐ ์์ต๋๊น?
@ogrisel ์ข์ ์ง๋ฌธ์
๋๋ค, Olivier. ๋ฐํ์์ ์ค๋ ๋ฉ ๋งค๊ฐ ๋ณ์๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ด ์์ง๋ง ํ์ฌ ์ ์ญ ์๋ฏธ๋ก ์ผ๋ก ์ํ๋ฉ๋๋ค. ( gemm
๋๋ ๊ทธ ์ด๋ค ๊ฒ์ด ๋ ํธ์ถ ๋น ๊ธฐ์ค์ด ์๋๋ผ ์ ์ญ์ด ์๋) ํ๊ฒฝ ๋ณ์๋ฅผ ํตํด ๊ณต๊ธํ๊ธฐ ๋๋ฌธ์ ์ฐจ์ ์ฑ
์
๋๋ค.
์ ๋ ํ์ฌ ๋๊ตฐ๊ฐ๊ฐ BLIS์ ์์ "์ ๋ฌธ๊ฐ"ํ์ API ์ค ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ถ๊ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ gemm
๋ก ์ ๋ฌํ ์ ์๋๋ก ๊ธฐ๋ณธ ์ฝ๋๋ฅผ ์ฝ๊ฐ ์ฌ ์ค๊ณํ๊ณ ์์ต๋๋ค. ํธ์ถ์๊ฐ ํธ์ถ๋ณ๋ก ๋ณ๋ ฌํ ์ ๋ต์ ์ง์ ํด์ผํฉ๋๋ค. ์์ ์ธ๊ธ ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ํตํด ์ฌ๋๋ค์ ๋จ์ผ ์ค๋ ๋ ์๋ฅผ ์ง์ ํ ์ ์์ผ๋ฉฐ BLIS๊ฐ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ป์ ์์น ๋๋ ํ๋ ฌ ๊ณฑ์
์๊ณ ๋ฆฌ์ฆ (BLIS๊ฐ ์ ํธํ๋๋๋ก)์ ๊ฐ ๋ฃจํ์ ๋ํ ๋ณ๋ ฌ ์ฒ๋ฆฌ ์์ค์ ํ์
ํ๊ธฐ ์ํด ์๋์ผ๋ก ์ต์ ์ ๋คํ ์ ์์ต๋๋ค.
์ด๋ ์ชฝ์ด๋ ์ด ์๋ก์ด ์ ๊ทผ ๋ฐฉ์์ด ๊ทํ์ ์๊ตฌ๋ฅผ ์ถฉ์กฑ์ํฌ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ์ด๋ฏธ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์ฏค ์๋ฃํ๊ธฐ ๋๋ฌธ์ ์๋ก์ด ๊ธฐ๋ฅ์ github์ ํธ์ํ์ง 1 ์ฃผ์ผ ์ ๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ด ๊ณํ์ด ๊ทํ์๊ฒ ํจ๊ณผ๊ฐ์๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆฌ๊ฑฐ๋์ด ์ฃผ์ ์ ๋ํด ๋ค๋ฅธ ์ฐ๋ ค ์ฌํญ์ด๋ ์์ฒญ์ด์๋ ๊ฒฝ์ฐ ์๋ ค์ฃผ์ญ์์ค.
์ถ์ : ๋น์ ์ด ์ ๊ณต ํ ๋กํค ๋งํฌ๋ฅผ ์ดํด ๋ณด์์ต๋๋ค. ์ด๋ฌํ ๊ธฐํธ๋ ๋ชจ๋ ์ค๋ ๋์ ์ ์ญ ์ค์ ์ ์ํด ์ค์ ๋ฉ๋๋ค. ๋ด๊ฐ ์ ์ํ ์๋ฃจ์
์ ์ ์ธ๊ณ์ ์ผ๋ก ์ค์ ํ๋ ๊ฒ์ ๋ฐฐ์ ํ์ง๋ ์์ง๋ง ์ด๊ฒ์ด ์ ์ผํ ์ต์
์ด ์๋๋๋ก ์ค๊ณ๋์์ต๋๋ค. ๋ฐ๋ผ์ ์ต๋ 8 ๊ฐ์ ์ฝ์ด / ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ ค๋ ์ฌ๋์ ์์ฉ ํ๋ก๊ทธ๋จ์์ 2 ๊ฐ์ ์ค๋ ๋๋ฅผ ์์ฑ ํ ์ ์์ผ๋ฉฐ ๊ฐ ์ค๋ ๋๋ 4 ๋ฐฉํฅ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ gemm
์ธ์คํด์ค๋ฅผ ํธ์ถํฉ๋๋ค. ๋๋ 3 ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์
์ค๋ ๋์์ 2 ๊ฐ๋ ์๋ฐฉํฅ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ก gemm
๋ฅผ ํธ์ถํ๊ณ ์ธ ๋ฒ์งธ๋ 4 ๋ฐฉํฅ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. (๋น์ ์ ์์ด๋์ด๋ฅผ ์ป์ต๋๋ค.)
ํ๊ฒฝ ๋ณ์๋ฅผ ํตํด ๊ณต๊ธํฉ๋๋ค.
๋ฌด์จ ๋ป์ด์์? ํน์ Python ํ๋ก์ธ์ค์์ ์ด๋ฏธ ์ด๊ธฐํ ๋ ๊ฒฝ์ฐ Python์ ctypes๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๋ณธ / ์ ์ญ BLIS ์ค๋ ๋ ํ์ ํฌ๊ธฐ๋ฅผ ์ฌ๊ตฌ์ฑ ํ ์ ์์ต๋๊น?
ํ๊ฒฝ ๋ณ์๋ฅผ ํตํด ๊ณต๊ธํฉ๋๋ค.
๋ฌด์จ ๋ป์ด์์?
@ogrisel ์ด๊ฒ์ด ์๋ฏธํ๋ ๊ฒ์ BLIS์ OpenMP์ omp_get_num_threads()
๋ฐ omp_set_num_threads()
์ ์ ์ฌํ ์ค๋ ๋ ์๋ฅผ ์ค์ ํ๊ฑฐ๋ ๊ฐ์ ธ ์ค๋ ์์ API๊ฐ ์๋ค๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ BLIS API ํจ์๋ getenv()
๋ฐ setenv()
ํธ์ถ๋ก ๊ตฌํ๋ฉ๋๋ค. ์ด๊ฒ์ BLIS์ ์๋ ์ฌ์ฉ ์ฌ๋ก ์ค ํ๋๊ฐ ์
ธ์ ํ๋ ์ด์์ ํ๊ฒฝ ๋ณ์ (์ : bash
)๋ฅผ ์ค์ ํ ๋ค์ BLIS ์ฐ๊ฒฐ ์์ฉ ํ๋ก๊ทธ๋จ
ํน์ Python ํ๋ก์ธ์ค์์ ์ด๋ฏธ ์ด๊ธฐํ ๋ BLIS ์ค๋ ๋ ํ์ ํฌ๊ธฐ๋ฅผ ์ฌ๊ตฌ์ฑํ๊ธฐ ์ํด Python์ ctypes๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๊น?
BLIS๋ ๋ช
์ ์ ์ผ๋ก ์ค๋ ๋ ํ์ ์ฌ์ฉํ์ง ์์ต๋๋ค. ์คํ๋ ค ์ฐ๋ฆฌ๋ pthread๋ฅผ ํตํด ๋ณ๋ ฌ์ฑ์ ์ถ์ถํ๊ธฐ ์ํด create / join ๋ชจ๋ธ์ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ฌ๋ ์, BLIS๊ฐ ์ด๊ธฐํ ๋ ํ ์ ํ๋ฆฌ์ผ์ด์
(๋๋ ํธ์ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ)์ ์ ์ด๋ ์์น์ ์ผ๋ก ํจ์ ํธ์ถ์ ํตํด ๋ฐํ์์ ์ค๋ ๋ ์๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. (๊ทธ๋ฌ๋ ์ด๊ฒ์ด ์ค์ ๋ก ์๋ํ๋์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง, ํ์ด์ฌ์ด ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ / ๊ฐ์ ธ ์ค๋ ค๊ณ ์๋ํ๋ BLIS๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์
๋๋ค.) ๊ทธ๋ฌ๋ ์์ ์ธ๊ธํ๋ฏ์ด ๋ช ๊ฐ์ง ์์ ์ ์๋ฃํ๋ฉด ์์ฉ ํ๋ก๊ทธ๋จ / ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ ๋ฒจ 3 ์์
์ด ํธ์ถ ๋ ๋ ํธ์ถ๋ณ๋ก ์ฌ์ฉ์ ์ง์ ๋ณ๋ ฌํ ์ฒด๊ณ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ์ด๋ ๋จผ์ ์์ struct
๋ฐ์ดํฐ ์ ํ์ ์ด๊ธฐํ ํ ๋ค์ struct
๋ฅผ gemm
์ ๋ํ BLIS API์ ํ์ฅ ๋ "์ ๋ฌธ๊ฐ"๋ฒ์ ์ ์ ๋ฌํ์ฌ ์ํ๋ฉ๋๋ค.) ํ์ํ์ง ์๊ฑฐ๋ ์ํ์ง ์๋ ์ฌ๋๋ค์๊ฒ ํ๊ฒฝ ๋ณ์๋ฅผ ๋ถํ์ํ๊ฒ ๋ง๋ค ๊ฒ์
๋๋ค. ์ด๊ฒ์ด ๊ทํ์ ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ด ๋์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ค๋ช ํด ์ฃผ์ ์ ๋๋จํ ๊ฐ์ฌํฉ๋๋ค. ํธ์ถ ๋ณ ์ ๋ฌธ๊ฐ API๋ ํฅ๋ฏธ๋กญ์ง ๋ง Python ์์ค ํธ์ถ์์๊ฒ์ด๋ฅผ ๋ ธ์ถํ๊ธฐ ์ํด ํน์ API๋ฅผ ์ ์งํ๋ ค๋ฉด numpy๊ฐ ํ์ํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ์ ์ํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. numpy ์ฌ์ฉ์์๊ฒ๋ ์ ์ญ (ํ๋ก์ธ์ค ์์ค) ๋ณ๋ ฌ ์ฒ๋ฆฌ ์์ค์ ํ์ฌ ๊ฐ์ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ์ด ์์ผ๋ฉด ์ถฉ๋ถํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด ๋ณ๊ฒฝ์ด ํ์ BLAS-3 ํธ์ถ์ ๊ณ ๋ คํ๋ ํ env ๋ณ์์ ํ์ฌ ๊ฐ์ ๋ณ๊ฒฝํ์ฌ ๋ฌ์ฑ๋์๋์ง ๊ฐ์ธ์ ์ผ๋ก ์ ๊ฒฝ ์ฐ์ง ์์ต๋๋ค.
@charris float16์ ๊ฐ์ธ์ ์ธ ๊ฒฝํ์ด ์์ง๋ง ์ ์ด๋ ์์ธก ์๊ฐ์๋ ์ผ๋ถ ๊ธฐ๊ณ ํ์ต ์ํฌ๋ก๋์ ๋ํด ์ค์ ๋ก ํฅ๋ฏธ๋ก์ธ ์ ์์ต๋๋ค.
numpy ์ฌ์ฉ์์๊ฒ๋ ์ ์ญ (ํ๋ก์ธ์ค ์์ค) ๋ณ๋ ฌ ์ฒ๋ฆฌ ์์ค์ ํ์ฌ ๊ฐ์ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ์ด ์์ผ๋ฉด ์ถฉ๋ถํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด ๋ณ๊ฒฝ์ด ํ์ BLAS-3 ํธ์ถ์ ๊ณ ๋ คํ๋ ํ env ๋ณ์์ ํ์ฌ ๊ฐ์ ๋ณ๊ฒฝํ์ฌ ๋ฌ์ฑ๋์๋์ง ๊ฐ์ธ์ ์ผ๋ก ์ ๊ฒฝ ์ฐ์ง ์์ต๋๋ค.
์์ ๋๋ง ํ. ๊ทธ๋ ๋ค๋ฉด BLIS๋ numpy๊ฐ ์ฌ์ฉํ ์ค๋น๊ฐ ๋ ๊ฒ์ ํจ์ฌ ๋ ๊ฐ๊น์ต๋๋ค. (์ด์ ์ ์ด๋ฌํ ์งํ์ค์ธ ์์ ์ ๋จผ์ ์ํํ๊ณ ์ด์ ์ ์์ง ๋ชปํ๋ ๊ฒฝ์ ์กฐ๊ฑด์ ์์ ํ๊ณ ์ถ์ต๋๋ค.)
getenv
๋ ๋งค์ฐ ๋น ๋ฅด์ง ์์ผ๋ฏ๋ก ๋์ค์ ์ ๊ฑฐํ๋ ๊ฒ์ด ์ข์ ์ ์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ํธ์ถ์์ ๋ค์ ๊ฒ์ฌ๋๋ ํ๊ฒฝ ๋ณ์์ ์์กดํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค. (๋ํ ์ค๋ ๋ ์์ ์ฑ์ด ๋ณด์ฅ๋์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๊น?)ํ์ง๋ง bli_thread_set_num_threads
API ํธ์ถ์ ๊ด์ฐฎ์ ๊ฒ์
๋๋ค. BLIS๊ฐ ํญ์ getenv
ํธ์ถ์ ์ค์งํ๋๋ผ๋ API๊ฐ ํธ์ถ๋๊ธฐ ๋๋ฌธ์
๋๋ค. ์์
์ ๊ณ์ํ๋๋ก ์กฐ์ ํ ์ ์์ต๋๋ค.
์ฅ๊ธฐ์ ์ผ๋ก ๋ณด๋ฉด numpy์์ ๋ฒ ์ด BLAS API๋ฅผ ์ผ๋ถ ๊ณต๊ฐํ๊ธฐ ์์ํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. BLIS๋ฅผ ์ฒ์๋ถํฐ ๋งค๋ ฅ์ ์ผ๋ก ๋ง๋๋ ๊ฒ ์ค ํ๋๋ strided ํ๋ ฌ์ ๊ณฑํ๋ ๊ธฐ๋ฅ๊ณผ ๊ฐ์ด ๋ค๋ฅธ BLAS ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ๊ณตํ์ง ์๋ ๊ธฐ๋ฅ์ ์ ๊ณต ํ๊ณ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก BLAS API๋ฅผ ํ์ฅํ๊ธฐ์ํ ์์ ์ด ์งํ๋๊ณ ์๋ค๋
numpy์ API์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ณ ์ธ๋ถ ์ฌํญ์ ํ๋ ์ฝ๋ฉํ๊ณ ์ถ์ง๋ ์์ง๋ง (์ : np.matmul
๊ฐ BLIS์ JC, IC, JR ๋ฐ IR ๋งค๊ฐ ๋ณ์์ ํด๋นํ๋ ์ธ์๋ฅผ ๊ฐ์ ธ ์ค๋ ๊ฒ์ ์ํ์ง ์์ต๋๋ค),ํ์ง๋ง ํด๋น ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ฐฑ์๋์์๋ง ์๋ํ๋ ์ผ๋ฐ์ ์ธ "์ด ํธ์ถ์ ๋ํ ์ค๋ ๋ ์"์ธ์๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ด๊ฐ ์ธ๊ธํ์ง ์์ ํ ๊ฐ์ง๋ ์ธ๋ฑ์ค ์ ๋ฐ๋์ ๋๋ค. ๋๋ถ๋ถ์ ์์คํ ์ ๊ณต ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ 32 ๋นํธ ์ ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ฉฐ ์ด๋ ์์ฆ ์ผ๋ถ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ ํ ์ฌํญ์ ๋๋ค. ์ด๋ค ์์ ์์ ๋ชจ๋ ์ธ๋ฑ์ค๊ฐ 64 ๋นํธ์ด๋ฉด ์ข์ ๊ฒ์ ๋๋ค. ์๋ง๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํด์ผ ํ ๊ฒ์ ๋๋ค. ์ธ๋ฑ์ค ํฌ๊ธฐ์ ๊ด๋ จํ์ฌ ํ์ฌ ๋ฌด์์ํ๊ณ ์๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. @ matthew-brett ์ฌ์ ํ 32 ๋นํธ ์ ์๋ก ์ปดํ์ผํ๊ณ ์์ต๋๊น?
@charris BLIS์ ์ ์ ํฌ๊ธฐ๋ ๊ตฌ์ฑ์ 32 ๋นํธ ๋๋ 64 ๋นํธ๋ก ๊ตฌ์ฑ ํ ์ ์์ต๋๋ค. ๋ํ ๋ด๋ถ ์ ์ ํฌ๊ธฐ์๋ ๋ณ๋๋ก BLAS API์์ ์ฌ์ฉ๋๋ ์ ์ ํฌ๊ธฐ๋ฅผ ๊ตฌ์ฑ ํ ์ ์์ต๋๋ค.
์ฌ์ค ์ ๋ฅผ ์๊ธฐ์์ผ์ค๋๋ค. ์ ๋ ์ง๋์ฃผ์ ์์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๋ ๋์ ์์ค์ ์ค๋ ๋ฉ์ ๊ด๋ฆฌํ๊ณ ์์๊ธฐ ๋๋ฌธ์ gemm ๋จ์ผ ์ค๋ ๋๋ฅผ ํธ์ถํ๊ธฐ๋ฅผ ์ํ๋ค๋ ๊ฒ์ ์๊ณ ์๋ ๋๊ตฐ๊ฐ์ ์ด์ผ๊ธฐํ์ต๋๋ค. ๊ทธ๋ ํ์ค blas ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ๋๋ค. ์ ์ด๋ ์์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ด๋ถ์์ ํธ์ถํ๊ธฐ ์ฌ์ด ์ ์ญ ์ค์ ์ ํตํด ์ด๋ฃจ์ด์ง๋๋ค.
@njsmith ์์ ์ธ๊ธ ํ ๊ฒฝ์ ์กฐ๊ฑด์ ์์ ํ๊ณ ์ค๋ ๋๋ก๋ถํฐ ์์ ํ ํธ์ถ ๋น ๋ฉํฐ ์ค๋ ๋ฉ API๋ ๊ตฌํํ์ต๋๋ค. ์น๊ตฌ์๊ฒ fa08e5e (๋๋ ํด๋น ์ปค๋ฐ์ ์์)๋ฅผ ๊ฐ๋ฆฌ ํต๋๋ค. ๋ฉํฐ ์ค๋ ๋ฉ ๋ฌธ์ ๋ ์
๋ฐ์ดํธ๋์์ผ๋ฉฐ ๊ธฐ๋ณธ ์์ ์ ํจ๊ป ๋
์๊ฐ ์ ํํ ์ฌํญ์ ์๋ดํฉ๋๋ค. ์ปค๋ฐ์ ํ์ฌ dev
๋ธ๋์น์ ์์ง๋ง ๊ณง master
์ ๋ณํฉ ํ ์์ ์
๋๋ค. (์ด๋ฏธ ๋๋ถ๋ถ์ ์๋๋ฅผ ํตํด ์ฝ๋๋ฅผ ์์ฑํ์ต๋๋ค.)
ํธ์ง : ์ฌ์ํ ์์ ์ปค๋ฐ์ ๋ฐ์ํ๋๋ก ๋งํฌ๊ฐ ์ ๋ฐ์ดํธ๋์์ต๋๋ค.
์ง์๋๋ ์ ํ์ ๊ฐ๋ฅํ ์ถ๊ฐ๋ก long double
์ด๋ป์ต๋๊น? ์ผ๋ถ ์ํคํ
์ฒ๊ฐ (์ฌ์ ํ ์ํํธ์จ์ด์์) 4 ์ค ์ ๋ฐ๋๋ฅผ ์ง์ํ๊ธฐ ์์ํ๊ณ ์์ผ๋ฉฐ ์ด๋ ์์ ์์ ํ์ฅ ์ ๋ฐ๋๊ฐ ์ธํ
์์ 4 ์ค ์ ๋ฐ๋๋ก ๋์ฒด ๋ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค. ๋๋ ์ด๊ฒ์ด ๋น์ฅ ์๊ธํ๋ค๊ณ ์๊ฐํ์ง ์์ง๋ง, ์๋
์ด ์ง๋๋ฉด ์ผ์ด ๊ทธ๋ ๊ฒ๋๊ธฐ ์์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
@charris ์ฐ๋ฆฌ๋ ํนํ ๊ธฐ๊ณ ํ์ต / AI ์ ํ๋ฆฌ์ผ์ด์
๋๋ฌธ์ bfloat16
๋ฐ / ๋๋ float16
์ ๋ํ ์ง์์ ๊ณ ๋ คํ๋ ์ด๊ธฐ ๋จ๊ณ์ ์์ง๋ง double double
๋ํ ์์๋ ์๊ณ ์์ต๋๋ค.
@charris https://en.wikipedia.org/wiki/Long_double ์ ๋ฐ๋ฅด๋ฉด long double
๋ ๋ค์ํ ์๋ฏธ๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
์ฑ๋ฅ ์ธก๋ฉด์์ SIMD ๋ฒ์ ์ด ์๊ธฐ ๋๋ฌธ์ float80 (์ : x87 long double)์ ๋ํ ์์น์ ๋ณด์ด์ง ์์ต๋๋ค. BLIS์์ double double
์ SIMD ๋ฒ์ ์ ์์ฑํ ์ ์๋ค๋ฉด ๋ ๋์ ์ฑ๋ฅ์ ๋ฐํํ ๊ฒ์
๋๋ค.
์ํํธ์จ์ด์ float128 ๊ตฌํ์ ํ๋์จ์ด์ float64๋ณด๋ค ์ ์ด๋ ํฌ๊ธฐ๊ฐ ๋ ๋๋ฆฝ๋๋ค. ๋ชจ๋ FPE ์ฒ๋ฆฌ๋ฅผ ๊ฑด๋ ๋ฐ๊ณ SIMD๋ฅผ ์ฌ์ฉํ ์์๋ float128์ ์๋ก์ด ๊ตฌํ์ ์์ฑํ๋ ๊ฒ์ด ํ๋ช ํ ๊ฒ์ ๋๋ค. libquadmath์ ๊ตฌํ์ ์ ํํ์ง๋ง BLIS์ ๊ฐ์ ๊ณ ์ฑ๋ฅ BLAS ๊ตฌํ์ ์ฃผ๋ชฉํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
๋ค, ๋ฌธ์ ์ ๋๋ค. ํ์ฅ ๋ ์ ๋ฐ๋๋ ๋ ธ๋ ฅํ ๋งํ ๊ฐ์น๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ 4 ์ค ์ ๋ฐ๋์ ๋ํ ํ์์ฑ์ ๋ฐ์ ์ด ์๊ณ , double์ ๋๋ถ๋ถ์ ์ผ์ ์ข์ง๋ง ํ์ํ ๋ ํ์ํฉ๋๋ค. ๋๋ ์ฑ๋ฅ์ ๋ํด ๊ฑฑ์ ํ์ง ์๊ณ ์๋๊ฐ ์๋๋ผ ์ ํ์ฑ์ด ํ์ํฉ๋๋ค. ๋ฌผ๋ก ์ํํธ์จ์ด ๊ตฌํ ์ธ 4 ์ค ์ ๋ฐ๋ long double์ ์ฌ์ฉํ์ฌ ARM64์ ๋ํ ์ง์์ ํ์ฅํ์ง๋ง, ํ๋์จ์ด๊ฐ ์ด๋ ์์ ์์ ๋ฐ๋ฅผ ๊ฒ์ผ๋ก ์์ํ๊ณ ๋ฌด์ธ๊ฐ๋ฅผ ํ ์คํธํ๊ณ ์ค๋นํ๋ ๊ฒ์ด ์ข์ ์ ์์ต๋๋ค.
BLAS G2 ์ ์ ์
์์ผ๋ก ๋์๊ฐ๋ ๊ฒ์ ๋ณด๊ฒ๋์ด ๊ธฐ์ฉ๋๋ค!
๊ธฐ๋ก์ ์ํด @njsmith ๊ฐ ์ํํธ์จ์ด์์ ์ค๋ ๋ฉ์ ์ ์ดํ๋ โโ๋ฐ ๊ด์ฌ์ด์๋ ์ฌ๋์ ์ธ๊ธ ํ ์ฌ๋์ ๋๋ค. ๋ด ์ํฌ๋ก๋๋ ์์ธก ์๊ฐ์ ๋นํฉ ํ ์ ๋๋ก ๋ณ๋ ฌ ์ ์ด๋ฉฐ ํ๋ ฌ ๊ณฑ์ ์ ์๋์ ์ผ๋ก ์์ต๋๋ค. ๊ทธ๋์ ์ ๋ ๋ ํฐ ์์ ๋จ์๋ฅผ ๋ณ๋ ฌํํ๊ณ ์ถ์ต๋๋ค.
์ฝ 1 ๋ ์ ์ PyPi ์ฉ Blis๋ฅผ ํจํค์งํ๊ณ Cython ๋ฐ์ธ๋ฉ์ ์ถ๊ฐํ๋ ์์ ์ ์ํํ์ต๋๋ค. https://github.com/explosion/cython-blis
Blis๋ ์ด์ ๊ฐ์ C ํ์ฅ์ผ๋ก ํจํค์งํ๊ธฐ๊ฐ ๋งค์ฐ ์ฝ๋ค๋ ๊ฒ์ ์์์ต๋๋ค. ์ ์๊ฒ ๊ฐ์ฅ ํฐ ๊ฑธ๋ฆผ๋์ Windows ์ง์์ด์์ต๋๋ค. ๊ธฐ์ต์ผ๋ก๋ C99 ๋ฌธ์ ์์ง๋ง ์๋ชป ๊ธฐ์ตํ๊ณ ์์ ์ ์์ต๋๋ค.
๋ด๊ฐ ์ถ๊ฐ ํ Cython ์ธํฐํ์ด์ค๊ฐ ํฅ๋ฏธ๋ก์ธ ์ ์์ต๋๋ค. ํนํ Cython์ ์ตํฉ ์ ํ์ ์ฌ์ฉํ์ฌ float ๋ฐ double ์ ํ ๋ชจ๋์ ๋ํด ๋ฉ๋ชจ๋ฆฌ ๋ทฐ ๋๋ ์์ ํฌ์ธํฐ๋ก ํธ์ถ ํ ์์๋ ๋จ์ผ nogil
ํจ์๊ฐ ์์ต๋๋ค. ๋ ๋ง์ ์ ํ์ ๋ํด ๋ ๋ง์ ๋ถ๊ธฐ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ๋ ๋ฌธ์ ๊ฐ๋์ง ์์ต๋๋ค. ํตํฉ ๋ ์ ํ์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ
ํ๋ฆฟ์
๋๋ค. ์ปดํ์ผ์ ์กฐ๊ฑด๋ถ ์คํ์ ํ์ฉํ์ฌ ์ค๋ฒ ํค๋๊ฐ ์์ต๋๋ค.
๋๋ ๋ ๋ฆฝํ Blis ํจํค์ง๋ฅผ ์ ์งํ๊ณ , ๋ฐํด๋ฅผ ๋ง๋ค๊ณ , ๋ฉ์ง Cython ์ธํฐํ์ด์ค๋ฅผ ์ ์งํ๋ ๋ฑ ๋งค์ฐ ๊ธฐ์ ๊ฒ์ ๋๋ค. ๋๋ ๊ทธ๊ฒ์ numpy ๋ด์ ํตํฉ ๋ ๊ฒ๋ณด๋ค ๋ณ๋์ ํจํค์ง๋ก ๊ฐ๋ ๊ฒ์ด ๋งค์ฐ ์ข์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ค๋ฅธ BLAS ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ง์ํ๋ ๊ฒ์ ์ ํ์๋ฐ์ง ์๊ณ Blis์ API๋ฅผ ๋ ๋ง์ด ๋ ธ์ถ ํ ์ ์์ต๋๋ค.
@honnibal ์ด ์ค๋ ๋์์ ์๋ต์ด ์ง์ฐ๋์ด ์ฃ์กํฉ๋๋ค, Matthew.
๋ฉ์์ง๋ฅผ ๋ณด๋ด ์ค์ ๊ณ ๋ง์์. ์ฐ๋ฆฌ๋ ๋ค๋ฅธ ์ฌ๋๋ค์ด BLIS์ ๋ํด ํฅ๋ถํ๋ ๊ฒ์ ํญ์ ๊ธฐ์๊ฒ ์๊ฐํฉ๋๋ค. ๋ฌผ๋ก Python ์ํ๊ณ (์ ํ๋ฆฌ์ผ์ด์ , ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ๋ชจ๋ ๋ฑ)์ ์ถ๊ฐ๋ก ํตํฉํ๊ธฐ๋ก ๊ฒฐ์ ํ ๊ฒฝ์ฐ ํ์ํ ๋๋ง๋ค ์กฐ์ธ ํด ๋๋ฆฌ๊ฒ ์ต๋๋ค.
Windows ์ง์์ ๋ํด์๋ @isuruf๊ฐ ์ต๊ทผ์ ์ถ๊ฐ ํ Windows ABI์ ๋ํ clang / appveyor ์ง์์ ํ์ธํ์ญ์์ค. ๋ง์ง๋ง์ผ๋ก ๊ทธ์๊ฒ์ ๋ค์์ ๋ ์์๋๋ก ์๋ํ์ง๋ง ์ฌ๊ธฐ UT์์ Windows์ ๋ํ ๊ฐ๋ฐ์ ์ํํ์ง ์๊ธฐ ๋๋ฌธ์์ด ๋ฌธ์ ๋ฅผ ์ง์ ํ์ธํ ์ ์์ต๋๋ค. (Isuru๊ฐ ํ๋ Travis CI์ ๋น์ทํ ๋ฐฉ์์ผ๋ก appveyor์ ๊ฐ์ ํ ์ ์๋ค๊ณ ์ง์ ํ์ง๋ง)
๋ํ ํตํ ๋ณ ์ค๋ ๋ฉ ์ฌ์ฉ์ ๋ํด ๊ถ๊ธํ ์ ์ด ์์ผ๋ฉด ์๋ ค์ฃผ์ธ์. (์ด ์ฃผ์ ๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํด ๋ฉํฐ ์ค๋ ๋ฉ ๋ฌธ์๋ฅผ ์ ๋ฐ์ดํธํ์ต๋๋ค.)
BLIS 0.5.2๋ถํฐ๋ Marvell ThunderX2๋ฅผ ํฌํจํ ๋ค์ํ ๋ง์ ์ฝ์ด ์ํคํ ์ฒ์์ ๋ํ์ ์ธ ๋ฐ์ดํฐ ์ ํ ์ธํธ์ ๋ ๋ฒจ 3 ์์ ์ ๋ํ BLIS์ ๋จ์ผ ์ค๋ ๋ ๋ฐ ๋ค์ค ์ค๋ ๋ ์ฑ๋ฅ๊ณผ BLAS์ ๊ธฐํ ๊ตฌํ์ ๋ณด์ฌ์ฃผ๋ ์ฑ๋ฅ ๋ฌธ์๊ฐ ์์ต๋๋ค. , Intel Skylake-X, Intel Haswell ๋ฐ AMD Epyc.
๋ฐ๋ผ์ numpy ์ปค๋ฎค๋ํฐ๊ฐ BLIS๊ฐ ๋ค๋ฅธ ์ ๋์ ์ธ BLAS ์๋ฃจ์ ๊ณผ ์ด๋ป๊ฒ ๋น๊ต๋๋์ง ๊ถ๊ธํดํ๋ค๋ฉด ๊ฐ๋จํ ์ดํด ๋ณด๋๋ก ๊ถํฉ๋๋ค!
๋งค์ฐ ํฅ๋ฏธ ๋กญ์ต๋๋ค. @fgvanzee์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
Epyc์ ์ฐพ์์ผํ์ต๋๋ค. Zen (์ธ์ ๊ฐ๋ Zen +๋ก ์ ๋ฐ์ดํธ๋์์ ์ ์์) ์ํคํ ์ฒ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ๋ธ๋๋ ์ด๋ฆ ์ธ ๊ฒ ๊ฐ์ต๋๋ค. Zen์ผ๋ก ์ด๋ฆ์ ๋ฐ๊พธ๋ ๊ฒ์ด ๋ ๋ซ์ต๋๊น? ์ฌ์ฉ์ ๊ธฐ๋ฐ Ryzen / Threadripper๋ ๋ ํฅ๋ฏธ๋ก์ด ๋ธ๋๋์ ๋๋ค. Zen์ ์ธ์ ํ ์ ์์ง๋ง Epyc์ ์ธ์ํ์ง ๋ชปํ ์ ์์ต๋๋ค.
Epyc๋ AMD ์๋ฒ ๋ผ์ธ์ ์ด๋ฆ์ ๋๋ค. ๊ณผ๊ฑฐ AMD Opteron ์ ํ์ ํ์ ์ ํ์ ๋๋ค.
์ํ๊น๊ฒ๋ BLIS๊ฐ ์ํคํ ์ฒ ํ๊ฒ์ ๋ ์ด๋ธ์ ์ง์ ํ๋ ๊ณ ์ ํ ๋ฐฉ๋ฒ์ ์์ต๋๋ค. ์ฝ๋๋ ๋ฒกํฐ ISA (์ : AVX2), CPU ์ฝ์ด ๋ง์ดํฌ๋ก ์ํคํ ์ฒ (์ : Ice Lake) ๋ฐ SOC / ํ๋ซํผ ํตํฉ (์ : Intel Xeon Platinum ํ๋ก์ธ์)์ ์์กดํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ). BLIS๋ ๊ฒฝ์ฐ์ ๋ฐ๋ผ (์ : Dunnington) ๋ง์ดํฌ๋ก ์ํคํ ์ฒ ์ฝ๋ ์ด๋ฆ์ ์ฌ์ฉํ์ง๋ง ๋ชจ๋ ์ฌ๋์๊ฒ ๋ ์ข์ ๊ฒ์ ์๋๋๋ค.
@fgvanzee GCC march / mtune / mcpu ์ด๋ฆ์ ํด๋นํ๋ ๋ณ์นญ์ ์ถ๊ฐํ๋ ๊ฒ์ ๊ณ ๋ คํ ์ ์์ต๋๋ค.
@rgommers Ryzen ๋ฐ Epyc์ ํฌํจํ๋ BLIS ๋ด์ ํ์ ๊ตฌ์ฑ์ ๋ ์ ํ์ ๋ชจ๋ ์บก์ฒํ๋ฏ๋ก ์ค์ ๋ก ์ด๋ฏธ zen
์ด๋ฆ์ด ์ง์ ๋์์ต๋๋ค.
Ryzen / Threadripper ๋๋ Epyc์ด ๋ ํฅ๋ฏธ๋ก์ด ๋ธ๋๋์ธ์ง์ ๊ดํด์๋ (์๋ง์ ์ฌ์ฉ์์๊ฒ๋) ์ด๋ ๊ฒ ๋งํ ๊ฒ์ ๋๋ค. ํ๋์ AMD Zen ์์คํ ๋ง ๋ฒค์น ๋งํฌ ํ ์ ์๋ค๋ฉด ์ต๊ณ ๊ธ Epyc์ด ๋ ๊ฒ์ ๋๋ค. Ryzen๊ณผ ์ ์ฌํ ๋ง์ดํฌ๋ก ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํฉ๋๋ค. (b) ์ต๋ 64 ๊ฐ์ ๋ฌผ๋ฆฌ์ ์ฝ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค (๋ํ ์ด๋ฌํ ์ฝ์ด๋ ๋ค์ ์ฐธ์ ํ NUMA์ ์ ์ฌํ ๊ตฌ์ฑ์ผ๋ก ๋ฐฐ์ด๋์ด ์์ต๋๋ค). (c) BLIS ๋ฐ ๊ธฐํ ๊ตฌํ์ ์ต๋ ์คํธ๋ ์ค๋ฅผ๊ฐํฉ๋๋ค. ์ด๊ฒ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ฐ๋ฆฌ๊ฐ ์ฌ๊ธฐ์ ํ ์ผ์ ๋๋ค.
์ด์ ๊ณ ๋ง๊ฒ๋ ํ๋์ Zen ์์คํ ๋ง ๋ฒค์น๋งํน ํ ์ ์๋ค๋ ๊ท์น์ด ์์ต๋๋ค. :) ๊ทธ๋ฌ๋, ํนํ ์ฒ์์ ์ก์ธ์ค ๊ถํ์ ์ป๋ ๊ฒ๊ณผ ๊ด๋ จํ์ฌ ๋ค๋ฅธ ์ฅ์ ๋ฌผ์ด ์์ต๋๋ค. ํ์ฌ Ryzen / Threadripper ์์คํ ์ ์ก์ธ์ค ํ ์ ์์ต๋๋ค. ์ก์ธ์ค ๊ถํ์ด ์์ผ๋ฉด ์คํ์ ๋ฐ๋ณตํ๊ณ ๊ทธ์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ์ํ๊ฒ ์ต๋๋ค.
Jeff๋ ์ฐ๋ฆฌ๊ฐ ์ง๋ฉด ํ ์ด๋ฆ ์ง์ ํจ์ ์ค ์ผ๋ถ๋ฅผ ์ง์ ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ง์ดํฌ๋ก ์ํคํ
์ฒ ์ธก๋ฉด์์ ํ์ ๊ตฌ์ฑ ๋ฐ ์ปค๋ ์งํฉ์ ์ด๋ฆ์ ์ง์ ํ์ง๋ง ์์ง ๋ฏธ๋ฌํ ์ฐจ์ด๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด Haswell, Broadwell, Skylake, Kaby Lake ๋ฐ Coffee Lake์์ haswell
ํ์ ๊ตฌ์ฑ์ ์ฌ์ฉํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ BLIS ์ปค๋ ์ฝ๋๊ฐ ์ ๊ฒฝ ์ฐ๋ ๊ฑฐ์ ๋ชจ๋ ๋์ผํ ๋ฒกํฐ ISA๋ฅผ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์
๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ ๊ฑฐ์ ์ฌ์ฉ์๊ฐ ๊ด์ฌ์ ๊ฐ์ง ํ์๊ฐ์๋ ๊ตฌํ ์ธ๋ถ ์ฌํญ์
๋๋ค. ./configure auto
๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฆ์ด zen
์ด๋ haswell
์ด๋ ์๊ด์์ด ๊ฑฐ์ ํญ์ ์์คํ
์ ๊ฐ์ฅ ์ ํฉํ ํ์ ๊ตฌ์ฑ ๋ฐ ์ปค๋ ์ธํธ๋ฅผ ์ป์ ์ ์์ต๋๋ค. ์ง๊ธ์ ์ค๋ ๋ฉ ์ฒด๊ณ๋ฅผ ์ต์ ์ผ๋ก ์ ํํ๋ ๋ฐ์์ด ๋ ๋ง์ ์ค์ต ์ ๊ทผ ๋ฐฉ์์ ์ทจํด์ผํ๋ฉฐ, ์ฌ๊ธฐ์์ Jeff๊ฐ ์ธ๊ธ ํ SoC / ํ๋ซํผ ํตํฉ์ด ํ์ํฉ๋๋ค.
@jeffhammond ์ ์ config
๋๋ ํ ๋ฆฌ)์ ์ด๋ฆ. ์ด์ BLIS๊ฐ ์๋ฅผ ๋ค์ด ./configure haswell
๋ฅผ ํตํด ํ์ ๊ตฌ์ฑ์ ์๋์ผ๋ก ์๋ณํด์ผํ๋ค๋ฉด ์ค์ผ์ผ์ด ๊ทํ์ ์ ์์ ์ ๋ฆฌํ๊ฒ ํ์ ์ค๋ค๊ณ ์๊ฐํฉ๋๋ค. ํ์ง๋ง ./configure auto
์ (๋) ๊ฝค ์ ์๋ํ๋ฏ๋ก ํ์ฌ๋ก์๋ ํ์ํ์ง ์์ต๋๋ค. (์ํ๋ค๋ฉด์ด ์ฃผ์ ์ ๋ํ ๋ฌธ์ ๋ฅผ ์ด์ด ์ปค๋ฎค๋ํฐ ๊ตฌ์ฑ์๋ค ์ฌ์ด์์ ๋ ๋์ ํ ๋ก ์ ์์ํ ์ ์์ต๋๋ค. ์ถฉ๋ถํ ์์๊ฐ ์์ผ๋ฉด ํญ์ ๋ง์์ ๋ฐ๊ฟ ์ ์์ต๋๋ค.)
์, ์ด๋ฆ ์ง์ ์ ํญ์ ๋ณต์กํฉ๋๋ค.) @fgvanzee ๋ฐ @jeffhammond ๋ต๋ณ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
# 13132์ โโ# 13158์ ๊ด๋ จ์ด ์์ต๋๋ค.
ํ ๋ก ์ ์กฐ๊ธ ์ํ์ก์ต๋๋ค. numpy์์ BLIS๋ฅผ ๊ณต์์ ์ผ๋ก ์ง์ํ๊ธฐ ์ํด ํด๊ฒฐํด์ผ ํ ๋๋จธ์ง ๋ฌธ์ ๋ ๋ฌด์์ ๋๊น?
์์งํ๊ฒ, ๋๋ conda-forge (cf https://github.com/numpy/numpy/issues/14180#issuecomment-525292558)์์ BLIS๋ก numpy ํ ์คํธ๋ฅผ ์คํํ๋ ค๊ณ ์๋ํ์ผ๋ฉฐ ๋์๊ฒ๋ Linux์์ ๋ชจ๋ ํ ์คํธ๊ฐ ํต๊ณผ๋์์ต๋๋ค (ํ์ง๋ง ์๋ง๋ ๋๋ ๋์น ๊ฒ).
๋ํ ๋์ผํ ํ๊ฒฝ์์ ํ
์คํธ scipy ํ
์คํธ ์ค์ํธ๋ฅผ ์คํํ๋ ค๊ณ ์๋ํ์ผ๋ฉฐ ๋๊ตฐ๊ฐ์ ๋ํ ์๊ฒฌ์ด์๋ ๊ฒฝ์ฐ scipy.linalg
(cf https://github.com/scipy/scipy/issues/10744 ์ฐธ์กฐ)์ ์ฌ๋ฌ ์ค๋ฅ๊ฐ ์์ต๋๋ค. ๊ทธ.
conda-forge์ BLIS๋ libflame
์๋๋ผ BLIS๋ฅผ BLAS ๊ตฌํ์ผ๋ก ์ฌ์ฉํ๋ LAPACK ๊ตฌํ์ผ๋ก ReferenceLAPACK (netlib)์ ์ฌ์ฉํฉ๋๋ค.
conda-forge์ BLIS ์ต์ ์ ๋ํด OpenBLAS ์ต์ ๊ณผ ๋ฌ๋ฆฌ ์์์์ ๋จ์ผ ์ค๋ ๋๋ก ๊ตฌ์ฑ๋์ด ์๋ค๋ ๊ฒ์ด ๋ง์ต๋๊น?
conda-forge ํ ๋ก ์ conda-forge๋ก ์ฎ๊ธฐ๋ ๊ฒ์ด ์๋ง๋ ๋ ์ข์ต๋๋ค ๐
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
MSVC ABI๋ฅผ ๋์์ผ๋กํ๋ clang.exe๋ฅผ ์ฌ์ฉํ์ฌ Windows์ BLIS๋ฅผ ๋น๋ํ๋ ๊ฒ์ ํ์คํ ๊ฐ๋ฅํฉ๋๋ค. ๋ช ์๊ฐ์ ๋ณด๋๊ณ ์ฌ๊ธฐ ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ต๋๋ค. ํ์ํ ๋ณ๊ฒฝ ํ์๋ OpenBLAS์ ๋นํด ๋๋๋๋ก ์ ์์ต๋๋ค.
๋ก๊ทธ๋ ์ฌ๊ธฐ์ ์์ต๋๋ค . ๋ชจ๋ BLIS ๋ฐ BLAS ํ ์คํธ๋ฅผ ํต๊ณผํฉ๋๋ค.