Numpy: Pypi์˜ Windows ํœ  ํŒจํ‚ค์ง€(.whl)

์— ๋งŒ๋“  2015๋…„ 01์›” 22์ผ  ยท  267์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: numpy/numpy

Windows ํœ  ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค์–ด Pypi์— ์˜ฌ๋ ค์ฃผ์„ธ์š”.

ํ˜„์žฌ ์—ฌ๊ธฐ์—์„œ numpy์šฉ Windows ํœ  ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy

ํœ ์ด Pypi ์„œ๋ฒ„ https://pypi.python.org/pypi/ ์—์„œ ์ง์ ‘ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜์—ฌ pip๋กœ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

distribution

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์˜ค ์˜ˆ, ์—ฌ๊ธฐ์—์„œ ๋ฆด๋ฆฌ์Šค ์ ˆ์ฐจ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋‚ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค... IIUC ํ˜„์žฌ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์€ 1.11 ์†Œ์Šค ๋ฆด๋ฆฌ์Šค๊ฐ€ ์—…๋กœ๋“œ๋˜์ž๋งˆ์ž ๊ฑฐ๊ธฐ์— ์žˆ๋Š” ๋ชจ๋“  Windows ์‹œ์Šคํ…œ์ด ๋‹ค์šด๋กœ๋“œ ํœ ์—์„œ ๊ฐ‘์ž๊ธฐ ์ „ํ™˜๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(์˜ˆ ) ์†Œ์Šค๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ๋นŒ๋“œํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค(boo). ์ด๋ ‡๊ฒŒ ํ•˜๋Š” "์˜ฌ๋ฐ”๋ฅธ" ๋ฐฉ๋ฒ•์€ ์ตœ์ข… ๋ฆด๋ฆฌ์Šค์— ํƒœ๊ทธ๊ฐ€ ์ง€์ •๋˜๋ฉด sdist๋ฅผ ์—…๋กœ๋“œํ•˜๊ธฐ _์ „์—_ ๋ชจ๋“  ๋ฐ”์ด๋„ˆ๋ฆฌ ํœ ์„ ๋นŒ๋“œํ•˜๊ณ  ์—…๋กœ๋“œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์งœ์ฆ๋‚ ์ •๋„๋กœ...

๋ชจ๋“  267 ๋Œ“๊ธ€

์ข‹์€ ๋ง์”€์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ๋กœ @carlkl ์ด ์ด๋ฅผ ์‹คํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋’ค์—์„œ ๋งŽ์€ ๋…ธ๋ ฅ์„ ๊ธฐ์šธ์ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ด์ œ ๊ฑฐ์˜ ๋‹ค ์™”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค - @carlkl - ์–ธ์ œ ๊ณต๊ฐœํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๊นŒ?

์ปจํ…์ŠคํŠธ: ์ด๊ฒƒ์ด ์‚ฌ์†Œํ•˜์ง€ ์•Š์€ ์ด์œ ๋Š” ์—ฐ๊ฒฐํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€
Intel์˜ ๋…์  ๋Ÿฐํƒ€์ž„ ๋ฐ ์ˆ˜ํ•™ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜์กดํ•˜๊ธฐ ์œ„ํ•ด
์žฌ๋ฐฐํฌ๋ฅผ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

binstar์— ์ตœ์‹  OpenBLAS ๊ธฐ๋ฐ˜ numpy ๋ฐ scipy ํœ ์„ ๋ฐฐํฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ• ์„ค์น˜ -i https://pypi.binstar.org/carlkl/simple numpy
ํ• ์„ค์น˜ -i https://pypi.binstar.org/carlkl/simple scipy

์ด๊ฒƒ์€ python-2.7 ๋ฐ python-3.4์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ”ํ€ด๋Š” '์‹คํ—˜์šฉ'์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ํ”ผ๋“œ๋ฐฑ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

๊ด‘๋ฒ”์œ„ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์›ํ•œ๋‹ค๋ฉด ์ด๊ฒƒ์„ ๋ชฉ๋ก์œผ๋กœ ๋ณด๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค :-)

2015๋…„ 1์›” 22์ผ ๋ชฉ์š”์ผ ์˜คํ›„ 8์‹œ 54๋ถ„์— carlkl [email protected] ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

binstar์— ์ตœ์‹  OpenBLAS ๊ธฐ๋ฐ˜ numpy ๋ฐ scipy ํœ ์„ ๋ฐฐํฌํ–ˆ์Šต๋‹ˆ๋‹ค.
๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ• ์„ค์น˜ -i https://pypi.binstar.org/carlkl/simple numpy
ํ• ์„ค์น˜ -i https://pypi.binstar.org/carlkl/simple scipy

์ด๊ฒƒ์€ python-2.7 ๋ฐ python-3.4์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ”ํ€ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
'์‹คํ—˜์ '์ด๋‹ค. ํ”ผ๋“œ๋ฐฑ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/numpy/numpy/issues/5479#issuecomment -71096693.

๋‚˜๋‹ค๋‹ˆ์—˜ J. ์Šค๋ฏธ์Šค
๋ฐ•์‚ฌํ›„ ์—ฐ๊ตฌ์› - ์ •๋ณดํ•™ - University of Edinburgh
http://vorpus.org

fwiw ์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ๊ณต์‹ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์ „์— win64์˜ ๊ธฐ๋ณธ ์ •์ˆ˜ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ œ๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ œ์•ˆํ–ˆ์„ ๋•Œ๋„ ์•ฝ๊ฐ„์˜ ์ €ํ•ญ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์•„๋งˆ๋„ ์ด๋ฏธ ๋„ˆ๋ฌด ๋Šฆ์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. (

๋˜ํ•œ Openblas์— ๋Œ€ํ•ด ๋งํ•˜๋ฉด ๋ˆ„๊ตฐ๊ฐ€ ๋””๋ฒ„๊น…์„ ์ข‹์•„ํ•˜์ง€๋งŒ ์ง€์ณค์Šต๋‹ˆ๋‹ค (openblas๋กœ scipy๋ฅผ ๊นจ๋Š” ๋™์ผํ•œ ์‹คํŒจ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค).

test_einsum_sums_float64 (test_einsum.TestEinSum) ... ==31931== Invalid read of size 16
==31931==    at 0x7B28EB9: ddot_k_NEHALEM (in /usr/lib/libopenblasp-r0.2.10.so)
==31931==    by 0x6DBDA90: DOUBLE_dot (arraytypes.c.src:3127)
==31931==    by 0x6E93DEC: cblas_matrixproduct (cblasfuncs.c:528)
==31931==    by 0x6E6B7B3: PyArray_MatrixProduct2 (multiarraymodule.c:994)
==31931==    by 0x6E6E29B: array_matrixproduct (multiarraymodule.c:2276)

์‚ฌ์šฉ๋œ OpenBLAS ๋ฒ„์ „์€ 0.2.12์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์•„์ง ์ด ๋ฒ„์ „์—์„œ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๋ฅผ ๊ฒฝํ—˜ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

scipy ์‹คํŒจ๋Š” https://gist.github.com/carlkl/b05dc6055fd42eba8cc7์— ๋ณต์‚ฌ๋ฉ๋‹ˆ๋‹ค.

http://sourceforge.net/p/mingw-w64/bugs/367 ๋กœ ์ธํ•œ 32๋น„ํŠธ ์ „์šฉ numpy ์˜ค๋ฅ˜

======================================================================
FAIL: test_nan_outputs2 (test_umath.TestHypotSpecialValues)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\tools\wp_279\python-2.7.9rc1\lib\site-packages\numpy\core\tests\test_umath.py", line 411, in test_nan_outputs2
    assert_hypot_isinf(np.nan, np.inf)
  File "D:\tools\wp_279\python-2.7.9rc1\lib\site-packages\numpy\core\tests\test_umath.py", line 402, in assert_hypot_isinf
    "hypot(%s, %s) is %s, not inf" % (x, y, ncu.hypot(x, y)))
  File "D:\tools\wp_279\python-2.7.9rc1\lib\site-packages\numpy\testing\utils.py", line 53, in assert_
    raise AssertionError(smsg)
AssertionError: hypot(nan, inf) is nan, not inf

======================================================================
FAIL: test_umath_complex.TestCabs.test_cabs_inf_nan(<ufunc 'absolute'>, inf, nan, inf)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\tools\wp_279\python-2.7.9rc1\lib\site-packages\nose\case.py", line 197, in runTest
    self.test(*self.arg)
  File "D:\tools\wp_279\python-2.7.9rc1\lib\site-packages\numpy\core\tests\test_umath_complex.py", line 523, in check_real_value
    assert_equal(f(z1), x)
  File "D:\tools\wp_279\python-2.7.9rc1\lib\site-packages\numpy\testing\utils.py", line 275, in assert_equal
    return assert_array_equal(actual, desired, err_msg, verbose)
  File "D:\tools\wp_279\python-2.7.9rc1\lib\site-packages\numpy\testing\utils.py", line 739, in assert_array_equal
    verbose=verbose, header='Arrays are not equal')
  File "D:\tools\wp_279\python-2.7.9rc1\lib\site-packages\numpy\testing\utils.py", line 628, in assert_array_compare
    chk_same_position(x_isnan, y_isnan, hasval='nan')
  File "D:\tools\wp_279\python-2.7.9rc1\lib\site-packages\numpy\testing\utils.py", line 608, in chk_same_position
    raise AssertionError(msg)
AssertionError: 
Arrays are not equal

x and y nan location mismatch:
 x: array([ nan])
 y: array(inf)

======================================================================
FAIL: test_umath_complex.TestCabs.test_cabs_inf_nan(<ufunc 'absolute'>, -inf, nan, inf)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "D:\tools\wp_279\python-2.7.9rc1\lib\site-packages\nose\case.py", line 197, in runTest
    self.test(*self.arg)
  File "D:\tools\wp_279\python-2.7.9rc1\lib\site-packages\numpy\core\tests\test_umath_complex.py", line 523, in check_real_value
    assert_equal(f(z1), x)
  File "D:\tools\wp_279\python-2.7.9rc1\lib\site-packages\numpy\testing\utils.py", line 275, in assert_equal
    return assert_array_equal(actual, desired, err_msg, verbose)
  File "D:\tools\wp_279\python-2.7.9rc1\lib\site-packages\numpy\testing\utils.py", line 739, in assert_array_equal
    verbose=verbose, header='Arrays are not equal')
  File "D:\tools\wp_279\python-2.7.9rc1\lib\site-packages\numpy\testing\utils.py", line 628, in assert_array_compare
    chk_same_position(x_isnan, y_isnan, hasval='nan')
  File "D:\tools\wp_279\python-2.7.9rc1\lib\site-packages\numpy\testing\utils.py", line 608, in chk_same_position
    raise AssertionError(msg)
AssertionError: 
Arrays are not equal

x and y nan location mismatch:
 x: array([ nan])
 y: array(inf)

๋‚˜๋Š” win64 ์ •์ˆ˜ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์— ๋™์˜ํ•˜์ง€ ์•Š์ง€๋งŒ ๊ทธ๊ฒƒ์ด
๋ฐ”ํ€ด์—์„œ ๋ถ„๋ฆฌ๋˜์–ด์•ผ ํ•˜๋Š” ๋ณ„๋„์˜ ๋ฌธ์ œ. ์ด๋žฌ๋‹ค๋ฉด
์ฒ˜์Œ์œผ๋กœ win64 numpy ๋นŒ๋“œ๊ฐ€ ๋„๋ฆฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ด์ง€๋ฉด
๊ทธ๊ฒƒ๋“ค์„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด์ง€๋งŒ ์ด ์‹œ์ ์—์„œ ์ด๋ฏธ ์ˆ˜๋งŽ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ช‡ ๋…„ ๋™์•ˆ ๊ทธ๋“ค์€ cgholke๋‚˜ anaconda ๋“ฑ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํ•˜์ž
๊ทธ๊ฒƒ์„ ๋…๋ฆฝ์ ์ธ ํ† ๋ก ์œผ๋กœ ์ทจ๊ธ‰ํ•ฉ๋‹ˆ๊นŒ?

(์—„๋ฐ€ํžˆ ๋งํ•˜๋ฉด backcompat break์ง€๋งŒ ๊ทธ๋ž˜๋„ ๊ทธ๋Ÿด์‹ธํ•ด ๋ณด์ธ๋‹ค.
์‹ค์ œ๋กœ ๊ฐ์†Œํ•˜๋ฏ€๋กœ
ํ”Œ๋žซํผ ๊ฐ„ ๋น„ํ˜ธํ™˜์„ฑ -- ๋ชจ๋“  ์ด์‹ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋Š” 64๋น„ํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
dtype=int ์ด๋ฏธ.)

2015๋…„ 1์›” 22์ผ ๋ชฉ์š”์ผ ์˜คํ›„ 8์‹œ 59๋ถ„, Julian Taylor [email protected]
์ผ๋‹ค:

fwiw ๊ฐœ์ธ์ ์œผ๋กœ ๊ธฐ๋ณธ ์ •์ˆ˜์˜ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๊ฐ€ ์‹ค์ œ๋กœ ๊ณต์‹ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์ „์— win64
๋‚ด๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ทธ๊ฒƒ์„ ์ œ์•ˆํ–ˆ์„ ๋•Œ ์ €ํ•ญ๋„, ์•„๋งˆ๋„ ์•„๋‚˜์ฝ˜๋‹ค์™€
๋‹ค๋ฅธ ํƒ€์‚ฌ ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ์ด๋ฏธ ๋„ˆ๋ฌด ๋Šฆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ Openblas์— ๋Œ€ํ•ด ๋งํ•˜๋ฉด ๋””๋ฒ„๊น…์„ ์ข‹์•„ํ•˜๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์— ์ง€์ณค์Šต๋‹ˆ๋‹ค.
(openblas๋กœ scipy๋ฅผ ๊นจ๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ์‹คํŒจ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค):

test_einsum_sums_float64 (test_einsum.TestEinSum) ... ==31931== ํฌ๊ธฐ 16์˜ ์ž˜๋ชป๋œ ์ฝ๊ธฐ
==31931== 0x7B28EB9์—์„œ: ddot_k_NEHALEM(/usr/lib/libopenblasp-r0.2.10.so์—์„œ)
==31931== 0x6DBDA90 ๊ธฐ์ค€: DOUBLE_dot(arraytypes.c.src:3127)
==31931== 0x6E93DEC ๊ธฐ์ค€: cblas_matrixproduct(cblasfuncs.c:528)
==31931== 0x6E6B7B3 ๊ธฐ์ค€: PyArray_MatrixProduct2(multiarraymodule.c:994)
==31931== 0x6E6E29B ๊ธฐ์ค€: array_matrixproduct(multiarraymodule.c:2276)

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/numpy/numpy/issues/5479#issuecomment -71097408.

๋‚˜๋‹ค๋‹ˆ์—˜ J. ์Šค๋ฏธ์Šค
๋ฐ•์‚ฌํ›„ ์—ฐ๊ตฌ์› - ์ •๋ณดํ•™ - University of Edinburgh
http://vorpus.org

์ €๋„ ์ด๊ฒƒ์— ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค๋ฅผ ์ง€์›ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

OpenBLAS๋Š” INTERFACE64=1 ๋กœ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๊ณ  numpy๋Š” ์ฒซ ๋ฒˆ์งธ ์‹œ๋„์—์„œ -fdefault-integer-8 ๋กœ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ƒฅ ๋จธ๋ฆฌ ์œ„๋กœ. blas์—์„œ 64๋น„ํŠธ ์ •์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋”์ฐํ•œ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค. ๊ทธ ๊ธธ์„ ๋„ˆ๋ฌด ๋ฉ€๋ฆฌ ๋–จ์–ด์ง€๊ธฐ ์ „์— ๋ฉˆ์ถ”์‹ญ์‹œ์˜ค. ๋‚ด๊ฐ€ ๊ฐ€์„œ ์ˆ˜์ •ํ•˜๊ธฐ ์ „์— Matlab๊ณผ Julia๋Š” ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์œผ๋ฉฐ blas์—์„œ ๊ธฐ์กด์˜ 32๋น„ํŠธ ์ •์ˆ˜๋ฅผ ๊ฐ€์ •ํ•˜๋Š” ๋ชจ๋“  ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์ง€๋‚œ ~5๊ฐœ์›” ๋™์•ˆ Julia์—์„œ ์ˆ˜ํ–‰ํ•œ ์ž‘์—…์€ ์‹ค์ œ๋กœ openblas์˜ ๋ชจ๋“  ๊ธฐํ˜ธ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜์—ฌ 64๋น„ํŠธ int ๋ฒ„์ „์— ๋Œ€ํ•ด _64 ์ ‘๋ฏธ์‚ฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ์„ ํ˜• ๋Œ€์ˆ˜ํ•™์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ๊ฒฝ์šฐ ์ •๋ง ๊ฑฐ๋Œ€ํ•œ ๋ฐฐ์—ด์— ์žˆ์ง€๋งŒ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋™์ผํ•œ ํ”„๋กœ์„ธ์Šค์— ๋กœ๋“œํ•˜๋ฉด ์ด๋ฆ„ ์„€๋„์ž‰๊ณผ ์ž˜๋ชป๋œ ABI๋กœ dgemm ํ˜ธ์ถœ์„ ์‹œ๋„ํ•˜์—ฌ segfault๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„, Numpy์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ”ํ€ด ํŒŒ์ผ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚ด๊ฐ€ ์ง€๊ธˆ ์•Œ๊ณ  ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.
2015๋…„ 6์›” 25์ผ ์˜ค์ „ 4์‹œ 27๋ถ„์— "guyverthree" [email protected] ์ด ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„, ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฐ”ํ€ด ํŒŒ์ผ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?
๋„˜ํ”ผ?

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/numpy/numpy/issues/5479#issuecomment -115215236.

@guyverthree Christoph Gohlke๋Š” Intel์˜ MKL์„ ๋ฐ”ํ€ด๋กœ ์‚ฌ์šฉํ•˜์—ฌ NumPy๋ฅผ ์ถœ์‹œ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ NumPy ๋ฐ”ํ€ด์— ๋Œ€ํ•œ ๋‚ด ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. Carl Kleffner์˜ ์ˆ˜์ •๋œ mingw-w64 ๋„๊ตฌ ์ฒด์ธ ๊ณผ Zhang Xianyi์˜ GotoBLAS OpenBLAS ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Dropbox์—์„œ NumPy ํœ ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. Olivier Grisel์€ ๋‚ด๊ฐ€ ๊ฒŒ์‹œํ•œ OpenBLAS Google ๊ทธ๋ฃน ์Šค๋ ˆ๋“œ ์—์„œ ์‚ฌ์šฉ๋œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณตํ•˜๋„๋ก NumPy ๋นŒ๋“œ๋ด‡์„ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ฐพ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ์ตœ์‹  ๋ฒ„์ „์€ binstar.org์—์„œ ๊ตฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ anaconda.org๊ฐ€ ํ˜„์žฌ ์„ ํ˜ธ๋˜๋Š” ์ƒˆ๋กœ์šด ์ด๋ฆ„์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
py-2.6 .. 3.4(32/64๋น„ํŠธ)์šฉ ํœ ์€ ์•ฝ 2๊ฐœ์›”์ž…๋‹ˆ๋‹ค.

  • numpy-1.9.2
  • scipy-0.15.1
  • scikit-์ด๋ฏธ์ง€-0.11.2

๋‚ด https://bitbucket.org/carlkl/mingw-w64-for-python ๋ฐ ๋‹ค์†Œ ์ตœ๊ทผ์˜ OpenBLAS๋กœ ๋นŒ๋“œํ•˜์‹ญ์‹œ์˜ค.
ํ• ์„ค์น˜:

  • pip install -i https://pypi.binstar.org/carlkl/simple numpy
  • pip install -i https://pypi.binstar.org/carlkl/simple scipy

+1 @carlkl ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์ด ์น˜์ฆˆ ๊ณต์žฅ์˜ NumPy ๋นŒ๋“œ ์—๋„ ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

+1 ๋‚˜๋„ ์ด๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ์‹ถ๋‹ค.

IMHO: ์ด ๋นŒ๋“œ๊ฐ€ ์Šน์ธ๋˜๊ธฐ ์ „์— ํ•ด๊ฒฐํ•ด์•ผ ํ•  ๋ฌธ์ œ๊ฐ€ ์ ์–ด๋„ ์„ธ ๊ฐ€์ง€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • numpy ์ €์žฅ์†Œ์— ๋Œ€ํ•œ mingwpy ํŒจ์น˜๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์•„์ง ์ˆ˜๋™์œผ๋กœ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ ์™ธ์— ๋นŒ๋“œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์—†์Šต๋‹ˆ๋‹ค.
  • ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ MKL DLL์— ๋Œ€ํ•ด ํ•˜๋“œ ๋งํฌ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ํƒ€์‚ฌ Windows ํŒจํ‚ค์ง€(C. Gohlke์— ์˜ํ•ด ๋ฐฐํฌ๋จ)๋Š” ๋ช…์‹œ์ ์œผ๋กœ numpy-MKL์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. scipy๋Š” ์ด์ œ scipy BLAS/Lapack ๊ตฌํ˜„์— ๋Œ€ํ•œ ์•”์‹œ์  ์ข…์†์„ฑ์„ ์œ„ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ ์ด๋Š” ํ–ฅํ›„ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ (numpy-MKL ๋ฐ scipy-MKL) ๋˜๋Š” (numpy-OpenBLAS ๋ฐ scipy-OpenBLAS)๋ฅผ ์„ค์น˜ํ•˜๋ฉด ํ–ฅํ›„ ๋‹ค๋ฅธ ๋ชจ๋“  ํŒจํ‚ค์ง€์— ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

@carlkl : FWIW, ์ €๋Š” @cgohlke ์˜ ํŒจํ‚ค์ง€์— ๋Œ€ํ•ด ๋ณ„๋กœ ๊ฑฑ์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ €์ ˆ๋กœ ํ•ด๊ฒฐ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ €๋Š” ๋ฉ‹์ง„ ๋นŒ๋“œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์— ๋Œ€ํ•ด ๋ณ„๋กœ ๊ฑฑ์ •ํ•˜์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹จ๊ณ„๋ฅผ ๋ฌธ์„œํ™”ํ•˜๋Š” ํ…์ŠคํŠธ ํŒŒ์ผ์ด ์žˆ๋Š” ํ•œ ์ˆ˜๋™ ๋นŒ๋“œ๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๊ฑฑ์ •ํ•˜๋Š” ์ฃผ์š” ๋ฌธ์ œ๋Š” ์ง€์† ๊ฐ€๋Šฅ์„ฑ์ž…๋‹ˆ๋‹ค. ์ด ํ•ญ๋ชฉ์„ ์—…์ŠคํŠธ๋ฆผ์œผ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์œผ๋ฉด ์ƒˆ ๋ฒ„์ „์˜ gcc/mingw-w64/msvc๊ฐ€ ๋‚˜์˜ฌ ๋•Œ๋งˆ๋‹ค ํŒจ์น˜๋ฅผ ๋‹ค์‹œ ํ™•์ธํ•˜๊ณ  ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ ์ผ์–ด๋‚˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋นŒ๋“œ ์ œ๊ณต์„ ์‹œ์ž‘ํ•˜๋Š” ํ•จ์ •์— ๋น ์ง€๊ณ  ์‹ถ์ง€ ์•Š์ง€๋งŒ, ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๊นŒ๋‹ค๋กญ๊ณ  ์˜ค๋ž˜๋œ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ด๋Š” ์ ์  ๋” ๋ฒˆ๊ฑฐ๋กœ์›Œ์ง‘๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์ œ๊ฐ€ ์ด ์—…์ŠคํŠธ๋ฆผ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์ž๊ธˆ์„ ๋ชจ์œผ๋ ค๊ณ  ๋…ธ๋ ฅํ•œ ์ด์œ ์ž…๋‹ˆ๋‹ค... +1์€ ํ›Œ๋ฅญํ•˜๊ณ  ๋ชจ๋“  ๊ฒƒ์ด์ง€๋งŒ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋ˆ์„ ๊ธฐ๋ถ€ํ•˜๊ณ  ์‹ถ๊ฑฐ๋‚˜ ์ผ๋ฐ˜์ ์œผ๋กœ ํŒŒ์ด์ฌ์— gcc๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ๋Š” ํšŒ์‚ฌ๋ฅผ ์•Œ๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ Windows์—์„œ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜๊ณ  ์ด๋ฉ”์ผ์„ ๋ณด๋‚ด์ฃผ์„ธ์š” :-) ([email protected])

$$๊ฐ€ ์—†์ง€๋งŒ ์—ฌ์ „ํžˆ ๋•๊ณ  ์‹ถ๋‹ค๋ฉด mingw-w64์— ํŒจ์น˜๋ฅผ ๋ณด๋‚ด sin ๋ฐ cos์™€ ๊ฐ™์€ ์ดˆ์›” ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ง€์›์„ ๊ฐœ์„ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. (MSVC ABI๋Š” x87 FPU ๋‹จ์œ„๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค๊ณผ ์˜๊ฒฌ์ด ์ผ์น˜ํ•˜์ง€ ์•Š์•„ ๋Œ€๋ถ€๋ถ„์˜ ๋ฌด๋ฃŒ ์†Œํ”„ํŠธ์›จ์–ด ์ˆ˜ํ•™ ํ•จ์ˆ˜๊ฐ€ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€ ๋‚ฌ์Šต๋‹ˆ๋‹ค.) ๋‹คํ–‰ํžˆ Android์˜ " bionic" libc ์ด๋ฏ€๋กœ ABI ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ˆ˜ํ•™์  ๋งˆ์ˆ ์ด๋‚˜ ๊นŠ์€ ํ†ต์ฐฐ๋ ฅ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ด€๋ จ ์†Œ์Šค ํŒŒ์ผ์„ ์ฐพ์•„ ์ถ”์ถœํ•œ ๋‹ค์Œ ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜์˜ mingw-w64 ํŠธ๋ฆฌ์— ๋†“๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๊ณ„์  ๋ฌธ์ œ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ๊ด€์‹ฌ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์œผ๋ฉด ์ด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ๋„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด numfocus๊ฐ€ ์ž๊ธˆ์„ ์กฐ๋‹ฌํ•ด์•ผ ํ•˜๋Š” ์ข…๋ฅ˜์˜ ๊ฒƒ ์•„๋‹Œ๊ฐ€์š”? ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋‹ค์‹œ ๋Œ์•„๊ฐ€์„œ PSF์— ์ง€์›ํ•˜๋Š” ๊ฒƒ์„ ๋‹ค์‹œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๋ˆ์„ ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

+1 Windows์šฉ ํœ ์„ PyPI https://pypi.python.org/pypi/numpy ์— ๊ฒŒ์‹œํ•˜์‹ญ์‹œ์˜ค.

๊ธฐ๋ณธ ์ œ๊ณต๋˜๋Š” Python Windows ์„ค์น˜์—์„œ pip install numpy ๋ฅผ ์‹œ๋„ํ•˜๋ฉด ์•…๋ช… ๋†’๊ฒŒ ๋„์›€์ด ๋˜์ง€ ์•Š๋Š” ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ "vcvarsall.bat๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค"๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

+1์€ Windows ์‚ฌ์šฉ์ž์—๊ฒŒ ์ •๋ง ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

์ด ๋•Œ๋ฌธ์— https://github.com/glumpy/glumpy ์—์„œ ์žฌ์ƒํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Numpy๊ฐ€ Windows์—์„œ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ์ˆ˜๋™ ๋นŒ๋“œ ๋‹จ๊ณ„๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? AppVeyor ์ž‘์—… ์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์œผ๋ฏ€๋กœ GitHub์— ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์—…๋กœ๋“œํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ ๋‹น์žฅ์€ Windows์—์„œ ๋น ๋ฅธ BSD ๋ผ์ด์„ ์Šค ๋ฒ„์ „์˜ numpy๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์ด ๋ง ๊ทธ๋Œ€๋กœ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์ง€๋งŒ ๊ธฐ์ˆ ์  ํ•œ๊ณ„์ž…๋‹ˆ๋‹ค. +1์€ ์–ด๋Š ์ชฝ์ด๋“  ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (appveyor ์ž‘์—…์€ Windows์—์„œ ๋นŒ๋“œ๋˜์ง€๋งŒ ์‹ค์ œ ์ž‘์—…์— ์‹ค์ œ๋กœ ์ ํ•ฉํ•˜์ง€ ์•Š์€ ๋Œ€์ฒด ์ตœ์ ํ™”๋˜์ง€ ์•Š์€ ์„ ํ˜• ๋Œ€์ˆ˜ํ•™ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.) ์ด ์ •๋ ฌ์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ Christoph Gohlke์˜ ์›น์‚ฌ์ดํŠธ์—์„œ ํœ ์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ฑฐ๋‚˜ Anaconda๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ๋‹ค๋ฅธ ๊ณผํ•™์  ํŒŒ์ด์ฌ ๋ฐฐํฌํŒ .

@njsmith ์ข€ ๋” ๊ตฌ์ฒด์ ์œผ๋กœ ๋ง์”€ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์ •ํ™•ํ•œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์ด ํ•ญ๋ชฉ์€ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ €๋Š” '๋ถˆ๊ฐ€๋Šฅ'์ด ๋„ˆ๋ฌด ๊ฐ•ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ™•์‹คํžˆ ์ผ๋ฐ˜์ ์ธ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์€ ์•„์ง ์—†์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์ƒํƒœ์— ๋Œ€ํ•œ ์œ„ํ‚ค ํŽ˜์ด์ง€๋ฅผ ์—ฌ๊ธฐ์— ์˜ฌ๋ ธ์Šต๋‹ˆ๋‹ค. https://github.com/numpy/numpy/wiki/Whats-with-Windows-builds . ๊ด€์‹ฌ ์žˆ๋Š” ๋ถ„๋“ค์€ ์ž์œ ๋กญ๊ฒŒ ์ˆ˜์ •/์ˆ˜์ •ํ•ด์ฃผ์„ธ์š”.

@techtonik : "์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์ •ํ™•ํ•œ ๋ช…๋ น"์€ ์—†์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์กฐํ•ฉํ•œ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. mingwpy.github.io๋Š” ๊ทธ๋Ÿฌํ•œ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์šฐ๋ฆฌ์˜ ๋…ธ๋ ฅ์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋ฌธ์„œํ™”ํ•ฉ๋‹ˆ๋‹ค.

@matthew-brett ์ข‹์•„์š”. We can't use MSVC++ on its own to compile scipy because we need a Fortran compiler. scipy์šฉ์ด์ฃ ? numpy์— ์™œ ํ•„์š”ํ•œ๊ฐ€์š”?

@njsmith http://mingwpy.github.io/issues.html ์€ ์ข‹์€ ๋ถ„์„์ด ํฌํ•จ๋œ ๋ฉ‹์ง„ ์ด๋‹ˆ์…”ํ‹ฐ๋ธŒ์ž…๋‹ˆ๋‹ค. ์—…์ŠคํŠธ๋ฆผ(Python)์ด ์ ˆ๋Œ€ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์€ ์•„์‰ฝ์Šต๋‹ˆ๋‹ค(MSVS๋ฅผ ๋งน๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ). ํ•˜์ง€๋งŒ ํ˜„์žฌ ์ƒํ™ฉ์—์„œ ๋ช…ํ™•ํ•œ ๊ทธ๋ฆผ์„ ์–ป์œผ๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  1. "์˜คํ”ˆ ์ž‘์—…์„ ์œ„ํ•œ ์˜คํ”ˆ ํˆด์ฒด์ธ"์˜ ๋ฌธ์ œ์ž…๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด MSVS๊ฐ€ ์‹ค์ œ๋กœ numpy์˜ C ๋ถ€๋ถ„์„ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ?
  2. mingw๋กœ ์ปดํŒŒ์ผ๋œ ํ™•์žฅ์— ์—ฌ์ „ํžˆ ์ถฉ๋Œ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ง€๊ธˆ์€ ์ดˆ์ ์„ ์ขํžˆ๊ธฐ ์œ„ํ•ด Python 2.7 + Win32๋งŒ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์„ฑ๋Šฅ์€ ํ•„์š”ํ•˜์ง€ ์•Š์ง€๋งŒ(๊ทธ๊ณณ์—์„œ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค) ํ•ด๋‹น ์„ฑ๋Šฅ์— ๋Œ€ํ•œ ๋ฒค์น˜๋งˆํฌ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด PyPI์—์„œ Windows ํœ ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ด ๊ตฌ์„ฑ์— ๋Œ€ํ•ด ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๋‹ค์Œ ์ž‘์—…์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@techtonik , ์ด์ œ https://anaconda.org/carlkl/numpy ๋ฐ https://anaconda.org/carlkl/scipy์—์„œ numpy ๋ฐ scipy ํœ ์˜ ์˜ˆ๋น„ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ฑ๋Šฅ์€ ๊ฑฐ์˜ gohlke์˜ +MKL ํœ ๋งŒํผ ์ข‹์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ง‘์—์„œ ๋‚ด ์œˆ๋„์šฐ ๋ฐ•์Šค์™€ ํ•จ๊ป˜ segfaults๋ฅผ ๋งŒ๋‚˜์ง€ ์•Š์•˜๋‹ค.

์ด ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ ๊ด€๋ จ๋œ ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ๋…ผ์˜๋˜์—ˆ์œผ๋ฉฐ http://mingwpy.github.io (๊ณต์‚ฌ ์ค‘)์— ์š”์•ฝ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. mingw-w64 ๊ธฐ๋ฐ˜ ํˆด์ฒด์ธ _mingwpy_์™€ OpenBLAS์˜ ์กฐํ•ฉ์€ Windows ํ”Œ๋žซํผ์œผ๋กœ ๊ฐ€๋Š” ๊ธธ์ž…๋‹ˆ๋‹ค.

_mingwpy_๋Š” ๊ฐ€์žฅ ์ž˜ ์•Œ๋ ค์ง„ mingw-w64 ๊ธฐ๋ฐ˜ ํˆด์ฒด์ธ(์˜ˆ: _mingw-builds_, _tdm_ ...

์ด ๋ชจ๋“  ๊ฒƒ๊ณผ ๊ทธ ์ด์ƒ์€ https://github.com/mingwpy/mingwpy.github.io์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ ๋˜๋Š” PR์„ ์ž์œ ๋กญ๊ฒŒ ์—ฌ์‹ญ์‹œ์˜ค.

@techtonik : ์—…์ŠคํŠธ๋ฆผ python.org์˜ ์ž…์žฅ์— ๋Œ€ํ•œ ์‹ฌ๊ฐํ•œ ์˜คํ•ด/์˜คํ•ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๋“ค์ด Windows CPython ์ง€์›์˜ ๋ถ„์—ด์„ ์—ฌ๋Ÿฌ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ABI๋กœ ํ™๋ณดํ•˜๋Š” ๊ฒƒ์„ ๊ฑฐ๋ถ€ํ•œ๋‹ค๊ณ  ๋งํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค(๊ทธ๋ฆฌ๊ณ  ์ด์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค). ๊ณต์‹ ์—…์ŠคํŠธ๋ฆผ Windows ๋นŒ๋“œ๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” Steve Dower๋Š” mingwpy๊ฐ€ ์ด๋Ÿฌํ•œ ๋นŒ๋“œ์™€ ํ˜ธํ™˜๋˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋‚ด๋Š” ๋ฐ ๋„์›€์„ ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

pypi์— numpy ํœ ์„ ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•œ IMO์˜ ์ „์ œ ์กฐ๊ฑด์€ (a) ์„ฑ๋Šฅ, (b) ์œ ์ง€ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ, (c) ์ ์ ˆํ•˜๊ฒŒ ๋ผ์ด์„ ์Šค๊ฐ€ ๋ถ€์—ฌ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์—์„œ ๋‹ค๋ฅธ ๊ธฐ์ค€ ์„ธํŠธ๋ฅผ ์ ์šฉํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋ฉด(์ฆ‰, ํœ ์— ๋”์ฐํ•œ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•ด์•ผ ํ•จ) ๋‹ค์Œ ๋‹จ๊ณ„๋Š” ๊ธฐ์ค€์ด ๋” ๋‚˜์€ ๊ฒฝ์šฐ๋ฅผ ๋งŒ๋“œ๋Š” numpy ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ์— ์ด๋ฉ”์ผ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

MSVS๋Š” numpy ์ž์ฒด๋ฅผ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ ์ ˆํ•˜๊ฒŒ ๋ผ์ด์„ ์Šค๊ฐ€ ๋ถ€์—ฌ๋œ ๊ณ ํ’ˆ์งˆ BLAS ๊ตฌํ˜„์„ ๋นŒ๋“œํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์—…์ŠคํŠธ๋ฆผ mingw-w64๋Š” numpy + BLAS(ํŒจ์น˜ ํฌํ•จ)๋ฅผ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์—…์ŠคํŠธ๋ฆผ CPython๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๊ฒฐ๊ณผ๊ฐ€ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค. Carl์˜ mingwpy ๋„๊ตฌ ์ฒด์ธ์€ numpy + BLAS(ํŒจ์น˜ ํฌํ•จ)๋ฅผ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ฒฐ๊ณผ๋Š” ์ผ๋ถ€ ๋ฒ„์ „์˜ python(3.5๋Š” ์•„๋‹˜)์—์„œ ์ž‘๋™ํ•˜์ง€๋งŒ ๋„๊ตฌ ์ฒด์ธ์€ ์ทจ์•ฝํ•˜๊ณ  ํ˜„์žฌ ์ƒํƒœ์—์„œ ์œ ์ง€ ๊ด€๋ฆฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ง ๊ทธ๋Œ€๋กœ Carl์„ ์ œ์™ธํ•˜๊ณ ๋Š” ์•„๋ฌด๋„ ๊ทธ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์–ด ์กŒ๋Š”์ง€ ๋˜๋Š” ๊ทธ๊ฒƒ์„ ๋‹ค์‹œ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. numpy ํ”„๋กœ์ ํŠธ์˜ ์–ด๋Š ๋ˆ„๊ตฌ๋„ ์ด๋Ÿฌํ•œ ์ œํ•œ ์‚ฌํ•ญ์ด ์žˆ๋Š” ๋„๊ตฌ ์ฒด์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ "๊ณต์‹ ๋นŒ๋“œ"๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐ ์ „๋…ํ•  ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ์ง‘์ค‘ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Windows์—๋Š” ๊ณ ํ’ˆ์งˆ numpy ๋นŒ๋“œ์— ๋Œ€ํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ ์†Œ์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •๋ง ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์™œ PyPI์— ์žˆ์„ ์ˆ˜ ์žˆ๋„๋ก ๋‚ฎ์€ ํ’ˆ์งˆ์˜ ๋นŒ๋“œ๋ฅผ ๋˜์ ธ์•ผ ํ•œ๋‹ค๊ณ  ๊ณ ์ง‘ํ•˜์‹ญ๋‹ˆ๊นŒ?

@njsmith ๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€(๊ฐœ๋ฐœ์ž ๋ฆฌ์†Œ์Šค ํˆฌ์ž ์ž์ฒด๋ฅผ ์ •๋‹นํ™”ํ•  ์ˆ˜ ์—†์Œ์„ ์ธ์ •ํ•จ)๋Š” matplotlib ์— ์˜์กดํ•˜๋Š” PyPI์— ๋งค์šฐ ๊ฐ„๋‹จํ•œ ํŒจํ‚ค์ง€๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ๋งํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. numpy ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€์˜ ๊ฒฝ์šฐ ์„ฑ๋Šฅ์€ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์ง€๋งŒ Windows ์‚ฌ์šฉ์ž๊ฐ€ matplotlib , numpy ๋“ฑ์„ ์žฌ๊ท€์ ์œผ๋กœ ์„ค์น˜ํ•˜๋Š” ํŒจํ‚ค์ง€๋ฅผ pip install ____ $ ํ•˜๋ฉด ํ›จ์”ฌ ์‰ฝ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ Python ๋นŒ๋“œ ์ƒํƒœ๊ณ„๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ์„ค์น˜ํ•  URL์„ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ๋ณด๋‹ค ์„ค๋ช…ํ•˜์‹ญ์‹œ์˜ค. ๋”ฐ๋ผ์„œ ๋Œ€๋ถ€๋ถ„ ์„ค์น˜ ์ง€์นจ์„ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ์ œ ๊ฒฝ์šฐ๋ฅผ ์ •๋‹นํ™”ํ•˜๋ ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋‹จ์ง€ ์—ฌ๋Ÿฌ๋ถ„์ด ๊ถ๊ธˆํ•ด ํ•˜๋Š” ๋Œ€๋กœ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

@johnthagen : ์•„, ๋ฌผ๋ก ์ž…๋‹ˆ๋‹ค. ๊ฑฑ์ • ๋งˆ์„ธ์š”! ๋‚˜๋Š” ์ด๊ฒƒ์ด ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ”๋žŒ์งํ•œ ์ด์œ ๋ฅผ ์™„์ „ํžˆ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ์ด ๋Œ“๊ธ€์—์„œ ๋‚ด๊ฐ€ ์‹ฌ์ˆ ๊ถ‚๊ฒŒ ๋Š๊ปด์ง„๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ ๋ฐ”๋กœ ๋‚˜์™€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ง€๋‚œ 1๋…„ ๋™์•ˆ ์—„์ฒญ๋‚œ ์‹œ๊ฐ„์„ ๋ณด๋ƒˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค :-). ๋‚˜๋Š” ๋‹จ์ง€ @techtonik ์—๊ฒŒ ๋ฌผ์–ด๋ณธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ทธ๋“ค์ด "๋‚˜๋Š” ๋‹จ์ง€ ํ•˜๋‚˜์˜ ์ž‘์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‹œ๋„ํ•˜๊ณ  ์‹ถ๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์€ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค"๋ผ๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ ธ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋“ค์ด ๋‹จ์ง€ ํ•˜๋‚˜์˜ ์ž‘์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‹œ๋„ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋‚˜๋Š” ๊ทธ๋“ค์ด PyPI ๋ถ€๋ถ„์— ๊ด€์‹ฌ์„ ๊ฐ–๋Š” ์ด์œ ๋ฅผ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค :-)

(์šฐ๋ฆฌ๊ฐ€ pypi์— ์˜ฌ๋ฆฌ๋Š” ๋ชจ๋“  ํœ ์€ ์ˆ˜๋งŒ ๋ช…์˜ ์‚ฌ๋žŒ๋“ค์ด ์ฆ‰์‹œ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ช…์‹ฌํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์€ ์ด ์Šค๋ ˆ๋“œ๋ฅผ ์ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ๋ฌด์—‡์ด๋“  ์šฐ๋ฆฌ๋Š” ์‹ค์ œ๋กœ ๊ด‘๋ฒ”์œ„ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋Œ€ํ•ด ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ œ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.)

ATLAS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Python 2.7์šฉ 32๋น„ํŠธ numpy ํœ ์„ ์ถœ์‹œํ•˜๋Š” ๊ฒƒ์€ ๋ณธ์งˆ์ ์œผ๋กœ ๊ฐ„๋‹จํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. SSE2์—ฌ์•ผ ํ•˜๋ฏ€๋กœ SSE ์ง€์นจ ์—†์ด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜์ง€๋งŒ ์ด๋Š” ๊ทนํžˆ ์ผ๋ถ€์˜ ์‚ฌ์šฉ์ž์—๊ฒŒ๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ํ˜„์žฌ ๋ฆด๋ฆฌ์Šค ๋„๊ตฌ ๋ชจ์Œ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ pip๊ฐ€ 32๋น„ํŠธ์šฉ ๋ฐ”์ด๋„ˆ๋ฆฌ ํœ ์„ ์ œ๊ณตํ•˜์ง€๋งŒ 64๋น„ํŠธ์šฉ ์†Œ์Šค ์„ค์น˜๋กœ ํด๋ฐฑํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์œ ์šฉํ• ๊นŒ์š”?

@njsmith ์ •๋ณด ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋ชจ๋‘์˜ ๋…ธ๊ณ ์— ๊ฒฝ์˜๋ฅผ ํ‘œํ•ฉ๋‹ˆ๋‹ค :)

ATLAS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Python 2.7์šฉ 32๋น„ํŠธ numpy ํœ ์„ ์ถœ์‹œํ•˜๋Š” ๊ฒƒ์€ ๋ณธ์งˆ์ ์œผ๋กœ ๊ฐ„๋‹จํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. SSE2์—ฌ์•ผ ํ•˜๋ฏ€๋กœ SSE ์ง€์นจ ์—†์ด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜์ง€๋งŒ ์ด๋Š” ๊ทนํžˆ ์ผ๋ถ€์˜ ์‚ฌ์šฉ์ž์—๊ฒŒ๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ํ˜„์žฌ ๋ฆด๋ฆฌ์Šค ๋„๊ตฌ ๋ชจ์Œ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ pip๊ฐ€ 32๋น„ํŠธ์šฉ ๋ฐ”์ด๋„ˆ๋ฆฌ ํœ ์„ ์ œ๊ณตํ•˜์ง€๋งŒ 64๋น„ํŠธ์šฉ ์†Œ์Šค ์„ค์น˜๋กœ ํด๋ฐฑํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์œ ์šฉํ• ๊นŒ์š”?

@matthew-brett ํ˜„์žฌ numpy-vendor ์„ค์ •์ด ๊นจ์กŒ์Šต๋‹ˆ๋‹ค. fromfile ์— segfault๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ ํ•ธ๋“ค ์ฒ˜๋ฆฌ๊ฐ€ ์—‰๋ง์ด ๋˜์—ˆ๊ณ  ์ด๊ฒƒ์ด Wine ๋ฒ„์ „, Ubuntu ๋ฒ„์ „์˜ ๋ณ€๊ฒฝ ๋˜๋Š” (์•„๋งˆ๋„) numpy ์ž์ฒด์˜ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ๊ฒƒ์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์— ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์€ ์‹œ๊ฐ„ ๋‚ญ๋น„๋ผ๊ณ  ๋งํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ทธ ์‹œ๊ฐ„์„ mingwpy์— ๋„ฃ๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋” ์ƒ์‚ฐ์ ์ž…๋‹ˆ๋‹ค.

OpenBLAS(Int32 Windows 64, v0.2.15 ์‚ฌ์ „ ์ปดํŒŒ์ผ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ) ๋ฐ MKL(MKL์˜ ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ผ์ด์„ ์Šค ์‚ฌ์šฉ, ์ฆ‰ ๋ฌด๋ฃŒ ๋ฐฐํฌ)๋กœ ์ปดํŒŒ์ผ๋œ NumPy 1.10.4๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ... SciPy๋ฅผ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ gfortran ์ปดํŒŒ์ผ๋Ÿฌ "fortan ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ"์„ ์ฐพ๋Š” ๋ถ€๋ถ„์ด ์ž‘์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. Ananconda๋Š” ์ด๋Ÿฌํ•œ ๋นŒ๋“œ๋ฅผ ์ง์ ‘ ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์ง€์›ํ•˜๋ฏ€๋กœ ifort.exe๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Microsoft Visual Studio Community 2015๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Python 3.5์šฉ์œผ๋กœ ์ปดํŒŒ์ผํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐํฌ์šฉ์œผ๋กœ ํŒจํ‚ค์ง•ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ๋‹ค๋ฉด github ๋˜๋Š” anaconda์˜ ์›น์‚ฌ์ดํŠธ์— ์—…๋กœ๋“œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@mrslezak : ์•„๋งˆ๋„ ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ scipy ๊ฐœ๋ฐœ์ž ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ์— ๊ฒŒ์‹œํ•˜๊ฑฐ๋‚˜ ์ž„์˜์˜ ๊ธฐ์กด ๋ฒ„๊ทธ์— ๊ฒŒ์‹œํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค scipy์—์„œ ์ƒˆ ๋ฒ„๊ทธ๋ฅผ ์—ฌ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค :-)

์ •๋ง ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์™œ PyPI์— ์žˆ์„ ์ˆ˜ ์žˆ๋„๋ก ๋‚ฎ์€ ํ’ˆ์งˆ์˜ ๋นŒ๋“œ๋ฅผ ๋˜์ ธ์•ผ ํ•œ๋‹ค๊ณ  ๊ณ ์ง‘ํ•˜์‹ญ๋‹ˆ๊นŒ?

์•ผํฌ ๋ฉด๋„์— ์ง€์ณค๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์„ฑ๊ณผ๋ฅผ ์›ํ•˜๊ณ  ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ทธ๊ฒƒ์„ ์œ„ํ•ด ์ž์›์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์ข‹์€ ์ผ์ด๋ผ๋Š” ๊ฒƒ์„ ์••๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐœ์ธ์ ์œผ๋กœ ์ด ์ž‘์—…์„ ์™„๋ฃŒํ•˜๋Š” ๋ฐ ๋”ฐ๋ฅด๋Š” ๋ณต์žก์„ฑ์€ ์—„์ฒญ๋‚˜๋ฏ€๋กœ ์—ฌ๋Ÿฌ๋ถ„์ด ์ด ์ผ์„ ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž„ ๋ฟ์ž…๋‹ˆ๋‹ค. ์ ˆ๋Œ€ ์ผ์–ด๋‚˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๊ณ  2~3๋…„ ์•ˆ์— ์ผ์–ด๋‚  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๊ฐ„ ๋™์•ˆ ์‚ฌ๋žŒ๋“ค์€ ๊ณ„์†ํ•ด์„œ ๋ฒฝ์— ๋ถ€๋”ชํžˆ๊ณ  NumPy๋ฅผ ๊ฐ„์ ‘ ์ข…์†์„ฑ์˜ ์ง์ ‘ ์„ค์น˜๊ฐ€ ํ•„์š”ํ•œ PyPI์˜ ๋ชจ๋“  Windows ๋ฐ”์ด๋„ˆ๋ฆฌ ๋‹ค์šด๋กœ๋“œ์— ๋น„๋ก€ํ•˜์—ฌ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•ฉ๋‹ˆ๋‹ค.

ํ—‰. ์•„๋งˆ ๋‚ด๊ฐ€ ํ‰์ƒ ์“ด ๊ฐ€์žฅ ๊ธด ์˜์–ด ๋ฌธ์žฅ์ผ ๊ฒƒ์ด๋‹ค. =)

@techtonik - ๋‚˜๋Š” ๋‹น์‹ ์˜ ์ขŒ์ ˆ์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ์ค‘ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ด์— ๋Œ€ํ•ด ์ขŒ์ ˆ๊ฐ์„ ๋Š๋ผ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@carlkl - ์—ฌ๊ธฐ์—์„œ ๊ท€ํ•˜์˜ ํ”ผ๋“œ๋ฐฑ์„ ์›ํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์—๊ฒŒ numpy ์œˆ๋„์šฐ ํœ ์„ ์˜ฌ๋ ค์•ผ ํ•œ๋‹ค๋Š” ๊ฐ•ํ•œ ์••๋ ฅ์ด ๋ถ„๋ช…ํžˆ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๋ช‡ ์ฃผ ์ „์— ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ๋‹ค์šด๋กœ๋“œ๋œ ํœ  ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. https://gist.github.com/dstufft/1dda9a9f87ee7121e0ee . matplotlib, scikit-learn ๋ฐ pandas ์ฐฝ ํœ ์€ ์œ„์น˜ 3, 4 ๋ฐ 5์— ์žˆ์Šต๋‹ˆ๋‹ค. numpy ์ฐฝ ํœ ์— ๋Œ€ํ•œ ํฐ ์‹œ์žฅ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ์งˆ๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1) ๋‹จ๊ธฐ์—์„œ ์ค‘๊ธฐ(์˜ˆ: 6๊ฐœ์›”)์— pypi์—์„œ ์ž‘๋™ํ•˜๊ณ  ๊ฑฐ์˜ ์ตœ์ ์˜ numpy ํœ ์„ ์–ป๋Š” ๋ฐ ์ „๋…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด์— ๋Œ€ํ•œ ๋Œ€๋‹ต์€ '์˜ˆ'์ž…๋‹ˆ๋‹ค.
2) ๊ทธ ๋™์•ˆ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋„๋ก ์ตœ์ ํ™”๋˜์ง€ ์•Š์€ numpy ํœ ์„ ์˜ฌ๋ฆด ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์งˆ๋ฌธ 2๊ฐ€ ๋” ์–ด๋ ต์Šต๋‹ˆ๋‹ค. "์ตœ์ ํ™”๋˜์ง€ ์•Š์Œ"์€ ๋Š๋ฆฌ๊ฑฐ๋‚˜(์ตœ์ ํ™”๋œ blas/lapack ์—†์Œ) ์ง€์›ํ•˜๊ธฐ ์–ด๋ ต๋‹ค(6๊ฐœ์›” ๋‚ด์— ๋นŒ๋“œ๋ฅผ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ณด์žฅ ์—†์Œ)๋ฅผ ์˜๋ฏธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

"๋Š๋ฆผ"์— ๋ฐ˜๋Œ€ํ•˜๋Š” ์ฃผ์žฅ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํœ ์ด Windows์—์„œ ์ž‘๋™ํ•˜๊ธฐ ์‹œ์ž‘ํ•  ๋•Œ "์–ด์นด์šดํŠธ์—์„œ pypi์—์„œ numpy ํœ ์„ ๋‹ค์šด๋กœ๋“œํ•˜์ง€ ์•Š์Œ"์— ๋Œ€ํ•œ ๋‹ต๋ณ€์œผ๋กœ ์Šคํƒ์˜ค๋ฒ„ํ”Œ๋กœ ์งˆ๋ฌธ์„ ์ฆ‰์‹œ ํŠธ๋ฆฌ๊ฑฐํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ ๋Œ€๋‹ต์ด ํ•ฉ๋ฆฌ์ ์ด๊ณ  ์šฐ๋ฆฌ์—๊ฒŒ ์ƒ์ฒ˜๋ฅผ ์ค„๋งŒํผ ์˜ค๋ž˜ ๊ฐˆ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ตœ์ ํ™”๋˜์ง€ ์•Š์€ ์˜๋ฏธ, ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ง€์›ํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๊ฝค ๋นจ๋ฆฌ ์žฅ๊ธฐ์ ์ธ ์†”๋ฃจ์…˜์„ ์ฐพ๋Š” ๋ฐ ์ •๋ง๋กœ ์ „๋…ํ•œ๋‹ค๋ฉด ํ•จ๊ป˜ ์‚ด ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์–ผ๋งˆ ์ „ ์ €๋Š” Windows์šฉ ATLAS ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค. http://nipy.bic.berkeley.edu/scipy_installers/atlas_builds/

์ด ATLAS ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๋Š” numpy ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ด๋ฏธ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด ๋งž์Šต๋‹ˆ๊นŒ?

์–ด๋–ค ๊ฒฝ์šฐ์—, ์šฐ๋ฆฌ๋Š” ์™œ ๊ทธ๊ฒƒ๋“ค์„ ์˜ฌ๋ ค๋†“์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

1) ๋‹จ๊ธฐ์—์„œ ์ค‘๊ธฐ(์˜ˆ: 6๊ฐœ์›”)์— pypi์—์„œ ์ž‘๋™ํ•˜๊ณ  ๊ฑฐ์˜ ์ตœ์ ์˜ numpy ํœ ์„ ์–ป๋Š” ๋ฐ ์ „๋…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด์— ๋Œ€ํ•œ ๋Œ€๋‹ต์€ '์˜ˆ'์ž…๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๊ทธ๋•Œ์ฏค์ด๋ฉด mingwpy ์ œ์•ˆ์— ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ๊ทธ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์บ์‹œํ•˜์ง€ ์•Š์•˜์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. :)

2) ๊ทธ ๋™์•ˆ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋„๋ก ์ตœ์ ํ™”๋˜์ง€ ์•Š์€ numpy ํœ ์„ ์˜ฌ๋ฆด ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

ATLAS ๋นŒ๋“œ๊ฐ€ Cygwin์œผ๋กœ ์™„๋ฃŒ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๊ทธ๋ƒฅ ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๊ณ  MingwPy์˜ ์ผ๋ถ€ ๋ฒ„์ „์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๊นŒ?

๋‚ด ATLAS ๋นŒ๋“œ๋Š” Cygwin์œผ๋กœ ์™„๋ฃŒ๋˜์—ˆ์ง€๋งŒ Cygwin.dll์— ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ MSVC๋กœ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

mingwpy๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ ์‹œ๊ฐ„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. gcc ๋„๊ตฌ ์ฒด์ธ, OpenBLAS๋ฅผ ๋นŒ๋“œํ•œ ๋‹ค์Œ ๋‹ค๋ฅธ ๋ณ€ํ˜•์œผ๋กœ numpy/scipy๋ฅผ ๋นŒ๋“œํ•˜๋ ค๋ฉด ๋นŒ๋“œ ๋ฐ ํ…Œ์ŠคํŠธ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋“  ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋จผ์ € ๊ฒŒ์‹œํ•˜์ง€ ์•Š๊ณ  ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๊ฒŒ์‹œํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. gcc-5.3.0์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” mingwpy์™€ OpenBLAS๊ฐ€ ๊ฑฐ์˜ ์ค€๋น„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‹จ๊ณ„๋Š” ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ numpy ๋ฐ scipy ๋ฐ”ํ€ด๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ํ† ๋ก ๊ณผ numpy ์Šค๋ ˆ๋“œ "Multi-distribution Linux wheel - please test"์— ๋Œ€ํ•œ ์ตœ์‹  ๊ธฐ์—ฌ๋Š” OpenBLAS๊ฐ€ OpenBLAS๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” Windows numpy ํœ ์„ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” ํ’ˆ์งˆ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•œ ์งˆ๋ฌธ์œผ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋Œ€์‹  ์•„ํ‹€๋ผ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์€ ์†”๋ฃจ์…˜์ธ์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ๋‹จ๊ณ„์—์„œ ๋จผ์ € ๋‘ ๊ฐ€์ง€ ๋ณ€ํ˜•์œผ๋กœ numpy ํœ ์„ ๋นŒ๋“œํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ถ”์ธกํ•˜๊ณ  / ์šฐ๋ฆฌ๊ฐ€ OpenBLAS๊ฐ€ ์ˆ˜์šฉ ๊ฐ€๋Šฅํ•œ ํ’ˆ์งˆ์ด๋ผ๋Š” ๋‹จ๊ณ„๋ฅผ ์–ด๋–ป๊ฒŒ๋“  ์–ป์„ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋•Œ๊นŒ์ง€๋Š” ATLAS numpy ํœ ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ์ ์ ˆํ•œ ์‹œ๊ธฐ์— OpenBLAS ํœ ๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 32๋น„ํŠธ ๋นŒ๋“œ์— ๋Œ€ํ•ด SSE2 ๊ฒ€์‚ฌ๋ฅผ ์ž…๋ ฅํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. http://mingwpy.github.io/blas_lapack.html#atlas

PyPI ํŽ˜์ด์ง€ ์ƒ๋‹จ์— ์ง„ํ–‰ ์ƒ์ž๋ฅผ ๋ฐฐ์น˜ํ•˜๋ฉด ๋” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๋ฌธ์ œ์— ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ด๋‹ˆ์…”ํ‹ฐ๋ธŒ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋ถ€ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค ํฌํ•จ). ์ƒ์ž์—๋Š” ํ˜„์žฌ ์ „๋žต, ์Šน์ธ ๊ธฐ์ค€(์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•œ ๋งํฌ?), ์ƒํƒœ ๋ฐ ์ตœ์ข… ๋ฒ„์ „์ด ์ค€๋น„๋˜์—ˆ์„ ๋•Œ ์ˆ˜ํ–‰ํ•  ์ž‘์—…(์ฃผ ๋ฒ„์ „์„ ๋†’์ด์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?)์ด ๋‚˜์—ด๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@matthew-brett ๋ฌด์–ธ๊ฐ€๋ฅผ ๋˜์ง€๊ฒ ๋‹ค๋Š” ๋‹น์‹ ์˜ ์ œ์•ˆ์ด ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ์ง€ ์•„์ง ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? MingwPy๋ผ๋ฉด ์–ด๋–ค ์ˆœ์„œ๋กœ ํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ๊ณ„ํš์ด ์žˆ๊ณ  ์ง€๊ธˆ์€ ๋„ˆ๋ฌด ์ด๋ฅธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ gcc์ธ ๊ฒฝ์šฐ ์ •์  ์—ฐ๊ฒฐ ๋ฌธ์ œ์™€ DLL ๋ฌธ์ œ ๋ฐฐํฌ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

๋‚ด ์•„์ด๋””์–ด๋Š” MSVC๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ATLAS๋กœ numpy๋ฅผ ์ปดํŒŒ์ผํ•˜๋Š” ๊ฒƒ์ด ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๊ทธ๊ฒƒ์€ scipy์—๊ฒŒ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์ง€๋งŒ ์ ์–ด๋„ ์‚ฌ๋žŒ๋“ค์€ ์ฐฝ ๋ฐ”ํ€ด๋ฅผ ๋ฐฐ์†กํ•˜๋Š” ๊ฒƒ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฉ๊ธˆ ์‹œ๋„ํ–ˆ๋Š”๋ฐ unresolved external symbol __gfortran_compare_string ํ˜•์‹์˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ATLAS ๋ฐ”์ด๋„ˆ๋ฆฌ์— gfortran ๋Ÿฐํƒ€์ž„์— ๋Œ€ํ•œ ์ผ๋ถ€ ๋งค๋‹ฌ๋ ค ์žˆ๋Š” ์ฐธ์กฐ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. @carlkl - ๋””๋ฒ„๊ทธ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ œ์•ˆ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‹ค๋ฅธ ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ์˜ค๋Š” ์ •์  ๊ฐœ์ฒด ํŒŒ์ผ์„ ํ˜ผํ•ฉํ•˜๋Š” ๊ฒƒ์€ ์•…๋งˆ๊ฐ€ ์„ฑ์ˆ˜๋ฅผ ํ”ผํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํ”ผํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ์ž‘๋™ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์ปดํŒŒ์ผ๋Ÿฌ ์กฐํ•ฉ ์„ธํŠธ์—์„œ๋Š” ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.
BTW: MS ์ž์ฒด๋Š” ๋‹ค๋ฅธ ๋ฒ„์ „์˜ Visual Studio์—์„œ ์ •์  ๊ฐœ์ฒด๋ฅผ ํ˜ผํ•ฉํ•˜๋Š” ๊ฒƒ์„ ๊ณต์‹์ ์œผ๋กœ ์ง€์›ํ•˜๊ฑฐ๋‚˜ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ช‡ ์ฃผ ์ „์— ์ด ์งˆ๋ฌธ์ด ๋œจ๋ฉด์„œ ๋ช‡ ๊ฐ€์ง€ ํ…Œ์ŠคํŠธ๋ฅผ ํ–ˆ์Šต๋‹ˆ๋‹ค. mingwpy๊ฐ€ ๋งŒ๋“  ์ •์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ npymath.a๋ฅผ MSVC ์ปดํŒŒ์ผ๋Ÿฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์›์น™์  ์œผ๋กœ gcc ๋Ÿฐํƒ€์ž„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์„ ํƒํ•œ ์ผ๋ถ€ ๊ฐœ์ฒด๊ฐ€ ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ถ”๊ฐ€๋˜๋ฉด ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๋Ÿฌํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์ด ๋ถˆ์•ˆ์ •ํ•˜๊ณ  ์ทจ์•ฝํ•˜๋‹ค๋Š” ๊ฒฐ๋ก ์— ๋„๋‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค.

์•„ํ‹€๋ผ์Šค๊ฐ€ numpy ํœ ์„ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•œ ์˜ต์…˜์ด๋ผ๋ฉด DLL๋กœ ๋นŒ๋“œํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด์˜๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‹ค๋ฅธ ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ์˜ค๋Š” ์ •์  ๊ฐœ์ฒด ํŒŒ์ผ์„ ํ˜ผํ•ฉํ•˜๋Š” ๊ฒƒ์€ ์•…๋งˆ๊ฐ€ ์„ฑ์ˆ˜๋ฅผ ํ”ผํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํ”ผํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” https://mingwpy.github.io/motivation.html (Why page) ์— ๋™์  ๋กœ๋“œ ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ณ  ์ง์ ‘์ ์ธ ์„ค๋ช…์ด ๋ถ€์กฑํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ .dll์—์„œ ๋กœ๋“œ๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ํŒŒ์ผ ๊ด€๋ฆฌ์ž๊ฐ€ Windows์— ๊ธฐ๋ณธ์ด๋ฉฐ "์ •ํ™•ํžˆ ๋™์ผํ•œ ์ปดํŒŒ์ผ๋Ÿฌ"์— ๋Œ€ํ•ด ์ด ๋ฌธ์ œ๊ฐ€ ์—†๋Š” Far Manager์™€ ์ด์•ผ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค. Python์ด ์™œ ๊ทธ๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ .dll์—์„œ ๋ชจ๋“ˆ์„ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

@techtonik , ๋‚ด ์˜๊ฒฌ์€ ๋‹ค๋ฅธ ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ์ƒ์„ฑ๋œ ๊ฐœ์ฒด ํŒŒ์ผ์„ ๋‹จ์ผ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ(DLL ๋˜๋Š” EXE)๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ _์ •์  ๊ฐœ์ฒด ํŒŒ์ผ์„ ํ˜ผํ•ฉํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ฃผ์˜ํ•ด์„œ ๋‹ค๋ฃจ๋ฉด ์ž˜ ํ…Œ์ŠคํŠธ๋œ ์ผ๋ถ€ ์ƒํ™ฉ์—์„œ ์ž‘๋™ _ํ•  ์ˆ˜_ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋ฐฉ๋ฒ•์€ ์•„๋‹™๋‹ˆ๋‹ค.

๊ณตํ†ต ํ”„๋กœ์„ธ์Šค ๊ณต๊ฐ„์—์„œ ๋‹ค๋ฅธ ์ปดํŒŒ์ผ๋Ÿฌ์˜ DLL ์ƒํ˜ธ ์šด์šฉ์„ฑ์€ ์™„์ „ํžˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ ์„ค๋ช…์ž๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ๋™์ผํ•œ MS ๋Ÿฐํƒ€์ž„ DLL์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๋‹ค๋ฅธ ๊ฐ€๋Šฅํ•œ ABI ๋ฌธ์ œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์‚ฌ์šฉ ์ค‘์ธ ์ปดํŒŒ์ผ๋Ÿฌ์— ๋”ฐ๋ผ ๋””๋ฒ„๊น…์„ ์œ„ํ•ด ๋‹ค๋ฅธ ๋””๋ฒ„๊ฑฐ ์„ธํŠธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

minwgpy๋Š” ํ‘œ์ค€ MSVC CPython ๋นŒ๋“œ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด mingw-w64์˜ ๋„์›€์œผ๋กœ Python ํ™•์žฅ ๋นŒ๋“œ๋ฅผ ์ง€์›ํ•˜๋Š” ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.

ํ™•์ธ - ATLAS ๋นŒ๋“œ์— ๋Œ€ํ•ด MSVC ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ numpy๋ฅผ ๋นŒ๋“œํ–ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ ATLAS ๋นŒ๋“œ:

http://nipy.bic.berkeley.edu/scipy_installers/atlas_builds/atlas-3.10.1-sse2-32.tgz

ATLAS dll์„ ๋นŒ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋ณธ์ ์ธ ์ง€์นจ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  numpy ํ…Œ์ŠคํŠธ๋Š” f2py ์Šคํฌ๋ฆฝํŠธ ๊ฒ€์‚ฌ๋ฅผ ์ œ์™ธํ•˜๊ณ  ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ์—๋Š” ์ด๋Š” ๋ฌด๋‚œํ•œ ์‹คํŒจ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„๋Š” ํœ  ๋‚ด๋ถ€์— ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. @carlkl - ํ˜„์žฌ ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋ฐ˜๊ฐ‘์Šต๋‹ˆ๋‹ค. ํœ ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•๋„ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
๋ฐ”์ด๋„ˆ๋ฆฌ ํฌํ•จ - MKL ๋นŒ๋“œ๋ฅผ ๊ฒŒ์‹œํ•˜๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด OpenBlas๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•˜๋‚˜.
2016๋…„ 2์›” 11์ผ ์˜คํ›„ 1์‹œ 28๋ถ„์— "Matthew Brett" [email protected] ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

ํ™•์ธ - ATLAS ๋นŒ๋“œ์— ๋Œ€ํ•ด MSVC ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ numpy๋ฅผ ๋นŒ๋“œํ–ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ ATLAS ๋นŒ๋“œ:

http://nipy.bic.berkeley.edu/scipy_installers/atlas_builds/atlas-3.10.1-sse2-32.tgz

ATLAS๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋ณธ์ ์ธ ์ง€์นจ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
DLL.

๋ชจ๋“  numpy ํ…Œ์ŠคํŠธ๋Š” f2py ์Šคํฌ๋ฆฝํŠธ ๊ฒ€์‚ฌ์™€ ๋ณ„๋„๋กœ ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค.
์–‘์„ฑ ์‹คํŒจ.

๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„๋Š” ํœ  ๋‚ด๋ถ€์— ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. @carkl
https://github.com/carlkl - ํ˜„์žฌ ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ๋ฐฉ๋ฒ•
์ €๊ฒƒ?

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/numpy/numpy/issues/5479#issuecomment -183021728.

๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„๋Š” ํœ  ๋‚ด๋ถ€์— ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  SSE2 ์ˆ˜ํ‘œ์™€ ์šฐ์•„ํ•œ ๊ตฌ์ œ๊ธˆ์œต?

@mrslezak - ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ multiarray.pyd๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋™์•ˆ ํ”„๋กœ์„ธ์Šค ๊ณต๊ฐ„์— ์›์ž์ ์œผ๋กœ ๋กœ๋“œ๋˜๊ธฐ ๋•Œ๋ฌธ์— numpy/core ํด๋”์— ๋„ฃ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„๋Š” ํœ  ๋‚ด๋ถ€์— ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ฐฐ์†กํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@matthew-brett: ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” "์˜ฌ๋ฐ”๋ฅธ" ๋ฐฉ๋ฒ•์€ ๋ฌธ์„œ๊ฐ€ ๋งค์šฐ ์—ด์•…ํ•˜์ง€๋งŒ ์•„๋งˆ๋„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” SxS ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ํ†ตํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  99% ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๋งŽ์ด ์ฝ๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์–ด๋Š ์‹œ์ ์— ์•‰์•„์„œ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์‹œ๋„ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ €์—๊ฒŒ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค :-).

(๋‹ค๋ฅธ ๋ชจ๋“  ์ ‘๊ทผ ๋ฐฉ์‹์˜ ๋ฌธ์ œ๋Š” IIUC ์ฐฝ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ€์ ธ์˜จ ๋ชจ๋“  dll์˜ ๋‹จ์ผ ์ „์—ญ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์œ ์ง€ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋Š” ๋‘ ๊ฐœ์˜ ํ™•์žฅ์ด ๋ชจ๋‘ foo.dll์ด๋ผ๋Š” ํŒŒ์ผ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ ๋จผ์ € ๋กœ๋“œ๋˜๋Š” ํ™•์žฅ์ด ํ•ด๋‹น ๋ฒ„์ „์„ ๊ฐ–๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. foo.dll "win" ๋ฐ ๋‹ค๋ฅธ ํ™•์žฅ์€ ๊ฒฐ๊ตญ ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค -- ๊ณ ์ „์ ์ธ "dll ์ง€์˜ฅ" ๋ฌธ์ œ ๊ทธ๋ฆฌ๊ณ  IIUC๋Š” ์ด ๋™์ž‘์„ ํ”ผํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ SxS ๊ธฐ๊ณ„๋ฅผ ํ†ตํ•˜๋Š” ๊ฒƒ๋งŒํผ์ด๋‚˜ ์ถ”์•…ํ•ฉ๋‹ˆ๋‹ค.)

Nathaniel - ์—ฌ๊ธฐ์— SxS ์–ด์…ˆ๋ธ”๋ฆฌ์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ์ผ์Šต๋‹ˆ๋‹ค. https://github.com/numpy/numpy/wiki/windows-dll-notes#side -by-side-assemblies

๋‚ด ์ตœ์ข… ๊ฒฐ๋ก ์€ ํฌ๋ง์ด ์—†์œผ๋ฉฐ, ์–ด์จŒ๋“  ํ”„๋กœ์„ธ์Šค๋ณ„๋กœ ๊ณ ์œ ํ•œ ๋ฐฉ์‹์œผ๋กœ DLL ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ธ ๋Œ€์•ˆ์ด๋ผ๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

Ralf - ์„ค์น˜ ํ”„๋กœ์„ธ์Šค์— SSE2 ๋“ฑ ํ›„ํฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ณต์‹ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ์ œ์•ˆ: https://github.com/numpy/numpy/pull/7231

@matthew-brett: ๋‚˜๋Š” ๊ทธ ๋…ธํŠธ๋ฅผ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ.... ๊ทธ๋ฆฌ๊ณ  ํ—‰ ํ•œ์ˆจ, ๊ฐ€๋ง ์—†๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๊ฐ™์€ ๋””๋ ‰ํ† ๋ฆฌ ๋ฌธ์ œ ๋•Œ๋ฌธ์—? ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? (์ €๋Š” ์•„์ง PE ํŒŒ์ผ์— ๋Œ€ํ•ด patchelf --replace ์— ํ•ด๋‹นํ•˜๋Š” ๊ฒƒ์„ ์ฐพ์ง€ ๋ชปํ–ˆ๊ณ  .lib ํŒŒ์ผ์„ ์žฌ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ์‚ฌ์†Œํ•œ ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค. mingw-w64๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ๋‚˜์˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. .dll ์— ์ง์ ‘ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์ ์–ด๋„ libgfortran ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ํ•„์š”๊ฐ€ ์—†๋‹ค๋ฉด...)

(์ด ๋ชฉ๋ก ์–ด๋”˜๊ฐ€์— patchelf --replace ์— ํ•ด๋‹นํ•˜๋Š” PE๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: http://www.woodmannsfortress.com/collaborative/tools/index.php/Category:Import_Editors)

์ด ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ DLL ๊ฒ€์ƒ‰ ์ค‘์— ์„ ํ˜ธ๋˜๊ธฐ ๋•Œ๋ฌธ์— multiarray.pyd์™€ ํ•จ๊ป˜ satlas.dll (๋˜๋Š” ๋Œ€์•ˆ์ ์œผ๋กœ libopenblaspy.dll )๋ฅผ ๋กœ๋“œํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ด DLL์ด python์—์„œ ํ”„๋กœ์„ธ์Šค ๊ณต๊ฐ„์œผ๋กœ LoadLibraryEx ๋ฅผ ํ†ตํ•ด ๋กœ๋“œ๋œ๋‹ค๋Š” ์‚ฌ์‹ค ๋•Œ๋ฌธ์— ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. numpy/core ํด๋”๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์ ธ์˜ค๊ธฐ ์ค‘์— blas ์ข…์† python ํ™•์žฅ์ด ๊ฐ€์žฅ ๋จผ์ € ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ฐ™์€ ์ด๋ฆ„์˜ DLL์„ ๋กœ๋“œํ•˜๋ ค๋Š” ์ถ”๊ฐ€ ์‹œ๋„๋Š” ์ด DLL์ด ์ด๋ฏธ ํ”„๋กœ์„ธ์Šค ๊ณต๊ฐ„์— ๋กœ๋“œ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค. Windows๋Š” DLL BTW์˜ ์ด๋ฆ„์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

DLL ์ง€์˜ฅ ์‹œ์ž‘ ๊ทธ๋Ÿฌํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ _further_ DLL์— ์ข…์†๋˜์ง€๋งŒ satlas.dll ๋ฐ libopenblaspy.dll ๊ฐ€ ๋ชจ๋‘ ์ž์ฒด ํฌํ•จ๋˜์–ด ์žˆ๊ณ  ํ‘œ์ค€ Windows ์‹œ์Šคํ…œ DLL์—๋งŒ ์˜์กดํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ •์ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ DLL์ด๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, gcc ๋Ÿฐํƒ€์ž„ ์ฝ”๋“œ๊ฐ€ ์ •์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

_๋น„๊ต์šฉ_: MKL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด PATH ์„ numpy/core ๋กœ ์ผ์‹œ์ ์œผ๋กœ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ ์ด์ „ MKL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ Windows ์‹œ์Šคํ…œ ํด๋”์— ์žˆ๋Š” ๊ฒฝ์šฐ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

@matthew-brett @njsmith : DLL ์ด๋ฆ„ ๋ณ€๊ฒฝ: ์–ด๋–ค ์šฉ๋„๋กœ ์ข‹์€๊ฐ€์š”?

@carlkl : ์šฐ๋ฆฌ๊ฐ€ ๊ฑฑ์ •ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” numpy๊ฐ€ atlas.dll ๋ฅผ ํฌํ•จํ•˜๊ณ  scipy๊ฐ€ atlas.dll ๋ฅผ ํฌํ•จํ•˜๊ณ  ์–ด๋Š ์‹œ์ ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ scipy๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ณ  atlas.dll ์˜ ์ตœ์‹  ๋ฒ„์ „์„ ์–ป๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. atlas.dll ์˜ ์ด์ „ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ scipy๊ฐ€ ์ตœ์‹  ๋ฒ„์ „์— ์˜์กดํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ •ํ™•ํžˆ ์–ด๋–ค ํŒจํ‚ค์ง€์˜ ๋นŒ๋“œ๊ฐ€ ๊ด€๋ จ๋˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ˆœ์„œ์— ๋”ฐ๋ผ ๋ฌด์ž‘์œ„๋กœ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ numpy์— atlas.dll ๋ผ๋Š” DLL์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด ํ”„๋กœ์„ธ์Šค ์ „์ฒด DLL ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ atlas.dll ๋ผ๋Š” ์ด๋ฆ„์„ "ํด๋ ˆ์ž„"ํ•˜๊ณ  ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๊ฐ€ ํ•ด๋‹น DLL์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ฐจ๋‹จํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฆ„.

๋‘ ๊ฐ€์ง€ ๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜์€ (a) SxS/activation-contexts ํ•ญ๋ชฉ์ด ์ž‘๋™ํ•˜๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ํ”„๋กœ์„ธ์Šค ์ „์ฒด DLL ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜ (b) numpy์— numpy-atlas.dll ๋ฐ scipy๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. scipy-atlas.dll ํฌํ•จํ•˜๋ฉด ์ถฉ๋Œ ์—†์ด ๋™์ผํ•œ ํ”„๋กœ์„ธ์Šค ์ „์ฒด ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜๋Š” ๋‘˜ ๋‹ค dll์„ ์ œ๊ณตํ•˜๋Š” ๋ณ„๋„์˜ clib_atlas ํŒจํ‚ค์ง€์— ์˜์กดํ•œ๋‹ค๋ฉด? ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ฒ„์ „ ์ข…์†์„ฑ ์š”๊ตฌ ์‚ฌํ•ญ์€ Python ํŒจํ‚ค์ง€์— ๋Œ€ํ•ด ํ‰์†Œ์™€ ๊ฐ™์ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@tkelman : ๋ฒค๋” DLL๊ณผ ๋ณ„๋„๋กœ ๋ฐฐํฌ๋œ DLL์„ ๋ชจ๋‘ ์ง€์›ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ์˜ต์…˜ ๋ชจ๋‘ ๋‹ค๋ฅธ ์ƒํ™ฉ์— ์ ํ•ฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํŒ๋งค ๋œ ์ผ€์ด์Šค๋Š” ์‹œ์ž‘ํ•˜๊ธฐ๊ฐ€ ํ›จ์”ฌ ์‰ฝ์Šต๋‹ˆ๋‹ค :-)

๋‚˜๋Š” side-by-side ์†”๋ฃจ์…˜์ด Windows system32์— ์„ค์น˜ํ•˜๋ ค๋ฉด ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌ์ง€ ๋งˆ์„ธ์š”.

์–ด์…ˆ๋ธ”๋ฆฌ๊ฐ€ ๊ณ ์œ ํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŠธ๋ฆฌ์— ์žˆ๋Š” '๋น„๊ณต๊ฐœ' ๋ณ‘๋ ฌ ์–ด์…ˆ๋ธ”๋ฆฌ๋„ ์žˆ์ง€๋งŒ ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ƒ์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ฒฝ๋กœ ๋งˆ์ปค๋Š” ๋‘ ๊ฐœ๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ..\..\some_assembly ์„ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ..\..\..\some_assembly ์•„๋‹™๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด scipy/first/second/third/something.pyd ๋Š” third ๋˜๋Š” second ๋˜๋Š” first ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ณ‘๋ ฌ ์–ด์…ˆ๋ธ”๋ฆฌ๋งŒ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ์ง€๋งŒ scipy ์—๋Š” ์—†์Šต๋‹ˆ๋‹ค. (๋˜๋Š” ๊ทธ ์•ˆ์˜ ๋‹ค๋ฅธ ๋””๋ ‰ํ† ๋ฆฌ.

์ž, ์—ฌ๊ธฐ์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ๋ฐ”ํ€ด๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

http://nipy.bic.berkeley.edu/scipy_installers/atlas_builds/

ํ‰์†Œ์™€ ๊ฐ™์ด:

pip install -f https://nipy.bic.berkeley.edu/scipy_installers/atlas_builds numpy

์—ฌ๊ธฐ์—์„œ ๋งค์šฐ ์กฐ์žกํ•œ ๋นŒ๋“œ ์ž๋™ํ™”: https://github.com/matthew-brett/np-wheel-builder

ํœ ์€ f2py ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฐ€์งœ ์‹คํŒจ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค(๊ทธ ํ…Œ์ŠคํŠธ์˜ ๋ฒ„๊ทธ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค).

๋˜ํ•œ ๋™์ผํ•œ ์›น ์ฃผ์†Œ์—์„œ Python 2.7, 3.4, 3.5์šฉ 64๋น„ํŠธ ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค.

@matthew-brett, ์ด ํŒŒ์ผ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค.

@matthew-brett, SxS ์–ด์…ˆ๋ธ”๋ฆฌ ๊ธฐ์ˆ ์€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(VS2010 ์ดํ›„) . https://en.wikipedia.org/wiki/Side-by-side_assembly๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

DLL ํŒŒ์ผ ์ด๋ฆ„์— ๋ฒ„์ „ ๋ฒˆํ˜ธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ: libopenblaspy_0.15..dll ๋˜๋Š” libatlas_3.10.1.dll ๋˜๋Š” ์œ ์‚ฌ. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ฒ„์ „์ด ์ง€์ •๋œ DLL์— ๋Œ€ํ•œ ์ „๋‹ฌ์ž DLL๋กœ ์‚ฌ์šฉ๋˜๋Š” _proxy DLL_์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Numpy ๋ฐ scipy ํ™•์žฅ์€ _libblaslapack.dll_์ด๋ผ๋Š” ํ”„๋ก์‹œ DLL์— ๋Œ€ํ•ด ๋นŒ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•„ํ‹€๋ผ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์›์น™์ ์œผ๋กœ ๋Ÿฐํƒ€์ž„์— ์ตœ์ ํ™”๋œ ์•„ํ‹€๋ผ์Šค DLL์„ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (openblas๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ํ•„์š”ํ•˜์ง€ ์•Š์Œ)

์ด ๋ชจ๋“  ๊ฒƒ์€ clib_openblas ๋ฐ/๋˜๋Š” clib_atlas ํŒจํ‚ค์ง€์˜ ๋„์›€์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์ด์ œ ์ „๋‹ฌ์ž DLL์— ๋Œ€ํ•œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค.) Numpy ์ž์ฒด์—๋Š” ์•„ํ‹€๋ผ์Šค ๋˜๋Š” ์˜คํ”ˆ๋ธ”๋ผ์Šค๊ฐ€ ์žฅ์ฐฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. clib_openblas ๋˜๋Š” clib_atlas๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ๋กœ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@carlkl : ์œ„ํ‚คํ”ผ๋””์•„ ํŽ˜์ด์ง€๊ฐ€ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ณ  VS 2010์ด _ํŠน์ • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•ด_ SxS๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋งํ•˜๋ ค๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ, ์ผ๋ฐ˜์ ์œผ๋กœ SxS๋Š” ํ™•์‹คํžˆ ์—ฌ์ „ํžˆ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค(์˜ˆ: ๊ฐ™์€ ํŽ˜์ด์ง€์˜ ๋‚˜์ค‘: "Vista๋ถ€ํ„ฐ, ์šด์˜ ์ฒด์ œ๋Š” ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ์—๋„ WinSxS๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.")

msvc๋กœ ํฌ์›Œ๋” dll์„ ๋นŒ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํŠน๋ณ„ํ•œ .def ํŒŒ์ผ์„ ์ž‘์„ฑํ•œ ๋‹ค์Œ .dll์„ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํฌ์›Œ๋” dll์€ ์–ด๋–ป๊ฒŒ ๋„์›€์ด ๋ ๊นŒ์š”? (osx ๋˜๋Š” Linux์—์„œ๋Š” ์œ ์šฉํ•œ ๋„๊ตฌ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ Windows์—์„œ๋Š” ์—ฌ์ „ํžˆ ์„ฑ๊ฐ€์‹  ์ „์—ญ dll ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.)

@njsmith , ์šฐ๋ฆฌ๋Š” ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. SxS sitll์ด ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์šด์˜ ์ฒด์ œ ์ž์ฒด ์ด์™ธ์˜ ๋‹ค๋ฅธ ์šฉ๋„๋กœ๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

(1) ๊ฐ€์žฅ ์‰ฌ์šด IMHO ์†”๋ฃจ์…˜์€ Blas Lapack์„ ์ •์ ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ๊ฑฐ๋Œ€ํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๋ฏ€๋กœ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์ ์–ด๋„ ํ•„์ž๋Š”).
(2) ๋‘ ๋ฒˆ์งธ๋กœ ์‰ฌ์šด ์†”๋ฃจ์…˜์€ numpy/core ์— DLL์„ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
(3) ์„ธ ๋ฒˆ์งธ ์†”๋ฃจ์…˜์€ ์™ธ๋ถ€ Blas/Lapack ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์ข…์†์„ฑ์„ _force_ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ํŒจํ‚ค์ง€๋Š” ๋ฒ„์ „์ด ์ง€์ •๋˜๊ณ  ๋‹จ์ˆœํžˆ Blas Lapack DLL์„ ๋ฏธ๋ฆฌ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. pip๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์˜ฌ๋ฐ”๋ฅธ ๋ฒ„์ „์˜ DLL์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
(3) ๊ทธ๋Ÿฌํ•œ ์ œํ•œ๋œ ์ข…์†์„ฑ์ด ํ™˜์˜๋ฐ›์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ numpy ๋ฐ scipy ์ž์ฒด์—์„œ ์ œ๊ณตํ•˜๋Š” DLL๋กœ ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ DLL์€ ์™ธ๋ถ€ DLL์ด ์„ค์น˜๋˜์ง€ ์•Š์€ _์ƒํ™ฉ์—์„œ๋งŒ_ ๋กœ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์™ธ๋ถ€ Blas/Lapack ํŒจํ‚ค์ง€๊ฐ€ ์„ ํ˜ธ๋˜์ง€๋งŒ ๊ผญ ํ•„์š”ํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.
์ด๋Ÿฌํ•œ ์†”๋ฃจ์…˜์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ ์€ numpy/scipy๋ฅผ ๋‹ค์‹œ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ ๋„ openblas/atlas์˜ ์ตœ์‹  ๋ฒ„๊ทธ ์ˆ˜์ • ๋ฆด๋ฆฌ์Šค๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
(4) ๋งค๋‹ˆํŽ˜์ŠคํŠธ ๋ฐ SxS ์‚ฌ์šฉ. @njsmith , ์ด ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค - ๋ฐ”ํ€ด์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค - ์ง€๊ธˆ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

SxS ์–ด์…ˆ๋ธ”๋ฆฌ์— ๋Œ€ํ•ด ์—ฐ๋ฝ์„ ๋“œ๋ฆฌ์ง€ ๋ชปํ•ด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. SxS์— ๋Œ€ํ•œ ๋‚˜์˜ 'ํฌ๋ง ์—†๋Š”' ์˜๊ฒฌ์€ ๊ทธ๋‹ค์ง€ ์œ ์šฉํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์••์ถ•์„ ํ’€์–ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ์ž์ฒด ๋ฐ”์ด๋„ˆ๋ฆฌ ํŠธ๋ฆฌ์—์„œ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” SxS ์–ด์…ˆ๋ธ”๋ฆฌ์ธ "๋น„๊ณต๊ฐœ" SxS ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค. SxS ์–ด์…ˆ๋ธ”๋ฆฌ๋Š” "๊ณต์œ "ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณต์œ  ์–ด์…ˆ๋ธ”๋ฆฌ๋Š” Windows ์‹œ์Šคํ…œ ํด๋”๋กœ ์ด๋™ ํ•˜๋ฉฐ MS ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ ํŒจํ‚ค์ง€๋กœ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค . ๊ณต์œ  ์–ด์…ˆ๋ธ”๋ฆฌ๋Š” ํœ ์„ ํ†ตํ•ด ์„ค์น˜ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ์–ด๋–ค ๊ฒฝ์šฐ์—๋„ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ๊ณต์œ  ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ์˜ต์…˜์œผ๋กœ ๊ฑฐ๋ถ€ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ - ์‚ฌ์„ค SxS ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์ฒซ ๋ฒˆ์งธ ๋ฌธ์ œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ด๊ฒƒ์„ ์‹œ๋„ํ•˜๊ณ  ์‹คํ–‰ํ•œ๋‹ค๋ฉด ๊ฝค ์‹ ์„ ํ•œ ๊ธธ์„ ์—ด๊ฒŒ ๋  ๊ฒƒ์ด๋ผ๋Š” ์ ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋ฅผ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ๋‚˜๋Š” Steve Dower์—๊ฒŒ SxS ์–ด์…ˆ๋ธ”๋ฆฌ์— ๋Œ€ํ•ด ๋ฌผ์—ˆ์Šต๋‹ˆ๋‹ค. Steve๋Š” MS์—์„œ ๊ทผ๋ฌดํ•˜๋ฉฐ ํ˜„์žฌ Python Windows ๊ด€๋ฆฌ์ž์ž…๋‹ˆ๋‹ค. ๊ทธ๋Š” ๋‚ด๊ฐ€ ๊ทธ๋“ค์„ ํ”ผํ•˜๋ผ๊ณ  ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ์™€ ํ•จ๊ป˜ ์ผํ•œ ์‚ฌ๋žŒ ์ค‘ ์•„๋ฌด๋„ ๊ทธ๋“ค์— ๋Œ€ํ•ด ์ž˜ ์•Œ๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค. ์œ„์— ๋งํฌ๋œ ๋‚ด ๋ฉ”๋ชจ๋Š” ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ (๋ถ„๋ช…ํžˆ) ์„ฑ๊ณต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๋ช‡ ๊ฐ€์ง€ ์‚ฌ๋ก€๋ฅผ ์ดํ•ดํ•˜๋ ค๋Š” ์‹œ๋„์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์„ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ์ž๋ฃŒ๋Š” ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด์™€ ๊ด€๋ จํ•˜์—ฌ Carl์€ ์ด๋ฏธ MS ์ž์ฒด๊ฐ€ ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์–‘๋ฉด์ ์ธ ํƒœ๋„๋ฅผ ๋ณด์ธ๋‹ค๊ณ  ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, SxS ์–ด์…ˆ๋ธ”๋ฆฌ์˜ ๋ช…๋ฐฑํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ธ MSVC ๋Ÿฐํƒ€์ž„์˜ ๊ฒฝ์šฐ ๊ณ ์œ ํ•œ DLL ์ด๋ฆ„ ์„ ๋Œ€์‹  ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(MSVCR90.DLL, MSVCR100.DLL ๋“ฑ).

SxS ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด "ํ™œ์„ฑํ™” ์ปจํ…์ŠคํŠธ"๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ DLL์„ ๋กœ๋“œํ•ด์•ผ ํ•˜๋Š” ๋ชจ๋“  ์ปดํŒŒ์ผ๋œ ๋ชจ๋“ˆ์— ์ดˆ๊ธฐํ™” ์ƒ์šฉ๊ตฌ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํŽธ์ง‘: Nathaniel์€ DLL(DLL์— ํฌํ•จํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์™ธ๋ถ€ XML ํŒŒ์ผ์ผ ์ˆ˜๋„ ์žˆ์Œ)๊ณผ ๊ด€๋ จ๋œ ๋ณ‘๋ ฌ ์–ด์…ˆ๋ธ”๋ฆฌ "๋งค๋‹ˆํŽ˜์ŠคํŠธ"์˜ ์ฆ๊ฑฐ๊ฐ€ ํ‘œ์‹œ๋˜๋ฉด Windows๊ฐ€ ์ž๋™์œผ๋กœ ์ƒˆ ํ™œ์„ฑํ™” ์ปจํ…์ŠคํŠธ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•œ๋‹ค๊ณ  ์ƒ๊ธฐ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค. .

๊ทธ๋ž˜์„œ ํฌ๋ง์ด ์—†๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํž˜๋“  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๋งค์šฐ ๊ธฐ๋ณธ์ ์ธ ์งˆ๋ฌธ์— ๋Œ€ํ•ด ์œ ๊ฐ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Windows์—์„œ my_symbol $๋ฅผ ํฌํ•จํ•˜๋Š” $ foo.dll ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ•˜๋‚˜์˜ ํ™•์žฅ ๋ชจ๋“ˆ์— ๋กœ๋“œํ•˜๋ฉด bar.dll ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋กœ๋“œํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ฉ๋‹ˆ๊นŒ? ๋‹ค๋ฅธ ํ™•์žฅ ๋ชจ๋“ˆ์— my_symbol ๋„ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด ํ”„๋กœ์„ธ์Šค์—์„œ ๊ฐœ๋ณ„์ ์œผ๋กœ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฏ€๋กœ ์ฒซ ๋ฒˆ์งธ ํ™•์žฅ์€ foo: my_symbol ๋ฅผ ์–ป๊ณ  ๋‘ ๋ฒˆ์งธ ํ™•์žฅ์€ bar:my_symbol ๋ฅผ ์–ป์Šต๋‹ˆ๊นŒ? ์•„๋ฌด๋„ ๋‚˜์—๊ฒŒ ์ฐธ์กฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ทธ๊ฒƒ์ด ๋งž๋‹ค๋ฉด, DLL ์ง€์˜ฅ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์€ ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค(์‚ฌ์šฉ์ž๊ฐ€ ์šฐ๋ฆฌ์˜ ์ •ํ™•ํ•œ DLL์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์˜๋„ํ•˜์ง€ ์•Š์€ ๊ณณ)์—์„œ ์šฐ์—ฐํžˆ ์‚ฌ์šฉ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋งค์šฐ ๋‚ฎ์€ DLL ์ด๋ฆ„์„ ๊ฐ–๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋งํฌํ•˜๋Š” ๋™์•ˆ ๊ฐ ๊ธฐํ˜ธ๋Š” ํ•ด๋‹น ์ด๋ฆ„์œผ๋กœ ์‹๋ณ„๋˜๋Š” ํŠน์ • DLL์— ๋ฐ”์ธ๋”ฉ๋ฉ๋‹ˆ๋‹ค. ๋Ÿฐํƒ€์ž„ ๋™์•ˆ ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง„ DLL์ด ๋‘ ๊ฐœ ์ด์ƒ ์žˆ๋Š” ๊ฒฝ์šฐ ์˜ฌ๋ฐ”๋ฅธ DLL์ด ๋กœ๋“œ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฒ€์ƒ‰ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ์ œ My anaconda.org numpy wheel์€ Julia๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋น„ํ‘œ์ค€ libopenblas,dll๊ณผ ์ด๋ฆ„ ์ถฉ๋Œ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด libopenblas_py_.dll์ด๋ผ๋Š” ์ด๋ฆ„์˜ openblas ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

julia์˜ ์ตœ์‹  ๋ฒ„์ „์€ ์ด์ œ ๋‹ค๋ฅธ ์ด๋ฆ„ libopenblas64_ ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œํ•˜๋Š” ๋น„ํ‘œ์ค€ ABI๋ฅผ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. 32๋น„ํŠธ์—์„œ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์—์„œ 64๋น„ํŠธ ์ •์ˆ˜๋ฅผ ์„ ํƒํ•  ์ด์œ ๊ฐ€ ๋ณ„๋กœ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐํ˜ธ๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด๋ฆ„์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋‚ด ์‹ฌ๋ณผ์˜ ์ด๋ฆ„ ์„€๋„์ž‰์€ ์‹ค์ œ๋กœ Windows๋ณด๋‹ค Linux์™€ osx์—์„œ ๋” ๋ฌธ์ œ์˜€์ง€๋งŒ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด ๋ชจ๋“  ๊ณณ์—์„œ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๊ณ  ํ•ด์„œ ABI๊ฐ€ ๋™์ผํ•œ 32๋น„ํŠธ์—์„œ ๊ฐ€๋Šฅ์„ฑ์ด ๋ฐฐ์ œ๋˜์ง€๋Š” ์•Š์ง€๋งŒ ์„œ๋กœ๋ฅผ ์œ„ํ•ด ๋„ˆ๋ฌด ์˜ค๋ž˜๋˜๊ฑฐ๋‚˜ ๋„ˆ๋ฌด ์ƒˆ๋กœ์šด ๋ฒ„์ „์ด ํ•„์š”ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์ด ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์„œ๋กœ๋ฅผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์•ฝ๊ฐ„ ๋‹ค๋“ฌ์—ˆ์Šต๋‹ˆ๋‹ค. https://github.com/matthew-brett/np-wheel-builder ์ฐธ์กฐ

์ด์ œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•ฉ๋ฆฌ์ ์œผ๋กœ ์ž๋™ํ™”๋˜์—ˆ์œผ๋ฉฐ, ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋‹ค์Œ ๋ช‡ ๋ฆด๋ฆฌ์Šค ๋™์•ˆ ์ด๋Ÿฌํ•œ ํœ ์„ ๊ณ„์† ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์ด ์‹ค์šฉ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. mingwpy๊ฐ€ ์‚ฌ์–‘์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ Windows ๋ฆด๋ฆฌ์Šค ๊ด€๋ฆฌ์ž๋กœ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

์ €๋Š” ์ด ํœ ์„ 32๋น„ํŠธ ๋ฐ 64๋น„ํŠธ Python 2.7, 3.4, 3.5์—์„œ ํ…Œ์ŠคํŠธํ–ˆ์œผ๋ฉฐ ๋‹ค๋ฅธ ๋ช‡ ๊ฐœ๋„ ํ…Œ์ŠคํŠธํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒํƒœ๊ฐ€ ์–‘ํ˜ธํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

OP๊ฐ€ ์š”์ฒญํ•œ ๋Œ€๋กœ pypi์— ์˜ฌ๋ฆด ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ชจ๋‘ ์•ˆ์‹ฌ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์ œ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ์ผ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์—ฌ๋Ÿฌ๋ถ„ ์•ˆ๋…•ํ•˜์„ธ์š”! ๊ฝค ์˜ค๋žซ๋™์•ˆ ์†Œ์Šค์—์„œ numpy ๋ฐ scipy ๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์‚ฌ์‹ค์— ์ขŒ์ ˆํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ํ† ๋ก ์— ๋›ฐ์–ด๋“ค๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ „๋ฉด์—์„œ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

@matthew-brett: ์ด ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ๋Š” ํ›Œ๋ฅญ ํ•ฉ๋‹ˆ๋‹ค. PyPI์— ๋„๋‹ฌํ•˜์ง€ ๋ชปํ•˜๋”๋ผ๋„ ์ด๊ฒƒ์€ ์†Œ์Šค์—์„œ numpy ๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋งค์šฐ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ฐฉ๋ฒ•์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค( ์—ฌ๊ธฐ์—์„œ ๋‚ด๊ฐ€ ์—ฐ ์ด ๋ฌธ์ œ ์ฐธ์กฐ). ๋˜ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ scipy ๋ฅผ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์— ๋งค์šฐ ๊ฐ€๊น์ง€๋งŒ ํ…Œ์ŠคํŠธ๋Š” Python ์–ด๋”˜๊ฐ€์—์„œ segfault๋ฅผ ์ผ์œผํ‚ค๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์‹ค์ œ๋กœ numpy ํœ ์„ ๊ตฌ์ถ•ํ•œ ์‚ฌ๋žŒ์„ ์œ„ํ•ด ์†Œ์Šค์—์„œ ์ด๋Ÿฌํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•˜์—ฌ ํ˜„์žฌ ์˜จ๋ผ์ธ์— ์žˆ๋Š” ๊ฒƒ์„ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์„ธ๋ จ๋œ ์ตœ์‹  ๋ฌธ์„œ๋ฅผ ๋งŒ๋“ค๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ „๋ฉด์— ์‚ฌ๋žŒ๋“ค์˜ ์˜๊ฒฌ๋„!

๋งค์šฐ ์œ ์šฉํ•  ํ”ผ๋“œ๋ฐฑ๊ณผ ๋นŒ๋“œ ๋ฌธ์„œํ™” ์ž‘์—…์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

http://mingwpy.github.io ๋ฅผ ๋ณด์…จ์„ ๊ฑฐ๋ผ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  mingw-w64 ํ”„๋กœ์ ํŠธ์™€ mingwpy ํˆด์ฒด์ธ๊ณผ ๊ด€๋ จ๋œ ์ƒ๋‹นํ•œ ์–‘์˜ ์ž๋ฃŒ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@matthew-brett ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! numpy.test() ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค. f2py.py ํ…Œ์ŠคํŠธ๋Š” numpy-SHAd3d2f8e ์—์„œ ์ˆ˜์ •๋œ virtualenvs์˜ test_scripts() ๋ฌธ์ œ์˜€์ง€๋งŒ 3๊ฐœ์˜ ๊ฒฝ๊ณ , 2๊ฐœ์˜ ์ง€์› ์ค‘๋‹จ ๋ฐ 1๊ฐœ์˜ ๋Ÿฐํƒ€์ž„์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ์‚ฌ์†Œํ•œ ์š”์ฒญ์œผ๋กœ repo np-wheel-builder ๋ฐ/๋˜๋Š” PyPI์— ๋นŒ๋“œ ๋ฐฐ์ง€๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? buildbot 0.8์— ์žˆ๋Š” ๊ฒƒ ๊ฐ™์œผ๋ฉฐ ๋ณด๊ธฐ ์ข‹๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ python ํŒจํ‚ค์ง€/๋ฆฌํฌ์ง€ํ† ๋ฆฌ( BuildbotEightStatusShields-0.1 )๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ํŠœ๋‹ ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ATLAS Windows 64๋น„ํŠธ ๋นŒ๋“œ ์—์„œ ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ "ํ•˜๋ฃจ ์ข…์ผ" ๊ฑธ๋ ธ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์ ์ ˆํ•œ ์•„ํ‚คํ…์ฒ˜ ๊ธฐ๋ณธ๊ฐ’์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ฐธ๊ณ : Continuum์€ ์ตœ์ ํ™”๋œ mkl numpy๋กœ Anaconda๋ฅผ ์ถœ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๋“ค์ด ์ด ์Šค๋ ˆ๋“œ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ๋™์ผํ•œ ์•„ํ‹€๋ผ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ๋Š” scipy ๋นŒ๋“œ์˜ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. gfortran์ด ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?

์˜ˆ. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด scipy .f ํŒŒ์ผ์„ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ–‰์šด์„ ๋น•๋‹ˆ๋‹ค! ์•ž์„œ ๋งํ–ˆ๋“ฏ์ด ์ €๋Š” _์ •๋ง ๊ฐ€๊นŒ์›Œ์กŒ์Šต๋‹ˆ๋‹ค_. ํ•˜์ง€๋งŒ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ •๋ง ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค!

์˜ˆ, ATLAS ๋นŒ๋“œ๋Š” ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š” ์‹œ์Šคํ…œ์—์„œ ์•ฝ 8์‹œ๊ฐ„์ด ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. ATLAS ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๋Š” np-wheel-builder repo ์— ์žˆ์Šต๋‹ˆ๋‹ค.

MKL conda ์‚ฌ์šฉ์ž๋ผ๋ฉด ์ข‹์€ ์†Œ์‹์ด์ง€๋งŒ numpy ๋ฐ scipy ๊ฐ€ ์‚ฌ์ „ ์„ค์น˜๋œ Python ๋ฐฐํฌํŒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ํ•œ๋™์•ˆ ์žฅ๋ คํ•ด ์˜จ ๊ฒƒ. MKL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž์ฒด๋„ ๋ฌด๋ฃŒ๋กœ ์–ป์„ ์ˆ˜ ์žˆ์„ ๋•Œ ์ €์—๊ฒŒ ๋ง์”€ํ•ด ์ฃผ์‹ญ์‹œ์˜ค. :)

gfortran์œผ๋กœ ๋นŒ๋“œํ•˜๋Š” ๊ฒฝ์šฐ - mingwpy๊ฐ€ ์šฐ๋ฆฌ์˜ ์ตœ์„ ์˜ ํฌ๋ง์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@matthew-brett : ์‹œ๊ฐ„์„ ๋‚ด์–ด ATLAS๋ฅผ ๊ตฌ์ถ•ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์ด์ „์— ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ์‹œ์Šคํ…œ๋ณ„ ๋น„ํ˜ธํ™˜์„ฑ์œผ๋กœ ์ธํ•ด ๊ณ„์† ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ์— ๋Œ€ํ•ด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ np-wheel-builder ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ATLAS ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋นŒ๋“œํ–ˆ๋Š”๋ฐ Windows Server 2012 ๋ฐ 64๋น„ํŠธ Cygwin์„ ์ƒˆ๋กœ ์„ค์น˜ํ–ˆ์œผ๋ฉฐ ์ •ํ™•ํ•œ ATLAS ๋ฐ lapack ๋ฒ„์ „์ด ๋‚˜์—ด๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ ์†Œ์Šค ์•„์นด์ด๋ธŒ๋Š” http://nipy.bic.berkeley.edu/scipy_installers/atlas_builds/์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฒ„์ „์˜ ATLAS๊ฐ€ ์žˆ์œผ๋ฉด ์‰ฝ๊ฒŒ ํ„ธ์ด ๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ ...๊ทธ๋Ÿด์ˆ˜๋„ ์žˆ๊ฒ ๋„ค์š”. ๋‹ค์‹œ ํ•œ ๋ฒˆ ๋ง์”€๋“œ๋ฆฌ์ง€๋งŒ, ๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋…ธ๋ ฅ์„ ๊ฐ์•ˆํ•  ๋•Œ ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ์ฒ˜๋Ÿผ ๋งŽ์€ ์‹œ๊ฐ„๊ณผ ๋ฆฌ์†Œ์Šค๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์€ Windows ํ˜ธํ™˜ ATLAS ๋นŒ๋“œ๋ฅผ ์ถœ์‹œํ•  ๋ฐฉ๋ฒ•์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ •๋ง ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค!

@gfyoung

MKL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž์ฒด๋„ ๋ฌด๋ฃŒ๋กœ ์–ป์„ ์ˆ˜ ์žˆ์„ ๋•Œ ์ €์—๊ฒŒ ๋ง์”€ํ•ด ์ฃผ์‹ญ์‹œ์˜ค. :)

https://software.intel.com/sites/campaigns/nest/ ๋ฐ https://registrationcenter.intel.com/en/forms/?productid=2558&licensetype=2 ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ์•„๋‹ˆ๋ฉด ์†Œ์Šค๋ฅผ ์˜๋ฏธํ–ˆ์Šต๋‹ˆ๊นŒ?

@tkelman , ๋ฐฉ๊ธˆ @carlk ์˜ ์ƒˆ๋กœ์šด mingwpy ํ”„๋กœ์ ํŠธ ์‚ฌ์ดํŠธ ์—์„œ ๋ณด์•˜์ง€๋งŒ Intel ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ผ์ด์„ ์Šค Nest์—๋Š” ifort ๊ฐ€ ์—†์œผ๋ฉฐ, ๊ทธ๊ฒƒ์ด ์—†์œผ๋ฉด ์–ผ๋งˆ๋‚˜ scipy์ž…๋‹ˆ๊นŒ?

@tkelman : ์ด๋Ÿฐ, ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ผ์ด์„ ์Šค๋ฅผ ์žŠ์–ด๋ฒ„๋ฆฐ ์ด์œ ๊ฐ€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ @tkelman ์€ ์œ ํšจํ•œ ์š”์ ์„ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค.

@tkelman : MinGW๋กœ ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ ๋‚ด๊ฐ€ ๊ฒฝํ—˜ํ•œ ๋ฐ”์— ๋”ฐ๋ฅด๋ฉด ๋ถˆํ–‰ํžˆ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋กœ ์ธํ•ด numpy ๋ฅผ ์ดˆ๊ณผํ•˜์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค.

@mikofski ๋งž์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ถ€์กฑํ•˜๋ฉด scipy์— ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜๋‚  scipy ๋นŒ๋“œ์— ๋Œ€ํ•œ ์˜ต์…˜์€ mingwpy ๋˜๋Š” ๋ชจ๋“  gcc-all-the-time Python ๋นŒ๋“œ(https://github.com/Alexpux/MINGW-packages/tree/master/mingw-w64- python-scipy). ํ›„์ž๋Š” ๋ฌผ๋ก  msvc ๋นŒ๋“œ cpython ๋˜๋Š” pypi ๋ฐ”์ด๋„ˆ๋ฆฌ์™€ ํ˜ธํ™˜๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ scipy ์ด์™ธ์˜ ๋ชจ๋“  ๋ชจ๋“ˆ์„ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@matthew-brett: Openblas ๋ฐ/๋˜๋Š” MKL์— ๋น„ํ•ด ์ด ATLAS ํœ ์˜ ์†๋„ ๋ถ€์กฑ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

PGI Fortran์„ ์‚ดํŽด ๋ณธ ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? @carkl mingwpy ํ”„๋กœ์ ํŠธ ์‚ฌ์ดํŠธ์—๋Š” ์–ธ๊ธ‰๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•œ๋ฒˆ ์จ๋ณด๊ณ  ๊ทธ ํ† ๋ผ๊ตด๋กœ ๊ฝค ๊ฐ”์—ˆ๋Š”๋ฐ ์‡ผ ์Šคํ† ํผ๊ฐ€ ๋ญ์˜€๋Š”์ง€ ๊ธฐ์–ต์ด ์•ˆ๋‚˜๋„ค์š”. ๋น„๊ณต๊ฐœ ์†Œ์Šค์ธ๋ฐ๋„ ๋ผ์ด์„ ์Šค๊ฐ€ ํ—ˆ์šฉ๋˜๋Š” ๊ฒƒ ๊ฐ™์•„์š”. PGI Fortran์ด msvc์—์„œ ๋” ์ž˜ ์žฌ์ƒ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@mikofski : ๋‚ด ์•ž์—๋Š” ์—†์ง€๋งŒ ์ž‘๋…„์— PGI๋ฅผ ๋ณด์•˜์„ ๋•Œ ๋‚ด ๊ฒฐ๋ก ์€ Intel๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋‚˜๋นด๋‹ค๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค(๋ผ์ด์„ ์Šค์— FOSS ๋น„ํ˜ธํ™˜ ์ œํ•œ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์—์„œ) .

์ข‹์Šต๋‹ˆ๋‹ค. x86 ์•„ํ‚คํ…์ฒ˜์šฉ BLIS/FLAME ์†”๋ฃจ์…˜์„ ๋Œ€์ƒ์œผ๋กœ ์ผ๋ถ€ num focus ์ž๊ธˆ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ถ„๋ช…ํžˆ Nvidia/PGI๋Š” ์˜ฌํ•ด ๋ง๊นŒ์ง€ Fortran ํ”„๋ŸฐํŠธ ์—”๋“œ๋ฅผ LLVM์˜ ์˜คํ”ˆ ์†Œ์Šค๋กœ ์ œ๊ณตํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. https://www.llnl.gov/news/nnsa-national-labs-team-nvidia-develop-open-source-fortran-compiler-technology

์ข‹์Šต๋‹ˆ๋‹ค. x86 ์•„ํ‚คํ…์ฒ˜์šฉ BLIS/FLAME ์†”๋ฃจ์…˜์„ ๋Œ€์ƒ์œผ๋กœ ์ผ๋ถ€ num focus ์ž๊ธˆ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ๋งˆ์„ธ์š”. BLIS๋Š” ๋งค์šฐ ๊ฑด๊ฐ•์— ํ•ด๋กœ์šด ํ”„๋กœ์ ํŠธ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค(libflame์€ ๋”์šฑ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค). ์ปค๋ฐ‹, ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ ํŠธ๋ž˜ํ”ฝ ๋“ฑ์˜ ์ธก๋ฉด์—์„œ ํ™œ๋™์ด ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ์ƒ๋‹นํ•œ ์ž๊ธˆ์„ ํ™•๋ณดํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—(https://github.com/flame/blis#funding), ์ˆ˜์ฒœ ๋‹ฌ๋Ÿฌ๊ฐ€ ๋งˆ๋ฒ•์ฒ˜๋Ÿผ ํ”„๋กœ์ ํŠธ๊ฐ€ ์„ฑ์ˆ™ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋…ผ์˜๊ฐ€ ์–ด๋””์„œ ์™”๋Š”์ง€, ์–ด๋””๋กœ ๊ฐ€๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” Matthew๊ฐ€ ๊ฑฐ์˜ ์™„๋ฃŒํ•œ ์ž„์‹œ ํ•ด๊ฒฐ์ฑ…(ATLAS ์‚ฌ์šฉ)์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ๋” ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋งค์šฐ ์ ๊ทน์ ์œผ๋กœ ์ž‘์—… ์ค‘์ธ ์žฅ๊ธฐ ์†”๋ฃจ์…˜์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(MingwPy + OpenBLAS). ๋˜ํ•œ OpenBLAS๊ฐ€ ํ›จ์”ฌ ๋” ๋„๋ฆฌ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. Scipy ์Šคํƒ๊ณผ Julia ๋ชจ๋‘์—์„œ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋” ๋นจ๋ฆฌ ์„ฑ์ˆ™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@rgommers : @mikofski ์™€ ์ €๋Š” @matthew-brett ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ scipy ๋ฅผ ๊ตฌ์ถ•ํ•˜๋ ค๊ณ  ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€ํ™”๊ฐ€ ์ œ๋Œ€๋กœ ์ง„ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ ๋‘˜ ๋‹ค ํฌํŠธ๋ž€ ์ปดํŒŒ์ผ๋Ÿฌ๋ผ๋Š” ๋™์ผํ•œ ๋ฌธ์ œ์— ์ง๋ฉดํ•ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚˜ ์ž์‹ ์€ ์–ด๋–ค ์ด์œ ๋กœ๋“  ์ˆ˜๋งŽ์€ ๋ฏธํ•ด๊ฒฐ ์™ธ๋ถ€ ์žฅ์น˜๋กœ ์ธํ•ด ๋งŽ์€ ์„ฑ๊ณต ์—†์ด MinGW32์™€ MinGW64 ๋ชจ๋‘์— ์„ค์น˜๋œ gfortran.exe ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.

@gfyoung Matthew์˜ ๋นŒ๋“œ๋Š” MSVC๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. MSVC์™€ ํ•จ๊ป˜ gfortran ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์œผ๋ฉฐ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ์•Œ๋ ค์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ ์ƒํ™ฉ์˜ ์š”์•ฝ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ํฌํŠธ๋ž€์ด ์—†์œผ๋ฉด ์ง€๊ธˆ MSVC๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Fortran์—์„œ๋Š” MingwPy, MSVC + ifort ๋˜๋Š” icc + ifort ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Scipy ์Šคํƒ์˜ ๊ฒฝ์šฐ numpy, scipy ๋“ฑ์„ ์œ„ํ•œ ํœ ์„ ๋งŒ๋“œ๋Š” ๋ฌด๋ฃŒ ์†”๋ฃจ์…˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. MingwPy๊ฐ€ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.

@rgommers ๋Œ€ํ™”๋ฅผ @carlk์œผ๋กœ mingwpy ํ”„๋กœ์ ํŠธ๋Š” ์ด๋ฏธ ๋‚ฉ์ž… ์ดˆ์ ์— ์˜ํ•ด ์ง€์›๋œ๋‹ค. ํšŒ์‚ฌ์—์„œ ์ง€์›์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ์ด๋ฏธ num focus ํšŒ์›์ž…๋‹ˆ๋‹ค. scipy 2829์˜ ์ค‘๊ฐ„์ฏค์— ์ €๋„ ๊ฐ™์€ ๊ฒฐ๋ก ์— ๋„๋‹ฌํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํšจ๊ณผ๊ฐ€ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž„ ๋ฟ์ž…๋‹ˆ๋‹ค. ๋‹จ๊ธฐ์ ์œผ๋กœ๋Š” @cgohlke๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜

๋นŒ๋“œ๋ฅผ pypi๋กœ ํ‘ธ์‹œํ•˜๋Š” ๊ฒƒ ์™ธ์— @matthew-brett์˜ ๋งˆ์ง€๋ง‰ ๋ฌธ์ œ๋Š” np ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์žˆ๋Š” buildbot ๋ฐฉํŒจ์ผ๊นŒ์š”? ๊ฐ์‚ฌ ํ•ด์š”! ๊ทธ๋Ÿฌ๋ฉด ๋‹ซ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‹ซ๊ธฐ ์ „์— ๊ฐ„๋‹จํ•œ ์งˆ๋ฌธ: ATLAS๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก @matthew-brett numpy ๋ฅผ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ifort #$ ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ $ scipy ๋นŒ๋“œ๋ฅผ ์‹œ๋„ํ•˜๋ฉด ๋‚ด ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” MKL์„ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ site.cfg ํŒŒ์ผ๋„ ์„ ํƒ๋ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ numpy ์— ๋Œ€ํ•ด ์„ฑ๊ณต์ ์œผ๋กœ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ…Œ์ŠคํŠธ๋Š” ๋ถ„ ๋ฐ˜์˜ฌ๋ฆผ ์˜ค๋ฅ˜๋กœ ์ธํ•œ ๋ช‡ ๊ฐ€์ง€ ์˜ค๋ฅ˜์— ๋Œ€ํ•ด ์ €์žฅ์„ ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ scipy ๋ฅผ ๋นŒ๋“œํ•  ๋•Œ ๋ฌด์—‡์„ ํ–ˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. MKL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด numpy ๋กœ ์ด๋ฏธ ๋นŒ๋“œ๋œ ATLAS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๊นŒ?

https://github.com/numpy/numpy/wiki/Numerical-software-on-Windows ์— Windows Fortran ์ปดํŒŒ์ผ๋Ÿฌ ์š”์•ฝ์ด

@gfyoung - ์ถ”์ธก๊ณผ ๋จผ ๊ธฐ์–ต์˜ ์กฐํ•ฉ์œผ๋กœ ์ง„ํ–‰ - scipy๋Š” ์ž์ฒด ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋จผ์ € site.cfg ๋ฅผ ์„ ํƒํ•˜๊ณ  ์ด๊ฒƒ์ด ์—†์œผ๋ฉด numpy ๋นŒ๋“œ์˜ ๊ตฌ์„ฑ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ฐจ๋ก€๋กœ ๋‚ด๊ฐ€ ๋ฐ”ํ€ด๋ฅผ ๋งŒ๋“ค ๋•Œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ๋Š” ๊ณณ์„ ๊ฐ€๋ฆฌํ‚ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ np-wheel-builder ์•„ํ‹€๋ผ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ ํƒํ•˜๋ ค๋ฉด scipy์— ๋Œ€ํ•ด site.cfg ๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. build_numpy.py ์Šคํฌ๋ฆฝํŠธ๋Š” numpy ๋นŒ๋“œ์— ๋Œ€ํ•ด ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

BLIS๋Š” ๋งค์šฐ ๊ฑด๊ฐ•์— ํ•ด๋กœ์šด ํ”„๋กœ์ ํŠธ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค(libflame์€ ๋”์šฑ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค). ์ปค๋ฐ‹, ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ ํŠธ๋ž˜ํ”ฝ ๋“ฑ์˜ ์ธก๋ฉด์—์„œ ํ™œ๋™์ด ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค.

์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์šด์˜ํ•˜๋Š” FOSS ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ๋„ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ฑด๊ฐ•์— ํ•ด๋กญ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์„์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋ณธ์งˆ์ ์œผ๋กœ 1์ธ ์‡ผ์ด๊ณ , ๊ทธ๋“ค์€ ๊ทธ๋Ÿฐ ์‹์œผ๋กœ ๊ทธ๊ฒƒ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค(์ ์–ด๋„ ์ง€๊ธˆ์€). ๋‚˜๋Š” ์ง€๋‚œ ~1๋…„ ๋™์•ˆ ๊ทธ๋“ค๊ณผ ๊ณ„์†ํ•ด์„œ ์—ฐ๋ฝ์„ ์ฃผ๊ณ ๋ฐ›์•˜๊ณ  โ€‹โ€‹์ข‹์€ ์†Œ์‹์€ ํ˜„์žฌ ๊ทธ๋“ค์˜ ๋…ธ๋ ฅ์ด ์šฐ๋ฆฌ๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒƒ(๋Ÿฐํƒ€์ž„ ์ปค๋„ ์„ ํƒ ๋ฐ ๋Ÿฐํƒ€์ž„ ์Šค๋ ˆ๋”ฉ ๊ตฌ์„ฑ)์— ์ •ํ™•ํžˆ ์ดˆ์ ์„ ๋งž์ถ”๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜์œ ์†Œ์‹์€ ํ•œ ๊ฑด์ถ•๊ฐ€๊ฐ€ ์›ํ•˜๋Š” ๋Œ€๋กœ ๋ฌผ๊ฑด์„ ์žฌ๋ฐฐ์น˜ํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ ์™ธ์—๋Š” ํ•  ์ผ์ด ๋ณ„๋กœ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 6๊ฐœ์›”์ด ์ง€๋‚˜๋ฉด ํšจ๊ณผ๊ฐ€ ๋‚˜ํƒ€๋‚ ๊นŒ์š”?

BLIS ๋“ฑ์€ ํ˜„์‹œ์ ์—์„œ ์ƒ๋‹นํžˆ ๋จผ ์˜ต์…˜์ธ ๊ฒƒ ๊ฐ™์œผ๋ฉฐ, ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์— ๋Œ€๋น„ํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Nathaniel - ์ข‹์€ ๋ฒค์น˜๋งˆํฌ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์œ„์น˜์— ๋Œ€ํ•œ ์ œ์•ˆ์ด ์žˆ์Šต๋‹ˆ๊นŒ? numpy.bench() ์ด(๊ฐ€) ๋” ์ด์ƒ ์•„๋ฌด ๊ฒƒ๋„ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. asv ์‹คํ–‰์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ Windows numpy์— complex256 ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

asv ์—์„œ ์ž‘๋™ํ•˜๋Š” ๋ถ€๋ถ„์ด ์œ ์šฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ? ๋˜๋Š” %timeit np.dot(big_array, other_big_array) ์กฐ์ฐจ๋„ ์šฐ๋ฆฌ๊ฐ€ ์„œ ์žˆ๋Š” ์œ„์น˜์— ๋Œ€ํ•œ ๋Œ€๋žต์ ์ธ ์•„์ด๋””์–ด๋ฅผ ์–ป๋Š” ๋ฐ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค :-)

๋˜ํ•œ BTW๋Š” Windows delocate ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” Windows DLL ์ „์—ญ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค. https://github.com/njsmith/redll

๋ถˆํ–‰ํžˆ๋„ asv complex256 ์‹คํŒจ๋Š” dtypes์—์„œ ์ „์ฒด ํ…Œ์ŠคํŠธ ์‹œํ€€์Šค๋ฅผ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ๊ณ ์น˜๋Š” ๊ฑด ์–ด๋ ต์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™์•„์š”.

์ด๊ฒƒ์œผ๋กœ ๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธ:

def test_dot():
    """
    Test the dot product
    """
    i = 1000
    a = random((i, i))
    b = numpy.linalg.inv(a)
    result = numpy.dot(a, b) - numpy.eye(i)

Clint Whale์ด ์ „์— ๊ฒฝ๊ณ ํ–ˆ๋“ฏ์ด 64๋น„ํŠธ ATLAS๋Š” Windows์—์„œ ์ž˜ ์ตœ์ ํ™”๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. Christoph Gohlke์˜ ํœ ์„ ํ†ตํ•œ 64๋น„ํŠธ MKL ์‚ฌ์šฉ:

In [9]: %timeit test_dot()
1 loop, best of 3: 764 ms per loop

64๋น„ํŠธ ATLAS๋กœ ์ œ์ž‘๋œ ๋‚ด ํœ :

In [10]: %timeit test_dot()
1 loop, best of 3: 2.41 s per loop

์ฐจ์ด๋Š” 32๋น„ํŠธ ํœ (๋‹ค๋ฅธ 32๋น„ํŠธ ์‹œ์Šคํ…œ์—์„œ)์—์„œ ํ›จ์”ฌ ์ ์Šต๋‹ˆ๋‹ค. MKL:

In [3]: %timeit test_dot()
1 loop, best of 3: 663 ms per loop

๋Œ€ ์•„ํ‹€๋ผ์Šค:

In [4]: %timeit test_dot()
1 loop, best of 3: 1 s per loop

@rcwhaley - ์—ฌ๊ธฐ์— ๋ช‡ ๊ฐ€์ง€ ์ƒ๊ฐ์ด ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ATLAS 3.10.1์ž…๋‹ˆ๋‹ค ...

์—ฌ๊ธฐ์— ๋” ํ˜„๋Œ€์ ์ธ ํ”„๋กœ์„ธ์„œ๋ฅผ ํƒ‘์žฌํ•œ ๋˜ ๋‹ค๋ฅธ Windows 64๋น„ํŠธ ์ปดํ“จํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ~3๋ฐฐ์˜ ์†๋„ ์ €ํ•˜๋ฅผ ๋ณด์ž…๋‹ˆ๋‹ค.

MKL:

In [3]: %timeit test_dot()
1 loop, best of 3: 400 ms per loop

์•„ํ‹€๋ผ์Šค:

In [3]: %timeit test_dot()
1 loop, best of 3: 1.28 s per loop

๋„ค, ๋ณต์žกํ•œ 256 ๋ฌธ์ œ๋Š” ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ต์ง€ ์•Š์Šต๋‹ˆ๋‹ค: https://github.com/numpy/numpy/pull/7251

3x๋Š” ๋งŽ์ง€๋งŒ lapack_lite ๋งŒํผ ๊ทน์ ์ด์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๋งž๋‚˜์š”? ๋‹จ๊ธฐ์ ์ธ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ๋Š” ๊ดœ์ฐฎ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์˜ˆ์ „์˜ 32๋น„ํŠธ .exe ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์ด ๋” ๋‚˜์€ ๊ฒƒ๋„ ์•„๋‹™๋‹ˆ๋‹ค.

๋˜ํ•œ BTW, ์—ฌ๊ธฐ์— Windows DLL ์ „์—ญ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ์†”๋ฃจ์…˜์ด ์žˆ์–ด Windows ํ• ๋‹น์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/njsmith/redll

๋ฉ‹์ง„ ๋ผ์ด์„ ์Šค ์„ค๋ช…:)

@gfyoung 'site.cfg' ๋Š” ๋‹ค์Œ์—์„œ ์ฐพ์Šต๋‹ˆ๋‹ค.

1) ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ๊ธฐ๋ณธ setup.py ํŒŒ์ผ์˜ ๋””๋ ‰ํ† ๋ฆฌ.
2) setup.py ํŒŒ์ผ์„ ~/.numpy-site.cfg ๋กœ ์‹คํ–‰ํ•˜๋Š” ์‚ฌ์šฉ์ž์˜ ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ
3) ์‹œ์Šคํ…œ ์ „์ฒด ๋””๋ ‰ํ† ๋ฆฌ(์ด ํŒŒ์ผ์˜ ์œ„์น˜...)

@rgommers ๋Œ€ํ™”๋ฅผ ๋ฐฉํ•ดํ•ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

๊ฑฑ์ •ํ•˜์ง€ ๋งˆ์„ธ์š”. ์•„๋ฌด ๊ฒƒ๋„ ํƒˆ์„ ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

numpy ์ž‘ํ’ˆ์„ ์œ„ํ•œ @matthew-brett ์†”๋ฃจ์…˜์ด ๋งž์Šต๋‹ˆ๋‹ค. @carlk์˜ mingwpy ํ”„๋กœ์ ํŠธ๋Š” ์ด๋ฏธ num focus๋กœ ์ž๊ธˆ์„ ์ง€์›๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ํšŒ์‚ฌ์—์„œ ์ง€์›์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ์ด๋ฏธ num focus ํšŒ์›์ž…๋‹ˆ๋‹ค. scipy 2829์˜ ์ค‘๊ฐ„์ฏค์— ์ €๋„ ๊ฐ™์€ ๊ฒฐ๋ก ์— ๋„๋‹ฌํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํšจ๊ณผ๊ฐ€ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž„ ๋ฟ์ž…๋‹ˆ๋‹ค. ๋‹จ๊ธฐ์ ์œผ๋กœ๋Š” @cgohlke๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ aconda ๋กœ ์ „ํ™˜ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์‹œ ํ•œ๋ฒˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์‹œ์›ํ•œ. MingwPy์— ๊ด€์‹ฌ์„ ๊ฐ€์ ธ์ฃผ์…”์„œ ๋ฐ˜๊ฐ‘์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ž์ฒด ML์ด ์žˆ์œผ๋ฏ€๋กœ ๊ด€์‹ฌ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://groups.google.com/forum/#!forum/mingwpy

@rgommers , @matthew-brett : ์•„, ์˜ˆ, ๋ฏธ๋ฆฌ MKL๋กœ ๋นŒ๋“œํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” site.cfg ๋ฅผ ATLAS ๋นŒ๋“œ๋กœ ์ง์ ‘ ๊ฐ€๋ฆฌ์ผฐ๊ณ  scipy ๋นŒ๋“œ๋ฅผ ํ–ˆ์ง€๋งŒ ํ…Œ์ŠคํŠธ ์ค‘์— segfaults๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๊ฐ€๊นŒ์ด!

@rgommers - ์˜ˆ - ATLAS๊ฐ€ ์—†์œผ๋ฉด ์„ฑ๋Šฅ์ด ํ›จ์”ฌ ๋‚˜๋น ์ง‘๋‹ˆ๋‹ค(lapack_lite ์‚ฌ์šฉ).

In [2]: %timeit test_dot()
1 loop, best of 3: 17.7 s per loop

์—ฌ๊ธฐ์„œ ๋‚จ์€ ์งˆ๋ฌธ์€ OpenBLAS numpy(๋ชจ๋“  numpy ํ…Œ์ŠคํŠธ ํ†ต๊ณผ)๋กœ ํ‘œ์ค€ํ™”ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์ด๋ฉฐ, ์ด๊ฒƒ์ด numpy๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ์ˆ˜์น˜ ์˜ค๋ฅ˜๋ฅผ ์ผ์œผํ‚ฌ ๊ฐ€๋Šฅ์„ฑ์ด ๋” ๋†’๋‹ค๋Š” ์œ„ํ—˜์„ ๊ฐ์ˆ˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ํ•œ ๊ฐ€์ง€ ์ฃผ์žฅ์€ ์šฐ๋ฆฌ๊ฐ€ ๋‹จ๊ธฐ/์ค‘๊ธฐ์ ์œผ๋กœ ์ด ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ€์•ผ ํ•  ๊ฒƒ ๊ฐ™์œผ๋ฉฐ ์ง€๊ธˆ ์‹œ์ž‘ํ•˜๊ณ  ๊ทธ์— ์ˆ˜๋ฐ˜๋˜๋Š” ๋น„์ฐธํ•œ ๋ฒ„๊ทธ ์‚ฌ๋ƒฅ์— ์ „๋…ํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ ์–ด๋„ ์šฐ๋ฆฌ๋Š” Julia ์œ ์ง€ ๋ณด์ˆ˜์˜ ์ข‹์€ ํšŒ์‚ฌ์—์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Numpy๋Š” ๋˜ํ•œ Julia์™€๋Š” ์ƒ๋‹นํžˆ ๋‹ค๋ฅธ ์œ„ํ—˜ ํ—ˆ์šฉ ๋ฒ”์œ„์™€ ์„ฑ๋Šฅ ์ ˆ์ถฉ์•ˆ, ์‚ฌ์šฉ์ž ๋Œ€ ๊ฐœ๋ฐœ์ž ๋น„์œจ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ numpy๊ฐ€ ๋” ๋ณด์ˆ˜์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ทจํ•˜๊ณ  ๋Š๋ฆฌ์ง€๋งŒ ์•ˆ์ •์ ์ธ ๊ธฐ๋ณธ ์„ค์ •์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ์ด ์•„๋‹Œ ์„ ํƒ ํ•ญ๋ชฉ์œผ๋กœ openblas๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. 8์‹œ๊ฐ„์˜ ๋นŒ๋“œ ์‹œ๊ฐ„์ด ์žฌ๋ฏธ์—†๊ฒŒ ๋“ค๋ฆฌ์ง€๋งŒ ์•„๋ฌด๋„ Julia์™€ Atlas๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋ฌป์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ด ์•„๋‹Œ ์˜ตํŠธ์ธ ์„ ํƒ์œผ๋กœ openblas๋ฅผ ํ—ˆ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ์ด ํ”„๋กœ์„ธ์Šค๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค :-/. ์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ๋Œ€์ฒด ๋นŒ๋“œ๋ฅผ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค(์žฅ๊ธฐ์ ์œผ๋กœ๋Š” pypi์—์„œ numpy[openblas] ๋“ฑ์œผ๋กœ ๋นŒ๋“œ ๋ณ€ํ˜•์„ ์–ป์„ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ํฌ๋งํ•˜์ง€๋งŒ ๊ณง ๊ทธ๋ ‡๊ฒŒ ๋˜์ง€๋Š” ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค) , ์šฐ๋ฆฌ๋Š” ๋ฐฐํฌํ•˜๊ณ  ๋ฒ„๊ทธ ๋ณด๊ณ ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ ์™ธ์—๋Š” openblas ๋นŒ๋“œ๋ฅผ ๊ฐœ์„ ํ•  ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. ATLAS ๋นŒ๋“œ์— ๋Œ€ํ•œ ์ฃผ์š” ๋Œ€์•ˆ์€ Openblas ๋นŒ๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ MKL์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ผ๋ถ€ ํƒ€์‚ฌ์—์„œ ๋นŒ๋“œ:-/.

ํ…Œ์ด๋ธ”์— ์˜ฌ๋ ค๋†“์„ ๋˜ ๋‹ค๋ฅธ ์˜ต์…˜์€ ์ฐธ์กฐ/SSE2 ์ปค๋„์„ ์‚ฌ์šฉํ•˜์—ฌ BLIS ๋นŒ๋“œ๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. BLIS์—๋Š” ์—ฌ์ „ํžˆ ๋นŒ๋“œ ์‹œ๊ฐ„ ๊ตฌ์„ฑ๋งŒ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ openblas์™€ ๊ฒฝ์Ÿ๋ ฅ์ด ์—†์„ ์ˆ˜ ์žˆ์ง€๋งŒ ATLAS์™€ ๊ฒฝ์Ÿ๋ ฅ์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ATLAS์— ๋น„ํ•ด ์ด์ ์€ ๋นŒ๋“œ ์‹œ๊ฐ„์ด _ํ›จ์”ฌ_ ๋น ๋ฅด๋ฉฐ ์žฅ๊ธฐ์ ์œผ๋กœ ์ข‹์€ ์†”๋ฃจ์…˜์ด ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ถ”์ •ํ•˜๊ธฐ ์–ด๋ ต์ง€๋งŒ ATLAS๊ฐ€ ์žฅ๊ธฐ์ ์œผ๋กœ ์ข‹์€ ์†”๋ฃจ์…˜์ด ๋˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ™•์‹คํžˆ ๋‚ซ์Šต๋‹ˆ๋‹ค(0์œผ๋กœ ์„ค์ •). ์–ด์จŒ๋“  ์šฐ๋ฆฌ๊ฐ€ ๋ฌด์–ธ๊ฐ€๋ฅผ QAํ•  ์˜ˆ์ •์ด๋ผ๋ฉด ์ ์–ด๋„ ๊ทธ ์—๋„ˆ์ง€๋Š” ๋ฏธ๋ž˜๊ฐ€ _๊ฐ€๋Šฅ์„ฑ ์žˆ๋Š”_ ๋ฌด์–ธ๊ฐ€๋กœ ํ–ฅํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ์˜ต์…˜์„ ์ง„์ง€ํ•˜๊ฒŒ ๊ณ ๋ คํ•˜๊ธฐ ์ „์— ๋‹ต๋ณ€์ด ํ•„์š”ํ•œ ๋ช‡ ๊ฐ€์ง€ ์งˆ๋ฌธ:

(1) BLIS์˜ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ์ง€์›์ด ATLAS์™€ ๊ฒฝ์Ÿ์ ์ธ์ง€ ์—ฌ๋ถ€๊ฐ€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์†Œ์Šค์— ์ผ๋ถ€ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ์˜ต์…˜์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์œผ๋ฉฐ ์ฃผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„์ง "์™„๋ฃŒ"๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. , ์ฆ‰ MKL๊ณผ ๊ฒฝ์Ÿํ•˜์ง€๋งŒ ATLAS์™€ MKL ์‚ฌ์ด์—๋Š” ๋งŽ์€ ์—ฌ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.)

(2) ๊ทธ ๋ฌธ์ œ์— ๊ด€ํ•ด์„œ๋Š” ์กฐ์ •๋˜์ง€ ์•Š์€ ๋ชจ๋“œ์˜ BLIS๊ฐ€ ์œ„์˜ ๋ฒค์น˜๋งˆํฌ์—์„œ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์ „ํ˜€ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

(3) ์ €๋Š” ์‹ค์ œ๋กœ Windows์—์„œ BLIS๋ฅผ ๋นŒ๋“œํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€ ์•Š์•˜์œผ๋ฉฐ LAPACK์ด ์•„๋‹ˆ๋ผ BLAS์ผ ๋ฟ์ด๋ผ๋Š” ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด numpy์— ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

BLIS๋Š” ๋ฒ„๊ทธ ๋ณด๊ณ ์— ์–ผ๋งˆ๋‚˜ ๋ฐ˜์‘ํ•ฉ๋‹ˆ๊นŒ? Openblas๋Š” ๊ฝค ์ข‹์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค
์ด๊ฒƒ์— ๋Œ€ํ•ด์„œ.

2016๋…„ 2์›” 15์ผ ์›”์š”์ผ ์˜คํ›„ 3์‹œ 48๋ถ„, Nathaniel J. Smith <
[email protected]>์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ด ์•„๋‹Œ ์˜ตํŠธ์ธ ์„ ํƒ์œผ๋กœ openblas๋ฅผ ํ—ˆ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ์ด ํ”„๋กœ์„ธ์Šค๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค :-/.
๋Œ€์ฒด ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐฐํฌํ•  ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค(
์žฅ๊ธฐ์ ์œผ๋กœ pypi์—์„œ numpy[openblas]๋กœ ๋นŒ๋“œ ๋ณ€ํ˜•์„ ์–ป์„ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.
๋“ฑ๋“ฑ, ํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์€ ๊ณง ์ผ์–ด๋‚˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค), ์šฐ๋ฆฌ๋Š” ํ•  ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค
๋ฐฐํฌํ•˜๊ณ  ๋ฒ„๊ทธ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์„ ์ œ์™ธํ•˜๊ณ  openblas ๋นŒ๋“œ๋ฅผ ๊ฐœ์„ ํ•˜์‹ญ์‹œ์˜ค.
๋ณด๊ณ ์„œ ๋ฐ ATLAS์˜ ์ฃผ์š” ๋Œ€์•ˆ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•œ ๋นŒ๋“œ์ž…๋‹ˆ๋‹ค.
ํ•˜๋‚˜๋ฅผ ์ฐพ์œผ๋ ค๋Š” ๋™๊ธฐ๋Š” openblas ๋นŒ๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ MKL ๋นŒ๋“œ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ผ๋ถ€ ํƒ€์‚ฌ์—์„œ :-/.

ํ…Œ์ด๋ธ”์— ์˜ฌ๋ ค ๋†“์„ ๋˜ ๋‹ค๋ฅธ ์˜ต์…˜์€ BLIS๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ฐธ์กฐ/SSE2 ์ปค๋„์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค. BLIS์—๋Š” ์•„์ง ๋นŒ๋“œ๋งŒ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—
์‹œ๊ฐ„ ๊ตฌ์„ฑ์€ openblas์™€ ๊ฒฝ์Ÿ์ ์ด์ง€ ์•Š์ง€๋งŒ
ATLAS์™€ ๊ฒฝ์Ÿ๋ ฅ์ด ์žˆ์œผ๋ฉฐ ATLAS์— ๋น„ํ•ด ์ด์ ์€
์‹œ๊ฐ„์€ _ํ›จ์”ฌ_ ๋น ๋ฅด๋ฉฐ ์žฅ๊ธฐ์ ์œผ๋กœ ์ข‹์€ ๊ธฐํšŒ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์†”๋ฃจ์…˜์€ ์ถ”์ •ํ•˜๊ธฐ ์–ด๋ ต์ง€๋งŒ ATLAS๊ฐ€ ์ข‹์€ ๊ฒƒ๋ณด๋‹ค ํ™•์‹คํžˆ ๋‚ซ์Šต๋‹ˆ๋‹ค.
์žฅ๊ธฐ ์†”๋ฃจ์…˜(์ €๋Š” 0์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค). ์šฐ๋ฆฌ๊ฐ€ QAing์ด ๋œ๋‹ค๋ฉด
์–ด์จŒ๋“  ๋ฌด์—‡์ธ๊ฐ€ ๊ทธ๋ ‡๋‹ค๋ฉด ์ ์–ด๋„ ์šฐ๋ฆฌ๋Š” ๊ทธ ์—๋„ˆ์ง€๋ฅผ ๋ฌด์–ธ๊ฐ€๋กœ ํ–ฅํ•˜๊ฒŒ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋ฏธ๋ž˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ์ง„์ง€ํ•˜๊ฒŒ ๊ณ ๋ คํ•˜๊ธฐ ์ „์— ๋Œ€๋‹ตํ•ด์•ผ ํ•  ๋ช‡ ๊ฐ€์ง€ ์งˆ๋ฌธ
์˜ต์…˜:

(1) BLIS์˜ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ์ง€์› ์—ฌ๋ถ€๊ฐ€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
ATLAS์™€ ๊ฒฝ์Ÿ์ ์ž…๋‹ˆ๋‹ค(๋ช‡ ๊ฐ€์ง€ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋”ฉ ์˜ต์…˜์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ 
์†Œ์Šค์ด๋ฉฐ, ์ฃผ์š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด๋ฅผ
์•„์ง "์™„๋ฃŒ", ์ฆ‰ MKL๊ณผ ๊ฒฝ์Ÿํ•˜์ง€๋งŒ ์‚ฌ์ด์—๋Š” ๋งŽ์€ ์—ฌ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
ATLAS ๋ฐ MKL.)

(2) ๊ทธ ๋ฌธ์ œ์— ๋Œ€ํ•ด, ๋‚˜๋Š” ๋˜ํ•œ ์กฐ์ •๋˜์ง€ ์•Š์€ ๋ชจ๋“œ์˜ BLIS ์š”๊ธˆ์ด ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ์ „ํ˜€ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.
์œ„์˜ ๋ฒค์น˜๋งˆํฌ์—์„œ

(3) ์‹ค์ œ๋กœ Windows์—์„œ BLIS๋ฅผ ๋นŒ๋“œํ•˜๋ ค๊ณ  ์‹œ๋„ํ•œ ์ ์ด ์—†์œผ๋ฉฐ
LAPACK์ด ์•„๋‹ˆ๋ผ BLAS์ผ ๋ฟ์ด๋ผ๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ numpy์— ๋Œ€ํ•œ ๋งŽ์€ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/numpy/numpy/issues/5479#issuecomment -184387401.

๋‚˜๋Š” libflame์ด blis์˜ lapack์— ํ•ด๋‹นํ•œ๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค. ์ฐธ์กฐ ๋ฌธ์„œ ์— ์„ค๋ช…๋œ lapack2flame ํ˜ธํ™˜์„ฑ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

BLIS๋Š” ๋ฒ„๊ทธ ๋ณด๊ณ ์— ์–ผ๋งˆ๋‚˜ ๋ฐ˜์‘ํ•ฉ๋‹ˆ๊นŒ?

์šฐ๋ฆฌ๋Š” ์•„์ง ๋ชจ๋ฅธ๋‹ค.

BLIS๋ฅผ ์‹œ๋„ํ•˜์ง€ ์•Š๊ณ  ๊ธฐ๋ณธ์ ์œผ๋กœ ๋งค์šฐ ์†Œ์ˆ˜์˜ ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ์šฉํ•˜๋Š” ์ €ํ™œ๋™ 1์ธ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ๋นŒ๋“œ๋œ numpy ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์€ ๋ฏธ์นœ ์ง“์ฒ˜๋Ÿผ ๋“ค๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ์Šค๋ ˆ๋“œ์—์„œ ์•„์ง MingwPy + OpenBLAS ๊ณ„ํš์—์„œ ๋ฒ—์–ด๋‚˜๋Š” ์ข‹์€ ์ด์œ ๋ฅผ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. No-scipy-ATLAS-MSVC-๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ์ž„์‹œ๋ฐฉํŽธ์ด ์žˆ๋Š” ๊ฒƒ์ด ์ข‹์ง€๋งŒ ์ค‘์žฅ๊ธฐ MingwPy ์†”๋ฃจ์…˜๋ณด๋‹ค ๋œ ์ค‘์š”ํ•˜๋ฉฐ ์ž„์‹œ๋ฐฉํŽธ์ด ๊ทธ ์ž์ฒด๋กœ ์ฃผ์š” ๋…ธ๋ ฅ์œผ๋กœ ๋ฐ”๋€Œ๋ฉด ๋…ธ๋ ฅํ•  ๊ฐ€์น˜๊ฐ€ ์—†๋‹ค๊ณ  ๋งํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. .

BLIS/libflame ๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด Windows์—์„œ ์ „์ฒด BLAS/LAPACK ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์™ธ๋กœ์šด ๊ธธ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž๊ฐ€ ๊ทธ๊ฒƒ์ด ์ž‘๋™ํ•ด์•ผ ํ•˜๊ณ  ์ง€์›๋œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•˜๋ฉด ๊ธฐ์˜๊ฒŒ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ATLAS๋Š” ์˜ค๋žซ๋™์•ˆ Linux์˜ ๊ธฐ๋ณธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜€์Šต๋‹ˆ๋‹ค. ์ž ์‹œ ๋™์•ˆ Windows BSD ํ˜ธํ™˜ ๋นŒ๋“œ์˜ ๊ฒฝ์šฐ์ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ์ƒํ•˜๋Š” ๊ฒƒ์€ ๋ฌด๋ฆฌ๊ฐ€ ์•„๋‹Œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@tkelman - ๋ถ„์„ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค - ๋‚ด ์ƒ๊ฐ์— ๋‹น์‹ ์ด ์˜ณ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ numpy๋Š” ์ •ํ™•์„ฑ์— ์ง‘์ค‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋” ์†Œ๋ชจ์ ์ธ OpenBLAS ๋ฒ„๊ทธ์— ์˜์กดํ•˜๊ณ  ๋” ํฌ๊ด„์ ์ธ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด ํž˜์„ ํ•ฉ์น˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด OpenBLAS ๋ฒ„๊ทธ ๊ฐ€ ๋– ์˜ค๋ฆ…๋‹ˆ๋‹ค. ๋‹ค์†Œ ๋ชจํ˜ธํ•˜๊ณ  ๋””๋ฒ„๊ทธํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด ํŠน์ • ๋ฌธ์ œ์— ๋Œ€ํ•ด pypi์— numpy ํœ ์„ ์ œ๊ณตํ•˜์—ฌ numpy์— ์˜์กดํ•˜๋Š” "y"(์˜ˆ: matplotlib)์— ์˜์กดํ•˜๋Š” ํŒจํ‚ค์ง€ "x"์˜ ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๊ฐ€ pip๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๊ฐ€ ๋˜์ง€์ง€ ์•Š๊ฒŒ ํ•œ๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค. ํŒ”์„ ๋“ค๊ณ  "Python์€ ๋„ˆ๋ฌด ์–ด๋ ต์Šต๋‹ˆ๋‹ค."๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  MATLAB์œผ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. Zen of python์€ ํ•œ ๊ฐ€์ง€ ๋ถ„๋ช…ํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, pypi by numpy์˜ ๋ชจ๋“  ํ•ญ๋ชฉ์€ cgohlke๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ์•ˆ์ •์ ์ด๊ฑฐ๋‚˜ ์ž„์˜์˜ ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ๋ณด๋‹ค ๋” ์•ˆ์ •์ ์ธ ํŠน์ • ๊ฐ€์ค‘์น˜๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๋ถ„๋ช…ํžˆ ์‚ฌ๋ ค ๊นŠ๊ณ  ์ตœ์†Œํ•œ ์—…๊ณ„์—์„œ๋Š” ๋” ์•ˆ์ •์ ์ธ ๊ฒƒ์œผ๋กœ ์ธ์‹๋ฉ๋‹ˆ๋‹ค.

๋‹จ๊ธฐ์ ์œผ๋กœ ATLAS ๋นŒ๋“œ๋Š” scipy๋กœ ๋นŒ๋“œํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ์˜ฌ๋ผ์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ๋นŒ๋“œ๋ด‡์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋์ด๊ฒ ์ฃ ? ํ–ฅํ›„ 8์‹œ๊ฐ„ ATLAS ๋นŒ๋“œ๋Š” ๋“œ๋ฌผ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์–ธ์  ๊ฐ€๋Š” Windows 64๋น„ํŠธ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. SSE2 ์˜ˆ์™ธ ๋ฌธ์ œ๋Š” ๋ฌธ์ œ์ด๋ฏ€๋กœ pypi์— ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ATLAS๋Š” ์ด๋ฏธ Linux์˜ ํ‘œ์ค€์ด๋ฉฐ ์ด์ „ ์ŠˆํผํŒฉ bdist_winst ํŒจํ‚ค์ง€์˜ ํ‘œ์ค€์œผ๋กœ ์ด ๊ฒฝ๋กœ๋ฅผ ๋” ๋งŽ์ด ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ฐ€๊นŒ์šด ์žฅ๋ž˜์— ์ด๋ฏธ mingwpy๋ฅผ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋‹น์žฅ ํ•ด๊ฒฐํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ๋งŽ์€ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์žฅ๊ธฐ์ ์œผ๋กœ ๋‚˜๋Š” ๋ธ”๋ฆฌ์Šค/ํ”Œ๋ ˆ์ž„์ด ๋ฏธ๋ž˜๋ผ๋Š” ์‚ฌ์‹ค์— ํฅ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ๋งŽ์€ ์ˆ˜ํ•™์  ๋„๊ตฌ๊ฐ€ 70๋…„๋Œ€์˜ FORTRAN ์ฝ”๋“œ์— ์˜์กดํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์กฐ๊ธˆ ๋ฌด์„ญ์Šต๋‹ˆ๋‹ค. AC ์ „์šฉ ์†”๋ฃจ์…˜์€ ์ฃผ์š” ๋ŒํŒŒ๊ตฌ์ด๋ฉฐ ์—ด์ •์ ์œผ๋กœ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ฒฝํ—˜์ด ๋งŽ์€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ๋Š” ํ•ญ์ƒ ๋งŽ์„์ˆ˜๋ก ์ข‹๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฝํ—˜์ด ๋งŽ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋นŒ๋“œํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•  ์‹œ๊ฐ„๊ณผ ์˜ํ–ฅ์ด ์žˆ๋‹ค๋ฉด ๋น„ํ‘œ์ค€ ์˜ต์…˜์— ๋Œ€ํ•œ ๋ฌธ์„œ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์Šต๋‹ˆ๋‹ค.

blis์—์„œ ์ตœ์ ํ™”๋œ ์ปค๋„ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€ ์•Š์œผ๋ฉด 2014๋…„ ์ดํ›„๋กœ ์—ด์–ด๋ณธ ๋ฌธ์ œ(ํŽธ์ง‘: ๋‹จ์ˆ˜)์— ๋ถ€๋”ชํžˆ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋นŒ๋“œ ์‹œ์Šคํ…œ์€ ์ตœ์ ํ™”๋œ ์ปค๋„์—๋งŒ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ฐธ์กฐ ๊ตฌ์„ฑ๋งŒ ๋นŒ๋“œํ•˜๋ ค๊ณ  ํ•˜๋ฉด msys2์˜ git์„ ํ˜ผ๋™ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. cygwin์—์„œ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์ด ๋งˆ์ง€๋ง‰์œผ๋กœ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์–ผ๋งˆ ์ „ ์ผ์ด๊ณ  ๋กœ์ปฌ์—์„œ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ๊ธฐ์–ต์ด ๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์•ˆ์ด Atlas๋ผ๋ฉด ๊ตฌ์ถ•, ํ…Œ์ŠคํŠธ ๋ฐ ๋ฒค์น˜๋งˆํ‚นํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์ง€๋งŒ ์ž…์ฆ๋˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•˜๊ณ  ๊ทธ๋ ‡๊ฒŒ ํ•  ๋•Œ๊นŒ์ง€ ์ž์ฒด ๋ฐฉ์‹์œผ๋กœ ๋†’์€ ์œ„ํ—˜์„ ๊ฐ์ˆ˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@mikofski ๊ณต์ •ํ•œ Lapack์€ 90๋…„๋Œ€ ์‚ฌ๋žŒ์ž…๋‹ˆ๋‹ค. ๋ฐฉ์— ์žˆ๋Š” ์ •๋ง Fortran ์ฝ”๋ผ๋ฆฌ์ž…๋‹ˆ๋‹ค.

@tkelman : ๋ถ„๋ช…ํžˆ ๋ง์”€๋“œ๋ฆฌ์ž๋ฉด, ๊ท€ํ•˜๊ฐ€ ์ œ์ถœํ•œ ๋ฌธ์ œ๋Š” ํŠนํžˆ Windows ๋„ค์ดํ‹ฐ๋ธŒ ๋นŒ๋“œ ์‹œ์Šคํ…œ๊ณผ ๊ด€๋ จ๋œ ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋งž์Šต๋‹ˆ๊นŒ? ํ˜ธ๊ธฐ์‹ฌ์— ๋‚˜๋Š” ๋ฆฌ๋ˆ…์Šค์—์„œ ์œˆ๋„์šฐ์šฉ blis๋ฅผ ํฌ๋กœ์Šค ์ปดํŒŒ์ผํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ๊ณ (๋ฐ๋น„์•ˆ ํŒจํ‚ค์ง€์—์„œ ์„ค์น˜๋œ mingw-w64 ํฌ๋กœ์Šค ์ปดํŒŒ์ผ๋Ÿฌ ์‚ฌ์šฉ), 2๋ถ„ ์ •๋„๋ฐ–์— ๊ฑธ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค๋Š” ์‚ฌ์‹ค์— ๋†€๋ž์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” "./configure reference; make -j4 CC=x86_64-w64-mingw32-gcc AR=x86_64-w64-mingw32-ar CPICFLAGS=" ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ( CPICFLAGS= ์€ " -fPIC ๋ฌด์‹œํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๋งŽ์€ ๊ฒฝ๊ณ ๋ฅผ ์–ต์ œํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๊ธฐ๋ณธ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค." ๊ทธ๋ฆฌ๊ณ  ์•„๋งˆ๋„ AR ๋ฅผ ์žฌ์ •์˜ํ•  ํ•„์š”์กฐ์ฐจ ์—†์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ด ์™œ ์•ˆ ๋ฉ๋‹ˆ๋‹ค.) %ld ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ intptr ์ •์ˆ˜๋ฅผ ์ธ์‡„ํ•˜๋Š” $ bli_pool.c ๋ฐ bli_fprintm.c ์˜ printfs์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ๊ฒฝ๊ณ ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์•„๋งˆ๋„ ๋ช‡ ๊ฐ€์ง€ LLP64 ๊ผฌ์ž„์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šด๋™ํ•˜๊ธฐ.

@rgommers :

BLIS๋ฅผ ์‹œ๋„ํ•˜์ง€ ์•Š๊ณ  ๊ธฐ๋ณธ์ ์œผ๋กœ ๋งค์šฐ ์†Œ์ˆ˜์˜ ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ์šฉํ•˜๋Š” ์ €ํ™œ๋™ 1์ธ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ๋นŒ๋“œ๋œ numpy ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์€ ๋ฏธ์นœ ์ง“์ฒ˜๋Ÿผ ๋“ค๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ์ ˆ๋Œ€์ ์œผ๋กœ ์˜ณ์Šต๋‹ˆ๋‹ค! ๋ฌธ์ œ๋Š” ๋ชจ๋“  ์˜ต์…˜์ด ๋”์ฐํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค :-(.

๋”ฐ๋ผ์„œ ๋ถ„๋ช…ํžˆ MKL์—๋Š” ํ™•์‹คํžˆ ๋‚˜์œ ๋ผ์ด์„ผ์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ATLAS๋Š” ์ ˆ๋Œ€ ๊ฐœ์„ ๋˜์ง€ ์•Š์„ ํ™•์‹คํžˆ ๋‚˜์œ ์„ฑ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  OpenBLAS๋Š” ์ด ์‹œ์ ์—์„œ ๋งํ•  ์ˆ˜ ์žˆ๋Š” ์ฆ๊ฑฐ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  ๊ทธ๋ ‡๊ฒŒ ๋นจ๋ฆฌ ๋˜์ง€๋Š” ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. -(. ํ”„๋กœ์ ํŠธ๋Š” 5๋…„์ด ์ง€๋‚ฌ์ง€๋งŒ ์—ฌ์ „ํžˆ Julian์˜ ์ž„์˜ volatile s์™€ ๋ฎคํ…์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์Šค๋ ˆ๋”ฉ ์ฝ”๋“œ, ์ด ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ์—…์ŠคํŠธ๋ฆผ์—๋Š” ๋ถ„๋ช…ํ•œ ๊ด€์‹ฌ์ด ์—†์œผ๋ฉฐ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์†Œ๊ทœ๋ชจ ๊ทธ๋ฃน(numpy-discussion)์— ๊ฒŒ์‹œํ•˜๋Š” ์ฆ‰์‹œ ์—ฌ์ „ํžˆ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. , ์šฐ๋ฆฌ๋Š” ์ฆ‰์‹œ 2-3๊ฐœ์˜ ์™„์ „ํžˆ ์‹ ๋น„ํ•œ ์žฌํ˜„ํ•˜๊ธฐ ์–ด๋ ต๊ฑฐ๋‚˜ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ถฉ๋Œ ๋ฐ ์ž˜๋ชป๋œ ๊ฒฐ๊ณผ ๋ฒ„๊ทธ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  BLIS ๋…ผ๋ฌธ์€ ์ด๊ฒƒ์ด ๊ธฐ๋ณธ GotoBLAS ์•„ํ‚คํ…์ฒ˜์˜ ์ œํ•œ๊ณผ ๊ด€๋ จ์ด ์žˆ๋‹ค๋Š” ํ•ฉ๋ฆฌ์ ์œผ๋กœ ์„ค๋“๋ ฅ ์žˆ๋Š” ์‚ฌ๋ก€๋ฅผ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ข€ ๋” ๋‹ค๋“ฌ๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋” ํˆฌ์žํ•˜๋ฉด ์‰ฝ๊ฒŒ ๊ณ ์น  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ์†Œ์š” ์‹œ๊ฐ„ ์˜ค๋ž˜๋œ ๊นจ์ง€๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ์œ ๋ฆฌํ•˜๊ฒŒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. numpy ํ† ๋ก  ๋ชฉ๋ก์—์„œ ๊ฐ€์žฅ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋ฒ„๊ทธ๋Š” 5๋…„ ์ „์— ์ค‘๋‹จ๋œ ๋งˆ์ดํฌ๋กœ ์•„ํ‚คํ…์ฒ˜์ธ OpenBLAS์˜ Core2 ์ปค๋„์— ์žˆ๋‹ค๊ณ  ์˜์‹ฌ๋˜๋Š” ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค.)

๊ทธ๋ž˜์„œ ์ œ๊ฐ€ BLIS๋ฅผ ๊ณ„์† ์–ธ๊ธ‰ํ•˜๋Š” ์ด์œ ๋Š” BLIS๊ฐ€ ํ™•์‹คํžˆ ํ•ด๊ฒฐ์ฑ…์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์ด ์•„๋‹ˆ๋ผ ์ผ์ข…์˜ ๊ณ„์‚ฐ๋œ ๋‚™๊ด€๋ก ์œผ๋กœ ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. BLIS๋Š” _might_ MKL/OpenBLAS๋งŒํผ ๋น ๋ฅด๊ณ , ATLAS/MKL๋งŒํผ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, OpenBLAS๋กœ์„œ์˜ ๊ธฐ์—ฌ; ๊ทธ๋ ‡์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๊ธฐ์ค€์„ ์ถฉ์กฑํ•  ์ˆ˜ ์žˆ๋Š” ์ง„์ •ํ•œ ํฌ๋ง์„ ๊ฐ€์ง„ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋Š” ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. [๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ strided ๋ฐฐ์—ด์„ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ์ด์ ์— ๋Œ€ํ•ด์„œ๋Š” ์–ธ๊ธ‰์กฐ์ฐจ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๋”์ฐํ•œ ํŠน์ˆ˜ ์ผ€์ด์Šค BLAS ๋””์ŠคํŒจ์น˜ ์ฝ”๋“œ๋ฅผ ๋ชจ๋‘ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์ƒ์ƒํ•  ์ˆ˜ ์—†๋Š” ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค.]

IIUC, GotoBLAS๋Š” Robert van de Geijn์„ PI๋กœ UT Austin์—์„œ ์ผํ•˜๋Š” ๋‹จ์ผ ์ •๊ทœ ๊ฐœ๋ฐœ์ž(Kazushige Goto)๊ฐ€ ์œ ์ง€ ๊ด€๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. BLIS๋Š” Robert van de Geijn์„ PI๋กœ UT Austin์—์„œ ์ผํ•˜๋Š” ๋‹จ์ผ ์ •๊ทœ ๊ฐœ๋ฐœ์ž(Field G. Van-Zee)๊ฐ€ ์œ ์ง€ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๊ฒƒ์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค :-) ๊ทธ๋Ÿฌ๋‚˜ ์˜ˆ, ์šฐ๋ฆฌ๊ฐ€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค๋ฉด ๋งˆ์ˆ ์ฒ˜๋Ÿผ ์ผ์–ด๋‚˜์ง€๋Š” ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฃผ๋ณ€์— ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์žˆ๊ฒŒ ๋œ๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ ์ผ๋ถ€ ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์ž์‹ ์˜ ํ…ํŠธ๊ฐ€ ์žˆ๋Š” ์•ž ์ž”๋””๋ฐญ์— "์ด๋ด, ์—ฌ๊ธฐ ์žˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ด์‚ฌ๋ฅผ ์˜ค๊ณ  ์žˆ๊ณ  ์šฐ๋ฆฌ๋ฅผ ์œ„ํ•ด ์ด ์ผ์„ ํ•˜๊ณ  ์žˆ์œผ๋‹ˆ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ธธ ๋ฐ”๋ž€๋‹ค." ๊ทธ๋ฆฌ๊ณ  ์žฅ๊ธฐ์ ์ธ ์‹คํ–‰ ๊ฐ€๋Šฅ์„ฑ์„ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ๊ฐ€ ์ •๋ง๋กœ ์•Œ์•„์•ผ ํ•  ๊ฒƒ์€ "๊ทธ๊ฒƒ์ด ์‹ค์ œ๋กœ ์–ผ๋งˆ๋‚˜ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€"์™€ "ํŒจ์น˜์— ์–ผ๋งˆ๋‚˜ ์ˆœ์‘ํ•˜๋Š”๊ฐ€"์™€ ๊ฐ™์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์ œ์ถœํ•˜๊ธฐ ์‹œ์ž‘ํ•˜์ง€ ์•Š๋Š” ํ•œ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํŒจ์น˜ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก : ์ตœ์„ ์˜ ์„ ํƒ์ด ๋ฌด์—‡์ธ์ง€ ์ง„์ง€ํ•˜๊ฒŒ ๋ชจ๋ฅด์ง€๋งŒ BLIS ๋ฌผ์— ๋ฐœ๊ฐ€๋ฝ์„ ๋‹ด๊ทธ๋Š” ๊ฒƒ์ด ์ข‹์€ ์ƒ๊ฐ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜๋”๋ผ๋„ ์šฐ๋ฆฌ๋Š” ์ ์–ด๋„ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ฐฐ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ๋ฌธ์ œ์™€ ํ•˜๋‚˜ ๋˜๋Š” ๋‘ ๊ฐœ์˜ PR์„ ์ œ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค. ์ €์žฅ์†Œ์— ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๊ฐ€ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์€ msys2์—์„œ ๋นŒ๋“œ๊ฐ€ ์ค‘๋‹จ๋˜์—ˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค(๋˜๋Š” msys2 ์˜ต์…˜์„ ํŠน์ • ๋ฐฉ์‹์œผ๋กœ ์„ค์ •ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์ž‘๋™ํ•จ). cygwin ๋˜๋Š” Linux์—์„œ ๊ต์ฐจ ๋นŒ๋“œ(ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์™€์ธ์„ ์‹ ๋ขฐํ•˜์ง€๋Š” ์•Š์Œ)๋Š” ์ž‘๋™ํ•ด์•ผ ํ•˜์ง€๋งŒ 2014๋…„์— ์ •๋ ฌ๋œ malloc๊ณผ ํ…Œ์ŠคํŠธ์—์„œ ์ƒŒ๋”” ๋ธŒ๋ฆฌ์ง€ ์ปค๋„์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ cygwin ์‹ญ์ž๊ฐ€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์‹  master of blis์—์„œ ๋ชจ๋ž˜ ๋‹ค๋ฆฌ ์ปค๋„์„ ์žฌ๊ตฌ์ถ•ํ–ˆ์œผ๋ฉฐ(์ตœ์‹  skylake ๋…ธํŠธ๋ถ์—์„œ) segfault๊ฐ€ ์ด์ œ ์‚ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ธ์ œ ๋˜๋Š” ๋ฌด์—‡์„ ๊ณ ์ณค๋Š”์ง€ ๋ˆ„๊ฐ€ ์•Œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์ด๋“ฑ๋ถ„ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ์ „์— ์–ธ๊ธ‰๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” SSE2, SSE3, AVX์šฉ ATLAS ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ์— ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

numpy/.lib/sse2/numpy-atlas.dll
numpy/.lib/sse3/numpy-atlas.dll
numpy/.lib/avx/numpy-atlas.dll

๊ทธ๋Ÿฐ ๋‹ค์Œ numpy/_distributor_init.py ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ˜„์žฌ CPU๋ฅผ ํ™•์ธํ•˜๊ณ  ์ผ์น˜ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ๋™์ผํ•œ ์ž‘์—…์„ ์ œ์•ˆํ–ˆ์ง€๋งŒ ์•„ํ‹€๋ผ์Šค ๋Œ€์‹  blis์˜ ๊ฒฝ์šฐ @njsmith์—๊ฒŒ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ blis์˜ ์Šค๋ ˆ๋”ฉ์ด ์•„ํ‹€๋ผ์Šค์™€ ์–ผ๋งˆ๋‚˜ ์ž˜ ์ž‘๋™ํ•˜๋Š”์ง€ ๋น„๊ตํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. blis ์ฐธ์กฐ ๊ตฌ์„ฑ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์Šค๋ ˆ๋”ฉ์„ ํ™œ์„ฑํ™”ํ•˜์ง€ ์•Š์ง€๋งŒ ํ—ค๋” ํŒŒ์ผ์˜ ์ •์˜๋ฅผ ์กฐ์ •ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ์ด๋ฅผ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•ด Appveyor๋ฅผ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ์˜ ํ˜„์žฌ ๋ฐ˜๋ณต ์ž‘์—…์ด ์—ฌ๊ธฐ์—์„œ ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. https://ci.appveyor.com/project/matthew-brett/np-wheel-builder/build/1.0.10

์ œ์ž‘๋œ ๋ฐ”ํ€ด๊ฐ€ ์—ฌ๊ธฐ์— ๋„์ฐฉํ•ฉ๋‹ˆ๋‹ค: https://84c1a9a06db6836f5a98-38dee5dca2544308e91131f21428d924.ssl.cf2.rackcdn.com

Appveyor ๋นŒ๋“œ์—์„œ ๋” ์ด์ƒ์˜ ๊ผฌ์ž„์€ ์‰ฝ๊ฒŒ ๊ณ ์น  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋ฏ€๋กœ ์ด ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ์•„๋งˆ๋„ ๋‚ด์ผ ์–ธ์  ๊ฐ€๋Š” ์ด ํœ ์„ pypi์— ์—…๋กœ๋“œํ•  ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@rgommers , @matthew-brett : site.cfg ์™€ ๊ด€๋ จํ•˜์—ฌ ๊ท€ํ•˜์˜ ์‘๋‹ต์€ numpy ์—๋งŒ ์ ์šฉ๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. scipy ๋Š” setup.py ์™€ ๋™์ผํ•œ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ site.cfg ๋ฅผ ๊ฒ€์ƒ‰ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. $#๋ฅผ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ง€์ •ํ•˜๊ธฐ ์ „์— ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋จผ์ € site.cfg ๊ฒ€์ƒ‰์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค numpy ๊ตฌ์„ฑ

ํ™•์ธ - ์„ค์น˜๋œ ํœ  ํ…Œ์ŠคํŠธ๋ฅผ ํฌํ•จํ•˜์—ฌ ์˜ค๋ฅ˜ ์—†์ด ์‹คํ–‰๋˜๋Š” ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ: https://ci.appveyor.com/project/matthew-brett/np-wheel-builder/build/1.0.10

์—ฌ๊ธฐ ๋ฐ”ํ€ด: http://58688808cd85529d4031-38dee5dca2544308e91131f21428d924.r12.cf2.rackcdn.com/

๋‹ค๋ฅธ 64๋น„ํŠธ ์ปดํ“จํ„ฐ์™€ ๋‹ค๋ฅธ 32๋น„ํŠธ ์ปดํ“จํ„ฐ์— ์„ค์น˜ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ €๋Š” ์ด๊ฒƒ๋“ค์ด ๊ฐˆ ์ค€๋น„๊ฐ€ ๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ๋“ค์„ pypi์— ์—…๋กœ๋“œํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ด์˜๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฐ”ํ€ด๊ฐ€ ์ง€๊ธˆ pypi์— ๋‚˜ํƒ€๋‚˜๋Š” ์ด์œ ์™€ ์ฐจ์ด์ ์ด ๋ฌด์—‡์ธ์ง€ ๊ถ๊ธˆํ•ดํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์˜ ํ˜ผ๋ž€์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด pypi์— ์ด ๋ฐ”ํ€ด์™€ gohlke(mkl)์˜ ์ฐจ์ด์  ์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์„ค๋ช…/๋งํฌ ํ•˜๋Š” ๋ฉ”๋ชจ๋ฅผ ๋‘๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค ์‚ฌ์ด์— ์žˆ์Šต๋‹ˆ๋‹ค.

๋ถ€์ˆ˜์ ์ธ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค๋งŒ ์ €๋Š” ๋ฌด์—‡์„

  # Pin wheel to 0.26 to avoid Windows ABI tag for built wheel
  - pip install wheel==0.26

appveyor ์Šคํฌ๋ฆฝํŠธ์—์„œ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

์„ค๋ช…์— ๋Œ€ํ•œ ์ข‹์€ ์ œ์•ˆ - ์ด ๊ธฐ์กด ๋ฆด๋ฆฌ์Šค์— ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‹œ๋„ํ•˜๊ณ  ํ•ด๊ฒฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Wheel > 0.26์€ Windows ํœ ์— ABI ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. Wheel==0.26์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํœ  ์ด๋ฆ„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

numpy-1.10.4-cp27-none-win32.whl

Wheel > 0.26์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ถ”๊ฐ€ ABI ํƒœ๊ทธ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.

numpy-1.10.4-cp27-cp27m-win32.whl

(์ œ ์ƒ๊ฐ์—๋Š”) - Windows ABI๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ด์ „ pip๊ฐ€ ์ด ๋…€์„๋“ค์„ ์„ค์น˜ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๊ฐ€์‹  ์ผ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ง€๊ธˆ์€ no-ABI ์ด๋ฆ„์ด ๋” ๋‚˜์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ™•์ธ - ํ˜„์žฌ pypi ํŽ˜์ด์ง€์— ์ด ํ…์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•  ๊ฒƒ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

pypi์—์„œ ๋ฐฐํฌ๋˜๋Š” ๋ชจ๋“  numpy ํœ ์€ BSD ๋ผ์ด์„ ์Šค๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

Windows ํœ ์€ ATLAS BLAS / LAPACK ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉฐ SSE2 ๋ช…๋ น์–ด๋กœ ์ œํ•œ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์‹œ์Šคํ…œ์— ์ตœ์ ์˜ ์„ ํ˜• ๋Œ€์ˆ˜ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์•ˆ์€ http://docs.scipy.org/doc/numpy/user/install.html ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๋‚˜๋Š” ๋‹ค๋ฅด๊ฒŒ ๋งํ•  ๊ฒƒ์ด๋‹ค:

์ด๋Ÿฌํ•œ Windows ํœ ์€ ์ตœ์ ์ด ์•„๋‹Œ ์„ ํ˜• ๋Œ€์ˆ˜ ์„ฑ๋Šฅ(http://speed.python.org์™€ ๊ฐ™์€ ๋ฒค์น˜๋งˆํฌ ๋งํฌ)์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” SSE2 ๋ช…๋ น์–ด๋กœ ์ œํ•œ๋œ ATLAS BLAS/LAPACK ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค(๊ทธ๋ฆฌ๊ณ  ์ œํ•œ๋˜์ง€ ์•Š์€ ๋ช…๋ น์–ด๋Š” ์žˆ์„๋ž˜?). ์„ฑ๋Šฅ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ด ํ”Œ๋žซํผ์—์„œ ์ปดํŒŒ์ผ๋œ Python ํ™•์žฅ์— ๋” ๋งŽ์€ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” mingwpy ํ”„๋กœ์ ํŠธ๋ฅผ ์ง€์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณด๋‹ค ??? ์ž์„ธํ•œ ๋‚ด์šฉ์€ http://docs.scipy.org/doc/numpy/user/install.html , ๋Œ€์•ˆ์€ http://docs.scipy.org/doc/numpy/user/install.html์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๊ธ€์Ž„ - mingwpy์˜ ํ˜„์žฌ numpy / scipy ๋ฒ„์ „์€ openblas๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์ปดํŒŒ์ผ๋Ÿฌ๋กœ์„œ์˜ mingwpy ๋Œ€ MSVC์™€๋Š” ๊ด€๋ จ์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ํœ ๊ณผ ํ•จ๊ป˜ openblas๋ฅผ ๋ฐฐ์†กํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, openblas๊ฐ€ ์•„์ง ์šฐ๋ฆฌ๊ฐ€ ์ง€์›ํ•˜๋Š” ํ‘œ์ค€ ํœ ์—์„œ ์‚ฌ์šฉํ•  ๋งŒํผ ์ถฉ๋ถ„ํžˆ ์•ˆ์ •์ ์ด์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ด ๊ฑฑ์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

OpenBlas๋Š” ์ถฉ๋ถ„ํžˆ ์•ˆ์ •์ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. Anaconda๊ฐ€ Linux์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ง€๊ธˆ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค. ์—…๋ฐ์ดํŠธ๋œ Windows Python 3.5 x64 ๋นŒ๋“œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
๊ฑฐ๊ธฐ์—์„œ ๋ฒค์น˜๋งˆํฌ๋Š” MKL๊ณผ ๊ฑฐ์˜ ๊ฐ™๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋‚˜๋Š” ํ™•์‹คํžˆ ๊ทธ๊ฒƒ์„ ์‹œ๋„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค ๊ฒฝ์šฐ
๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋ฐ”ํ€ด๋ฅผ ์กฐ๋ฆฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
2016๋…„ 2์›” 16์ผ ์˜คํ›„ 10์‹œ 36๋ถ„์— "Matthew Brett" [email protected] ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

๊ธ€์Ž„ - mingwpy์˜ ํ˜„์žฌ numpy / scipy ๋ฒ„์ „์€ openblas๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ
์ปดํŒŒ์ผ๋Ÿฌ๋กœ์„œ์˜ MSVC ๋Œ€ mingwpy์™€ ๊ด€๋ จ์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ญ์‹œ์˜ค. ์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ๋ฐœ์†กํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค
์ด ๋ฐ”ํ€ด๊ฐ€ ๋‹ฌ๋ฆฐ openblas์ง€๋งŒ ๋‚˜๋Š” openblas๊ฐ€ ์•„์ง
์šฐ๋ฆฌ๊ฐ€ ์ง€์›ํ•˜๋Š” ํ‘œ์ค€ ํœ ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ์— ์ถฉ๋ถ„ํžˆ ์•ˆ์ •์ ์ž…๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/numpy/numpy/issues/5479#issuecomment -185017546.

ํ™•์ธ. ๋‚˜๋Š” ์ตœ์ ์ด ์•„๋‹Œ ์„ฑ๋Šฅ์˜ ์†Œ์Šค์— ๋Œ€ํ•ด ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ BLAS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ ๊ทธ๋“ค์ดํ•˜๋Š” ์ผ๊ณผ ์ฐจ์ด์ ์„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํ•„์‚ฌ์ž๋ฅผ์œ„ํ•œ ์ด๋Ÿฌํ•œ ์˜ต์…˜์„ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์ด ๋„์›€์ด๋ฉ๋‹ˆ๋‹ค. ์Œ, ๋” ๊ณผํ•™์ ์œผ๋กœ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. . =) ์ตœ์ ์˜ ์„ฑ๋Šฅ์„ ๊ฐ€์ง„ ๊ฐœ๋ฐฉํ˜• ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์—†๋Š” ๊ฒƒ์ด ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

@mrslezak : OpenBLAS์— ๊ด€ํ•ด์„œ๋Š” ํ™•์‹คํžˆ ๋™์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Lapack ํŒจํ‚ค์ง€์™€ ํ•จ๊ป˜ Cygwin์— ์ œ๊ณต๋œ OpenBLAS ํŒจํ‚ค์ง€๋Š” ๋ฌธ์ œ ์—†์ด NumPy์™€ SciPy๋ฅผ ๋ชจ๋‘ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

@mrslezak : ๋ฒค์น˜๋งˆํฌ์— ๋Œ€ํ•œ ์ •๋ณด๋Š” ์–ด๋””์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋‚˜์š”? ์ €๋Š” scipy.org ์— ๋Œ€ํ•œ Windows ์†Œ์Šค ๋นŒ๋“œ์— ๋Œ€ํ•œ ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•˜๋ ค๊ณ  ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ด๋Š” ์ด๋Ÿฌํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์„ฑ๋Šฅ์ด ํ•„์š”ํ•œ ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ํ›Œ๋ฅญํ•œ ์ฐธ์กฐ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ƒท๊ฑด ๋ฐฉ์‹์ด ์˜ฌ๋ฐ”๋ฅธ ์ƒ๊ฐ์ผ๊นŒ์š”? ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ:

  • ์•ˆ์ •: ์„ฑ๋Šฅ์ด ์žˆ๋Š” ATLAS, sse2 ์ฃผ์˜ ์‚ฌํ•ญ
  • ๊ฐœ๋ฐœ์ž: OpenBLAS๋Š” mingwpy ๋ฐ binstar ์ฐธ์กฐ
  • Alt: MKL @cgohlke , MKL @continuum ๋ฐ @enthought
    ์ฃผ์˜ ์‚ฌํ•ญ: ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ํ˜ธํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    scipy ๋ฐ Matthew Brett์˜ github numpy wiki์—์„œ ์ž์„ธํ•œ ์ •๋ณด ๋งํฌ

@techtonik ๋‚˜๋Š” GCC๊ฐ€ ๋ชจ๋“  ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋Š” ๋™๋“ฑํ•œ ์ฝ”๋“œ์—์„œ MSVC ๋˜๋Š” ICC๋ณด๋‹ค ๋‹ค์†Œ ์„ฑ๋Šฅ์ด ๋–จ์–ด์งˆ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” Fortran์— ์žˆ๋Š” ๊ฒฝ์Ÿ ๋ฒ„์ „์˜ Lapack์„ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌด๋ฃŒ(python.org-cpython ํ˜ธํ™˜) ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(SciPy์—๋Š” ๋‹ค๋ฅธ Fortran ๊ตฌ์„ฑ ์š”์†Œ๋„ ์žˆ์Œ). OpenBLAS์˜ ์ˆœ์ˆ˜ํ•œ BLAS ๋ถ€๋ถ„(์•„๋งˆ๋„ Atlas๋„)์€ ์‹ค์ œ๋กœ MSVC๋กœ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์ง€๋งŒ MSVC๋Š” ์ธ๋ผ์ธ ์–ด์…ˆ๋ธ”๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ๋นŒ๋“œํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๊ฒฝ์Ÿ๋ ฅ์ด ์—†์Šต๋‹ˆ๋‹ค.

ํŽธ๋ฆฌํ•œ 64๋น„ํŠธ MKL์ด ์—†์ง€๋งŒ(ํŒŒ๊ธฐํ•  ๊ฒฝ์šฐ ์–ด๋”˜๊ฐ€์— conda์—์„œ 32๋น„ํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ) ๋‹ค์Œ์€ @matthew-brett์ด ์ฐธ์กฐ ๋ฐ ๋ชจ๋ž˜์— ๋Œ€ํ•ด ๋นŒ๋“œํ•œ Atlas dll์„ ๋น„๊ตํ•˜๋Š” Julia์—์„œ ์‹คํ–‰๋˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฒค์น˜๋งˆํฌ์ž…๋‹ˆ๋‹ค. BLIS์˜ ๋ธŒ๋ฆฌ์ง€ ๊ตฌ์„ฑ ๋ฐ Julia์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” OpenBLAS ๋นŒ๋“œ https://gist.github.com/54da587b01b7fb163103

์š”์•ฝ: openblas(skylake์—์„œ ์ตœ์‹  openblas ์ปค๋„์€ haswell์ž„)๋Š” ์•„ํ‹€๋ผ์Šค๋ณด๋‹ค 23๋ฐฐ, ์ฐธ์กฐ ๋ธ”๋ฆฌ์Šค๋ณด๋‹ค 44๋ฐฐ, ์ƒŒ๋“œ๋ธŒ๋ฆฌ์ง€ ๋ธ”๋ฆฌ์Šค๋ณด๋‹ค 5.5๋ฐฐ ๋น ๋ฆ…๋‹ˆ๋‹ค. ํ•˜์Šค์›ฐ ๋ธ”๋ฆฌ์Šค๊ฐ€ ์–ผ๋งˆ๋‚˜ ๊ฐ€๊นŒ์šด์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ  - BLIS ์ปดํŒŒ์ผ์„ ์œ„ํ•œ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

๋‹ค์–‘ํ•œ ํ”„๋กœ์„ธ์„œ์— ๋Œ€ํ•ด BLIS ๋นŒ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ๋Ÿฐํƒ€์ž„์— ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ? ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ์„ธ์„œ์— ๋Œ€ํ•ด ๋Œ€๋ถ€๋ถ„์˜ ์„ฑ๋Šฅ์„ ์บก์ฒ˜ํ•˜๋Š” ํ”„๋กœ์„ธ์„œ์˜ ์ž‘์€ ํ•˜์œ„ ์ง‘ํ•ฉ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ฃผ์„์— ์žˆ์ง€๋งŒ ์—ฌ๊ธฐ (cygwin 64์—์„œ ์‹คํ–‰)

cd build
for i in reference dunnington sandybridge haswell bulldozer piledriver carrizo; do
  mkdir -p ../build64$i
  cd ../build64$i
  ../configure $i
  cp /usr/x86_64-w64-mingw32/sys-root/mingw/bin/lib* .
  make -j8 all test CC=x86_64-w64-mingw32-gcc CPICFLAGS="" BLIS_ENABLE_DYNAMIC_BUILD=yes
done

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ•ญ๋ชฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. https://github.com/flame/blis/tree/master/config

Intel x86๊ณผ ๊ด€๋ จํ•˜์—ฌ ์ฐธ์กฐ, ๋”๋‹ํ„ด, ์ƒŒ๋“œ๋ธŒ๋ฆฌ์ง€ ๋ฐ ํ•˜์Šค์›ฐ์€ ๊ฝค ์ข‹์€ ๋ฒ”์œ„๋ฅผ ์ปค๋ฒ„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ AMD๋ฅผ ์œ„ํ•œ ๋ถˆ๋„์ €, ํŒŒ์ผ๋“œ๋ผ์ด๋ฒ„ ๋ฐ ์บ๋ฆฌ์กฐ(์ตœ๊ทผ BLIS์— ์ฐฌ์„ฑํ•˜์—ฌ ACML ๊ฐœ๋ฐœ์„ ์ค‘๋‹จํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์†Œํ•œ ์ฐฌ์„ฑ ํˆฌํ‘œ์ž„).

https://github.com/flame/blis/tree/master/build/auto-detect ์— ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋™ ๊ฐ์ง€ ์ฝ”๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค(ํ˜„์žฌ BLIS์˜ ๊ตฌ์„ฑ ์‹œ๊ฐ„์—๋งŒ ์‹คํ–‰๋˜์ง€๋งŒ ๊ทธ๊ฒƒ์ด ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์šฉ๋„๋กœ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ), ์‚ฌ์šฉํ•˜๋ ค๋Š” Python์— ์ด๋ฏธ CPU ์ œํ’ˆ๊ตฐ ์‹๋ณ„ ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

Python์— ์ด๋ฏธ CPU ์ œํ’ˆ๊ตฐ ์‹๋ณ„ ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ

๋„์›€์ด ๋˜๋‚˜์š”? http://stackoverflow.com/a/35154827/239247

๋Œ€๋ถ€๋ถ„ ๊ทธ๋กœ๋ถ€ํ„ฐ ํŒŒ์ƒ๋œ ํ”„๋กœ์„ธ์„œ ์ œํ’ˆ๊ตฐ์„ ์›ํ•˜์ง€๋งŒ https://github.com/flame/blis/blob/master/build/auto-detect/cpuid_x86.c ๋Š” ์ •ํ™•ํžˆ ๊ธธ๊ฑฐ๋‚˜ ๋ณต์žกํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. SO์—์„œ ๋งํฌ ๋œ numexpr ์†Œ์Šค๋Š” ๋ฌธ์ž์—ด ์ถœ๋ ฅ (์ ์–ด๋„ Linux์—์„œ๋Š”)์—์„œ ์ •๊ทœ์‹ ์ผ์น˜๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ตœ๊ทผ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๋งŽ์ด ๋‚˜์—ด๋˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

openblas๋Š” Haswell blis๋ณด๋‹ค 3.4๋ฐฐ ๋น ๋ฅด๋ฉฐ dunnington(๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋Š” nehalem penryn๊ณผ ๋™์ผ) blis๋ณด๋‹ค 17๋ฐฐ ๋น ๋ฆ…๋‹ˆ๋‹ค. ํฅ๋ฏธ๋กœ์šด ์ ์€ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์ด ์ด๋Ÿฌํ•œ ์‹คํ–‰์—์„œ ์„ฑ๊ณต์ ์œผ๋กœ ์ž‘๋™ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์„ค์ •์€ sandybridge ๋ฐ haswell์— ๋Œ€ํ•ด openmp๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ mingw pthreads๊ฐ€ ๋” ์ž˜ ์ž‘๋™ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. OMP_NUM_THREADS ๋ฅผ ์„ค์ •ํ•ด๋„ ํฐ ์ฐจ์ด๊ฐ€ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ATLAS 3.11์ด 3.10 ๋ฒ„์ „๋ณด๋‹ค 64๋น„ํŠธ์—์„œ ํ›จ์”ฌ ๋” ์ž˜ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ Clint Whale์˜ ๋„์›€์„ ๊ธฐ๋Œ€ํ•˜๋ฉด์„œ ํ˜„์žฌ๋กœ์„œ๋Š” ๋นŒ๋“œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Tony - 32๋น„ํŠธ ATLAS ํœ ์„ ํ…Œ์ŠคํŠธํ•  ์‹œ๊ฐ„/์—๋„ˆ์ง€๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ? ์ƒ๋Œ€์ ์œผ๋กœ ํ›จ์”ฌ ๋” ์ž˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์ž์‹ ์˜ ์„ ํ˜ธ๋„๋Š” ์ด ATLAS ํœ ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๋‹ค๋ฅธ ํฌ์žฅ์—…์ž๊ฐ€ ์ผ์ข…์˜ ํœ  ๋ฐฐ์†ก์— ์˜์กดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์„ ์ฐพ์œผ๋ฉด ๊ณง ์ƒˆ๋กœ์šด numpy ๋ฆด๋ฆฌ์Šค๊ฐ€ ๋‚˜์˜ฌ ๊ฒƒ์ด๋ฉฐ 1.10.4์—์„œ๋„ ํœ ์„ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•ด ํ•ญ์ƒ ์œ ์ง€ ๊ด€๋ฆฌ ๋ฆด๋ฆฌ์Šค๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@matthew-brett : ๋น ๋ฅธ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. numpy ๊ฐ€ Cygwin์—์„œ ATLAS ๋นŒ๋“œ๋ฅผ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋„ค์ดํ‹ฐ๋ธŒ Windows ํ™˜๊ฒฝ์—์„œ๋Š” ์™„๋ฒฝํ•˜๊ฒŒ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ Cygwin์—์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ–ˆ์„ ๋•Œ numpy ๊ฐ€ ATLAS ๋กœ ์ปดํŒŒ์ผ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

Cygwin์˜ python์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด cygwin์—์„œ ๋นŒ๋“œํ•œ ์•„ํ‹€๋ผ์Šค ๋ฒ„์ „์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

32๋น„ํŠธ Julia๋Š” 32๋น„ํŠธ Atlas dll์„ ์—ด์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด์œ ๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์ด๋ฏธ 32๋น„ํŠธ Openblas๊ฐ€ ์žˆ๊ณ  ๊ธฐํ˜ธ ์ด๋ฆ„์ด ์ถฉ๋Œํ•˜๊ธฐ ๋•Œ๋ฌธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ @matthew-brett ๋ฒ„์ „์€ Cygwin์œผ๋กœ ๋นŒ๋“œ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

mingw ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๊ต์ฐจ ์ปดํŒŒ์ผ๋œ Cygwin ๋นŒ๋“œ ํ™˜๊ฒฝ. cygwin1.dll์ด ์•„๋‹Œ msvcrt.dll์— ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

atlas-depwalker

๋Œ“๊ธ€์„ ์˜ฌ๋ฆฌ์ž๋งˆ์ž ๊ฐ‘์ž๊ธฐ ๊ทธ๊ฒŒ ์•„๋‹๊นŒ ํ•˜๋Š” ์˜์‹ฌ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์•„์•„, ์ฒ˜์Œ๋ถ€ํ„ฐ ๋งŒ๋“ค์–ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. @tkelman ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

dlopen ๋ฌธ์ œ๊ฐ€ ํŒŒ์•…๋˜์—ˆ์Šต๋‹ˆ๋‹ค(https://github.com/matthew-brett/np-wheel-builder/pull/1 ์ฐธ์กฐ ๋ฐ https://github.com/JuliaLang/julia/issues/15117 ์ฐธ์กฐ). ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€).

32๋น„ํŠธ์—์„œ ์•„ํ‹€๋ผ์Šค๋Š” ์˜คํ”ˆ๋ธ”๋ผ์Šค๋ณด๋‹ค 3.6๋ฐฐ ๋Š๋ฆฝ๋‹ˆ๋‹ค. 32๋น„ํŠธ openblas๋Š” ๋™์ผํ•œ ํฌ๊ธฐ ๋ฌธ์ œ์— ๋Œ€ํ•ด 64๋น„ํŠธ openblas๋ณด๋‹ค 3๋ฐฐ ๋Š๋ฆฝ๋‹ˆ๋‹ค. ์ตœ์‹  ์ปค๋„ ์ œํ’ˆ๊ตฐ์€ 32๋น„ํŠธ ์‹œ์Šคํ…œ์˜ openblas์—์„œ ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

...
๊ฒฐ๋ก : ์ตœ์„ ์˜ ์„ ํƒ์ด ๋ฌด์—‡์ธ์ง€ ์ง„์ง€ํ•˜๊ฒŒ ๋ชจ๋ฅด์ง€๋งŒ BLIS ๋ฌผ์— ๋ฐœ๊ฐ€๋ฝ์„ ๋‹ด๊ทธ๋Š” ๊ฒƒ์ด ์ข‹์€ ์ƒ๊ฐ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜๋”๋ผ๋„ ์šฐ๋ฆฌ๋Š” ์ ์–ด๋„ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ฐฐ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ ์–ด๋„ ์ผ๋ถ€ ํ…Œ์ŠคํŠธ/๋ฒค์น˜๋งˆํ‚น์€ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ์‹œ์ ์—์„œ๋Š” _Windows_ ๋ฌธ์ œ์™€ ๊ฑฐ์˜ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค. BLIS๋Š” ํ˜„์žฌ Linux ์ „์šฉ์ž…๋‹ˆ๋‹ค. OSX ๋นŒ๋“œ ์ง€์›์„ ์œ„ํ•œ ๊ณต๊ฐœ PR์ด ์žˆ์œผ๋ฉฐ Windows๋Š” ๋งค์šฐ ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”๊ตฐ๋‹ค๋‚˜ ์–ด์ œ 32๋น„ํŠธ Linux์—์„œ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ./configure auto && make ์ผ๋ถ€ ์–ด์…ˆ๋ธ”๋Ÿฌ ์ฝ”๋“œ( sandybridge )์—์„œ ๋”์ฐํ•˜๊ฒŒ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค. reference ๋งŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ 0๋‹จ๊ณ„๋Š” numpy.distutils ์— BLIS ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋Œ€๋ถ€๋ถ„ ์ด๋ฏธ ์ž‘๋™ํ•จ). 1๋‹จ๊ณ„๋Š” Linux์—์„œ ํ…Œ์ŠคํŠธํ•˜์—ฌ reference ์ด์ƒ์ด ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  2๋‹จ๊ณ„๋Š” ๋ฒค์น˜๋งˆํ‚น, ..., ๋‹จ๊ณ„Windows์—์„œ ๋ญ”๊ฐ€.

@matthew-brett PyPI์— ๋Œ€ํ•ด ์ œ์•ˆํ•œ ํ…์ŠคํŠธ๊ฐ€ ๊ดœ์ฐฎ์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์–ด๋–ค pip ๋ฒ„์ „์ด ABI ํƒœ๊ทธ๊ฐ€ ์žˆ๋Š” ์ด๋ฆ„์„ ๋ฌด์‹œํ•ฉ๋‹ˆ๊นŒ? Pip์€ ์š”์ฆ˜ ์Šค์Šค๋กœ๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ž”์†Œ๋ฆฌ๋ฅผ ๋งŽ์ด ํ•˜๋ฏ€๋กœ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ตœ์‹  ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  >1(.5)๋…„ ๋œ ๋ฒ„์ „์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐ”ํ€ด๋ฅผ ์„ค์น˜ํ•˜์ง€๋„ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

@rgommers ์œ„์˜ ํ…Œ์ŠคํŠธ๋Š” Windows์—์„œ ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. MSVC๋Š” ์•„๋‹ˆ์ง€๋งŒ mingwpy ๋˜๋Š” openblas๋Š” ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. clang์€ ์•„๋งˆ๋„ ์ž‘๋™ํ•˜์ง€๋งŒ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด blis์—์„œ repo ์žฌ๊ตฌ์„ฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” blis์— ๋Œ€ํ•ด Julia ๋˜๋Š” numpy์˜ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ blis๋Š” ์ž์ฒด ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. 2014๋…„์˜ ๊ฒฝํ—˜๋ณด๋‹ค ์ƒํ™ฉ์ด ํ›จ์”ฌ ๋‚˜์•„์ ธ์„œ ๊ทธ๋ ‡๊ฒŒ ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋‚ด์•ผ ํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์œผ๋กœ ์ด๋ฏธ ์„ฑ๋Šฅ ๊ฒฝ์Ÿ๋ ฅ์ด ์žˆ๋Š” blis๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ์กฐ ๊ตฌ์„ฑ์ด ํ˜„์žฌ 32๋น„ํŠธ x86์—์„œ ์ž‘๋™ํ•˜๋Š” ์œ ์ผํ•œ blis์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ์ƒˆ๋กœ์šด ์–ด์…ˆ๋ธ”๋ฆฌ ๋งˆ์ดํฌ๋กœ์ปค๋„์„ ์ž‘์„ฑํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ njsmith์˜ ์˜๊ฒฌ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

@tkelman , 32๋น„ํŠธ์šฉ OpenBLAS ์ปค๋„ ๊ด€๋ จ https://github.com/numpy/numpy/issues/5479#issuecomment -185096062: priv. ์–ผ๋งˆ ์ „์— Werner Saar๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๋ฉ”์‹œ์ง€ ์ตœ์‹  ์•„ํ‚คํ…์ฒ˜์šฉ Intel 32๋น„ํŠธ ์ปค๋„ ์ž‘์—…์„ ํ•˜๋Š” ์‚ฌ๋žŒ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๊ฒƒ์€ ๋ฏธ๋ž˜์— ๋ณ€๊ฒฝ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์—†๋Š” ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค. ์ดˆ์ ์€ Intel 64๋น„ํŠธ ๋ฐ ARM ํ”„๋กœ์„ธ์„œ์— ์žˆ์Šต๋‹ˆ๋‹ค.

@tkelman , C-runtime ๊ด€๋ จ https://github.com/numpy/numpy/issues/5479#issuecomment -185055210: IMHO ATLAS ๋ฐ OpenBLAS๊ฐ€ C-runtime(ํŒŒ์ผ ์„ค๋ช…์ž ๋ฐ ํž™ ). _์ œ๊ฐ€ ์˜ณ์•˜์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค_. ATLAS ๋นŒ๋“œ๊ฐ€ ์Šคํƒ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฌ๋Š” ๋ฐ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์—ฐ๊ฒฐํ•˜๋Š” ๋™์•ˆ ํ”Œ๋ž˜๊ทธ๋กœ ์ œ๊ณต๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ:

-Wl,--stack,16777216

ํ† ๋ก  ATLAS ๋Œ€ OpenBLAS: @matthew-brett ๋•๋ถ„์— ์ด์ œ SSE2 ๊ธฐ๋ฐ˜ ATLAS DLL์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. CPU ๋Ÿฐํƒ€์ž„ ๊ฐ์ง€๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด ์ด Atlas ๋นŒ๋“œ๋ฅผ SSE2 ์ง€์› ๋Œ€์ƒ์— ๋Œ€ํ•œ OpenBLAS ๋นŒ๋“œ์™€ ๋น„๊ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๋˜๋Š” ๋‹จ์ˆœํžˆ OPENBLAS_CORETYPE=NORTHWOOD ์„ค์ • - ๊ธฐ๋ณธ์ ์œผ๋กœ PENTIUM4). ๋ฌผ๋ก  ์ผ๋ฐ˜ OpenBLAS ๋นŒ๋“œ๋Š” CPU ๋Ÿฐํƒ€์ž„ ๊ฐ์ง€ ๋•๋ถ„์— ํ›จ์”ฌ ๋” ๋งŽ์€ CPU ๋ณ€ํ˜•์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด OpenBLAS๊ฐ€ ATLAS์— ๋น„ํ•ด ์„ฑ๋Šฅ์ด ๋” ์ข‹์€ ์ด์œ  ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ ์งˆ๋ฌธ์€ OpenBLAS์˜ ์‹ ๋ขฐ์„ฑ์ž…๋‹ˆ๋‹ค. ์ˆ˜์ง‘๋œ BLAS, LAPACK ํ…Œ์ŠคํŠธ๊ฐ€ ์žˆ๋Š” ์ €์žฅ์†Œ๊ฐ€ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

BLIS/Flame ๊ด€๋ จ: ํฅ๋ฏธ๋กญ์ง€๋งŒ ์ ์–ด๋„ ์˜ค๋Š˜๋งŒํผ์€ ๋†’์ด ๋งค๋‹ฌ๋ฆฐ ๊ณผ์ผ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ATLAS์™€ OpenBLAS ์ค‘์—์„œ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ฒฐ์ •์€ ๋‚˜์—๊ฒŒ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Ralf - pip 8์€ ์ƒˆ๋กœ์šด Windows ABI ํƒœ๊ทธ๋กœ ํœ ์„ ์„ค์น˜ํ•˜์ง€๋งŒ pip 7์€ ์„ค์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Pip 7 ๋ฐ Pip 8์€ ๊ฒฝ๊ณ  ์—†์ด ABI ํƒœ๊ทธ ์—†์ด ๋ฐ”ํ€ด๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ์ „ํžˆ ๋งŽ์€ pip 7์ด ์žˆ์œผ๋ฉฐ 2015๋…„ 8์›”์— ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ ์–ด๋„ ์ž ์‹œ ๋™์•ˆ์€ ์ข€ ๋” ํ˜ธํ™˜๋˜๋Š” ์ด๋ฆ„์„ ๊ณ ์ˆ˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

BLIS ์กฐ์‚ฌ์— +1. ์žฅ๊ธฐ์ ์œผ๋กœ ์ข‹์€ ํ•ด๊ฒฐ์ฑ…์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” Eigen์„ ์ „ํ˜€ ๊ณ ๋ คํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๊นŒ? ๋ถ€๋ถ„์ ์ธ LAPACK ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์ถ•์„ ์ง€์›ํ•˜๋ฉฐ ๋Œ€๋ถ€๋ถ„์˜ ์ฝ”๋“œ์— ๋Œ€ํ•œ ๋ผ์ด์„ ์Šค๋Š” MPL2์ž…๋‹ˆ๋‹ค. NumPy์— ์ถฉ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” BLIS cpu ๊ฐ์ง€ ์ฝ”๋“œ์—์„œ AVX ๋ช…๋ น์–ด๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜๋ฉด ์ฐธ์กฐ ๊ตฌํ˜„์œผ๋กœ ๋Œ€์ฒด๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„์ฐจ๋ ธ์Šต๋‹ˆ๋‹ค.

Ian : ์ด๊ฒƒ์€ 1๋…„ ์ •๋„ ์ „์˜ Eigen ์˜ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

๋”๊ตฐ๋‹ค๋‚˜ ์–ด์ œ 32๋น„ํŠธ Linux์—์„œ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ./configure auto && make ๋Š” ์ผ๋ถ€ ์–ด์…ˆ๋ธ”๋Ÿฌ ์ฝ”๋“œ(sandybridge์šฉ)์—์„œ ๋”์ฐํ•˜๊ฒŒ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค. ์ฐธ์กฐ๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค.

config/ ์˜ ๋‚ด์šฉ์„ ๋ณด๋ฉด -- "sandybridge", "haswell"๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์ด๋ฆ„์˜ "๊ตฌ์„ฑ"์€ ์‹ค์ œ๋กœ ๋ฏธ๋ฆฌ ์ง€์ •๋œ ์„ค์ •์„ ํฌํ•จํ•˜๋Š” ์‚ฌ์ „ ํŒจํ‚ค์ง€๋œ "์Šคํƒ€ํ„ฐ" ๊ตฌ์„ฑ์ž…๋‹ˆ๋‹ค. CPU ํŠœ๋‹ ๊ด€๋ จ ์„ค์ •๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์Šค๋ ˆ๋”ฉ ๋ชจ๋“œ ์„ค์ •, ์ปดํŒŒ์ผ๋Ÿฌ ์„ค์ • ๋“ฑ). ๊ทธ๋ฆฌ๊ณ  "sandybridge"๋ผ๋Š” ๊ตฌ์„ฑ์€ x86-64 ๊ตฌ์„ฑ์ž…๋‹ˆ๋‹ค. ์ž๋™ ๊ตฌ์„ฑ์—์„œ ์„ ํƒํ•œ ๋ฒ„๊ทธ์ฒ˜๋Ÿผ ๋“ค๋ฆฌ์ง€๋งŒ x86-32์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค :-). BLIS๋Š” 32๋น„ํŠธ x86 ์ปค๋„๊ณผ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด์ง€๋งŒ( kernels/x86 ์ฐธ์กฐ) ํ˜„์žฌ ์‚ฌ์ „ ํŒจํ‚ค์ง•๋œ ๊ตฌ์„ฑ์—์„œ ์ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ƒˆ ๊ตฌ์„ฑ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋Œ€๋ถ€๋ถ„ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋งˆ๋ฒ•์˜ ํ•œ ์กฐ๊ฐ์€ bli_kernel.h ํŒŒ์ผ์— ์žˆ์œผ๋ฉฐ ๋‚ด๋ถ€ ์ปค๋„๊ณผ ๋ช‡ ๊ฐ€์ง€ ๋ฒ„ํผ ํฌ๊ธฐ์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. x86-32์— ๋Œ€ํ•œ ์ œ์•ˆ ์‚ฌํ•ญ์ด ์žˆ์œผ๋ฉด ์—…์ŠคํŠธ๋ฆผ์— ๋ฌธ์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ:

BLIS๋Š” ํ˜„์žฌ Linux ์ „์šฉ์ž…๋‹ˆ๋‹ค. OSX ๋นŒ๋“œ ์ง€์›์„ ์œ„ํ•œ ๊ณต๊ฐœ PR์ด ์žˆ์œผ๋ฉฐ Windows๋Š” ๋งค์šฐ ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์˜ ๋ช‡ ๊ฐ€์ง€ ์˜๊ฒฌ, @tkelman ์€ Windows์—์„œ BLIS๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ๋ฒค์น˜๋งˆํ‚นํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค :-)

OpenBLAS 0.2.12๋ฅผ ์‚ฌ์šฉํ•œ ์ด์ „ ์›์œ  test_dot ๋ฒค์น˜๋งˆํฌ:

In [2]: %timeit test_dot()
1 loop, best of 3: 449 ms per loop

(์ด์ „ ๊ฒฐ๊ณผ) MKL๊ณผ ๋น„๊ต

In [9]: %timeit test_dot()
1 loop, best of 3: 764 ms per loop

64๋น„ํŠธ ATLAS:

In [10]: %timeit test_dot()
1 loop, best of 3: 2.41 s per loop

๋”ฐ๋ผ์„œ Openblas์™€ MKL(๊ณ ๋งˆ์›Œ์š”, conda)์„ Haswell BLIS ๊ตฌ์„ฑ๊ณผ ์ง๋ ฌ๋กœ ๋น„๊ตํ•  ๋•Œ ๋ชจ๋‘ dgemm์—์„œ ์„œ๋กœ ์ตœ๋Œ€ 10-20% ๋‚ด์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๊ฐ ๊ตฌ์„ฑ์˜ Windows dll์„ ๊ต์ฐจ ์ปดํŒŒ์ผํ•˜๊ธฐ ์œ„ํ•ด ๋„์ปค ํ—ˆ๋ธŒ์— ์„ฑ๊ณต์ ์œผ๋กœ ๊ตฌ์ถ•๋œ ๋„์ปค ํŒŒ์ผ์ž…๋‹ˆ๋‹ค(์ œ์™ธ https://github.com/flame/blis/pull/37#issuecomment-185480513, ์ œ๋Œ€๋กœ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ๋ถˆ๋„์ € ์ œ์™ธ) : https://github.com/tkelman/docker-mingw/blob/09c7cadd5d682066cea89b3b97bfe8ba783bbfd5/Dockerfile.opensuse

Travis์˜ services: docker ๊ตฌ์„ฑ๊ณผ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ์—ฐ๊ฒฐํ•˜๊ณ  ๋ฐ”์ด๋„ˆ๋ฆฌ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ github ๋ฆด๋ฆฌ์Šค/bintray/๋ฌด์—‡์ด๋“  ๋ฐฐํฌํ•˜๋Š” ์ž‘์—…์„ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

BLIS CPU ๊ฐ์ง€ -> ํ…œํ”Œ๋ฆฟ ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. https://raw.githubusercontent.com/flame/blis/master/build/auto-detect/cpuid_x86.c

๋‹ค์Œ์€ Python ์žฌ์ž‘์„ฑ์ž…๋‹ˆ๋‹ค. ๊ณ ๊ธ‰ ํ…œํ”Œ๋ฆฟ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ˆ˜๋ฝํ•˜๋Š” ๋ฐ ์กฐ๊ธˆ ๋” ์ž์œ ๋กœ์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค(OS๊ฐ€ C ์ฝ”๋“œ๋ณด๋‹ค AVX๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ฏฟ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋” ๋†’์Œ): https://gist.github.com/matthew-brett /a53778f99b7062cc332d

๋‚ด๊ฐ€ ํ…Œ์ŠคํŠธํ•œ ๋ชจ๋“  ์ปดํ“จํ„ฐ์—์„œ ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ '์ฐธ์กฐ'๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ์˜ค๋ž˜๋œ ์ปดํ“จํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ๋ด‡ ํŒœ์„ ๊ตฌ์ถœํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

lapack ์—†์ด ์ฐธ์กฐ BLIS์— ๋Œ€ํ•ด numpy๋ฅผ ์ปดํŒŒ์ผํ•˜๋ฉด ์›์‹œ ๋ฒค์น˜๋งˆํฌ์—์„œ ๋‹ค์Œ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

In [6]: %timeit test_dot()
1 loop, best of 3: 16.2 s per loop

๋‘ ๋ฐฐ์—ด(1000, 1000)์˜ ๋‚ด์ ์€ 12์ดˆ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Tony๋„ ๋ฐœ๊ฒฌํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์ฐธ์กฐ BLIS๋Š” lapack_lite๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋™์ผํ•œ numpy์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์—†๋Š” ๊ธฐ๋ณธ ๋นŒ๋“œ์™€ ๊ด€๋ จ๋œ ์ตœ์•…์˜ ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๊ด‘๋ฒ”์œ„ํ•œ ์‹œ์Šคํ…œ์—์„œ ํ•ฉ๋ฆฌ์ ์ธ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•˜๋ ค๋ฉด ๊ตฌํ˜• ์‹œ์Šคํ…œ์„ ๋‹ค๋ฃจ๋Š” ๋” ๋งŽ์€ ํ…œํ”Œ๋ฆฟ์ด๋‚˜ ๋” ์ž์œ ๋กœ์šด CPU ๊ฐ์ง€ -> ํ…œํ”Œ๋ฆฟ ๋งคํ•‘์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@matthew-brett ์–ธ์ œ ์ƒˆ๋กœ์šด ATLAS 64๋น„ํŠธ Windows ํœ ์ด ๋‚˜์˜ฌ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์–ด๋–ค ๋ฒ„์ „? v1.10.2? ๊ทธ๋“ค์€ pypi์—๋งŒ ์žˆ์Šต๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด ์†Œ์Šค ํฌ์ง€์—๋งŒ ์žˆ์Šต๋‹ˆ๊นŒ? ์–ด๋–ค ๋ฐœํ‘œ๋ผ๋„ ํ•˜์‹ค ๊ฑด๊ฐ€์š”? ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

@matthew-brett ๊ฐ™์€ ๊ธฐ๊ณ„์—์„œ ์•„ํ‹€๋ผ์Šค์™€ ์ฐธ์กฐ ๋ธ”๋ฆฌ์Šค์˜ ๋น„์œจ์€ ์–ผ๋งˆ์˜€๋‚˜์š”? ๋‚ด๊ฐ€๋ณด๊ณ ์žˆ๋Š” ์•ฝ 2์˜ ์š”์†Œ์™€ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? blis์—์„œ ์ž‘๋™ํ•˜๋„๋ก ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ์ œ๋Œ€๋กœ rtfmํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค(https://github.com/flame/blis/wiki/Multithreading). ์ž๋™์œผ๋กœ ํ™œ์„ฑํ™”๋˜์ง€ ์•Š๊ณ  4๊ฐœ์˜ ๋‹ค๋ฅธ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. . ์ด ํŒจ์น˜ https://gist.github.com/0fc9497a75411fcc0ec5 ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ๊ตฌ์„ฑ์— ๋Œ€ํ•ด pthreads ๊ธฐ๋ฐ˜ ๋ณ‘๋ ฌ blis๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ณ  BLIS_JC_NT=1 BLIS_IC_NT=2 BLIS_JR_NT=2 BLIS_IR_NT=2 ์„ค์ •ํ•˜๋ฉด Haswell blis๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚ด ์ปดํ“จํ„ฐ์˜ mkl ๋ฐ openblas์™€ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. BLIS_JR_NT 2๋กœ ์„ค์ •ํ•˜๋ฉด ๋ณ‘๋ ฌ ์ฐธ์กฐ blis๊ฐ€ ๋Œ€๋ถ€๋ถ„์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ์•„ํ‹€๋ผ์Šค๋ฅผ ๋”ฐ๋ผ์žก๊ณ  3๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋กœ ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค.

@tkelman IMO NumPy GitHub Wiki ํŽ˜์ด์ง€์—์„œ BLIS์— ๋Œ€ํ•œ ์ง„ํ–‰ ์ƒํ™ฉ์„ ๋ฌธ์„œํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ NumPy-BLIS-FLAME ํœ (๋ฐ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด SciPy-BLIS-FLAME ํœ )์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด mingwpy์™€ ์œ ์‚ฌํ•œ ๊ณ„ํš์„ ์ œ์•ˆํ•˜๋Š” ๊ฒƒ๋„ ํฅ๋ฏธ๋กœ์šธ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@tkelman : ๋‚ด๊ฐ€ ๋ช…ํ™•ํžˆ ํ•˜๊ธฐ ์œ„ํ•ด -- ๋‹น์‹ ์˜ ์•„ํ‹€๋ผ์Šค๋Š” ์“ฐ๋ ˆ๋“œ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๊นŒ?
๊ณ ๋ คํ•ด์•ผ ํ•  ๋˜ ๋‹ค๋ฅธ ์‚ฌํ•ญ์€ -msse2 ๋˜๋Š” reference ๋นŒ๋“œ ์„ค์ •๊ณผ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ตœ๋Œ€๋กœ ํ˜ธํ™˜๋˜๋ฉฐ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ SSE๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ—ˆ์šฉํ•˜์ง€ ์•Š์ง€๋งŒ ์ ์–ด๋„ numpy-land ๋‚˜๋Š” ๋‹ค๋ฅธ ์ด์œ ๋กœ ์–ด์จŒ๋“  ์ง€์›๋˜๋Š” ์ตœ์†Œ ๊ตฌ์„ฑ์œผ๋กœ SSE2๋ฅผ ์ง€์›ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค...

FLAME์ด ํ˜„์žฌ ์ผ๋ฐ˜ LAPACK๊ณผ ๊ด€๋ จ์ด ์žˆ๋Š”์ง€ ์—†๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฌป๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ์šฐ๋ฆฌ๋Š” ์ด ๋ฌธ์ œ๋ฅผ ๊ณ„์† ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋Œ€์‹  BLIS ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์—ด์–ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค :-)

์ด ์Šค๋ ˆ๋“œ์˜ ๊ฒฝ์šฐ - BLIS๊ฐ€ ๋นŒ๋“œ ํƒ€์ž„์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜์—ฌ ๋Ÿฐํƒ€์ž„์— ์„ ํƒ๋œ ๋‹ค์–‘ํ•œ BLIS ์ปค๋„๊ณผ ํ•จ๊ป˜ ํœ ์„ ์ด๋ฏธ ์ถœํ•˜ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Windows์˜ 64๋น„ํŠธ ATLAS๊ฐ€ ํŠนํžˆ ๋‚˜์จ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ (ATLAS์˜ ๊ฒฝ์šฐ) 64๋น„ํŠธ ATLAS๋ณด๋‹ค ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง‘๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ - ์ฐธ์กฐ ๋นŒ๋“œ๊ฐ€ 64๋น„ํŠธ ATLAS๋ณด๋‹ค ๋น ๋ฅธ ๊ฒฝ์šฐ - ์˜ˆ๋ฅผ ๋“ค์–ด -msse2์™€ ๊ฐ™์ด - ์‹ค์ œ ์˜ต์…˜์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

SSE2๋Š” 64๋น„ํŠธ์šฉ ์ตœ์†Œ ๊ตฌ์„ฑ์ด๋ฏ€๋กœ ์ฐธ์กฐ ์ปดํŒŒ์ผ์— -mfpmath=sse -msse2 ์™€ ๊ฐ™์€ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ์šฐ๋ฆฌ๋Š” ์ด ๋ฌธ์ œ๋ฅผ ๊ณ„์† ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋Œ€์‹  BLIS ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์—ด์–ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค :-)

๊ทธ๊ฒƒ์€ ์ข‹์€ ์ƒ๊ฐ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค(ํŽธ์ง‘: https://github.com/numpy/numpy/issues/5479#issuecomment-184472378์—์„œ ์ž”๋””์— ๋Œ€ํ•œ @njsmith ์˜ ๊ฐ์ •์„ ๊ฐ์•ˆํ•  ๋•Œ "Occupy BLIS"๋ผ๋Š” ์ œ๋ชฉ์„ ์ œ์•ˆํ•ด๋„ ๋ ๊นŒ์š”?) . @matthew-brett์ด ๊ธฐ์กด Atlas ํœ ์„ ์—…๋กœ๋“œํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ง„ํ–‰ํ•˜๋ฉด ํ˜„์žฌ๋กœ์„œ๋Š” ์ด ํœ ์„ ๋‹ซ๋Š” ๋ฐ ์ถฉ๋ถ„ํ•  ๊ฒƒ์ด๋ฉฐ ํ–ฅํ›„ ์ž‘์—…์€ ์ƒˆ๋กœ์šด ๋ฌธ์ œ์— ๋งก๊ฒจ์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํ™•์‹คํžˆ ํ•˜๊ธฐ ์œ„ํ•ด -- ๋‹น์‹ ์˜ ์•„ํ‹€๋ผ์Šค๋Š” ์“ฐ๋ ˆ๋“œ๋กœ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋งž์ฃ ?

๋‚ด ์ง€๋„์ฑ…์€ https://github.com/matthew-brett/np-wheel-builder/tree/d950904f19309db103e676d876ea681b6a6b882e/atlas-builds ์˜ dll์ด์ง€๋งŒ ์•„์ง 1๊ฐœ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๊นŒ?

๊ณ ๋ คํ•ด์•ผ ํ•  ๋˜ ๋‹ค๋ฅธ ์‚ฌํ•ญ์€ -msse2 ๋˜๋Š” reference ๋นŒ๋“œ ์„ค์ •๊ณผ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ตœ๋Œ€ํ•œ ํ˜ธํ™˜๋˜๋ฉฐ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ SSE๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

SSE2๋Š” x86_64 ์‚ฌ์–‘์˜ ์ผ๋ถ€์ด๋ฏ€๋กœ 32๋น„ํŠธ์—์„œ๋งŒ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Julia์—์„œ๋Š” 32๋น„ํŠธ ๋นŒ๋“œ์— -march=pentium4 ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

FLAME์ด ํ˜„์žฌ ์ผ๋ฐ˜ LAPACK๊ณผ ๊ด€๋ จ์ด ์žˆ๋Š”์ง€ ์—†๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฌป๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์•„์ง ๋ถˆ๊ฝƒ์„ ๋งŒ์ง€์ง€๋Š” ์•Š์•˜์ง€๋งŒ ๊ฐ€์ง€๊ณ  ๋†€ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ mingwpy์— ๋Œ€ํ•œ ๋ฐฑ์—… ๊ณ„ํš ๋Œ€์•ˆ์œผ๋กœ WINdows Clang์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (ํŽธ์ง‘: ์‹ค์ œ๋กœ ์ด๊ฒƒ์€ scipy์—์„œ ํฌํŠธ๋ž€์„ ์ˆ˜์ •ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์•„๋‹ ์ˆ˜๋„ ์žˆ์Œ)

@matthew-brett: (ํ‹€๋ฆด ์ˆ˜ ์žˆ์Œ) dunnington ์ปค๋„์—๋Š” SSE3๋งŒ ํ•„์š”ํ•˜๋ฉฐ Steam ํ•˜๋“œ์›จ์–ด ์„ค๋ฌธ์กฐ์‚ฌ์— ๋”ฐ๋ฅด๋ฉด ์‹œ์Šคํ…œ์˜ 99.94%(SSE2์˜ ๊ฒฝ์šฐ 99.99%)์— ์กด์žฌํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋Œ€๋‹ค์ˆ˜์˜ ์‹œ์Šคํ…œ์ด ์ด๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•˜๋ฉด ์ž˜๋ชป๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด cpuid ์ฝ”๋“œ์˜ ๋ฒ„๊ทธ์ธ์ง€, ์–ด๋–ป๊ฒŒ ๋“  ์ •๋ง ๋Œ€ํ‘œ์„ฑ์ด ์—†๋Š” ํ…Œ์ŠคํŠธ ์‹œ์Šคํ…œ ์„ธํŠธ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š”์ง€, ๋˜๋Š” ์ œ ์ดํ•ด๋กœ๋Š” ์ปค๋„์ด ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒƒ.

์œ„์˜ ์š”์ง€์—์„œ CPU ๊ฐ์ง€ ์ฝ”๋“œ์˜ Python ์žฌ์ž‘์„ฑ์„ ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ํ…œํ”Œ๋ฆฟ ์„ ํƒ์€ ๋ณด์ˆ˜์ ์ด๋ฉฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค๋ฅธ ํ…œํ”Œ๋ฆฟ์ด ์ž‘๋™ํ–ˆ์„ ์ˆ˜ ์žˆ๋Š” ์œ„์น˜๋ฅผ ์ฐธ์กฐํ•˜๋„๋ก ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

BLIS์— ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ site.cfg ๊ฐ€ ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.

[blas]
blas_libs = numpy-blis-reference
library_dirs = c:\code\blis\test\lib
include_dirs = c:\code\blis\test\include

๋‚˜๋Š” ๋˜ํ•œ ์ด๊ฒƒ์„ํ–ˆ๊ณ  ๊ทธ๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค (numpy 1.10.4์— ๋Œ€ํ•œ ํŒจ์น˜).

diff --git a/numpy/distutils/system_info.py b/numpy/distutils/system_info.py
index d7eb49e..3cb7f95 100644
--- a/numpy/distutils/system_info.py
+++ b/numpy/distutils/system_info.py
@@ -1680,18 +1680,11 @@ class blas_info(system_info):
         info = self.check_libs(lib_dirs, blas_libs, [])
         if info is None:
             return
-        if platform.system() == 'Windows':
-            # The check for windows is needed because has_cblas uses the
-            # same compiler that was used to compile Python and msvc is
-            # often not installed when mingw is being used. This rough
-            # treatment is not desirable, but windows is tricky.
-            info['language'] = 'f77'  # XXX: is it generally true?
-        else:
-            lib = self.has_cblas(info)
-            if lib is not None:
-                info['language'] = 'c'
-                info['libraries'] = [lib]
-                info['define_macros'] = [('HAVE_CBLAS', None)]
+        lib = self.has_cblas(info)
+        if lib is not None:
+            info['language'] = 'c'
+            info['libraries'] = [lib]
+            info['define_macros'] = [('HAVE_CBLAS', None)]
         self.set_info(**info)

     def has_cblas(self, info):

CPU์˜ ๋Ÿฐํƒ€์ž„ ๊ฐ์ง€๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ: https://github.com/matthew-brett/x86cpu

์ด๊ฒƒ์ด numpy ์ž์ฒด์— ํฌํ•จ๋  ์ˆ˜ ์žˆ๋Š” ํ›„๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์ปดํŒŒ์ผ๋œ ๋‹จ์ผ cpuinfo ๋ชจ๋“ˆ์„ Windows ํœ ์˜ numpy ํŠธ๋ฆฌ์— ๋ณต์‚ฌํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…• ๋ชจ๋‘. ์ƒ๊ฐ: ๋‹ค์–‘ํ•œ ๋ฒกํ„ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋นŒ๋“œ๋œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋‹ค๋ฅธ numpy ํœ ์„ ๊ฒŒ์‹œํ•˜๋ ค๋ฉด ๋‹ค๋ฅธ PyPI ํŒจํ‚ค์ง€ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. https://pypi.python.org/pypi/numpy/1.8.1
  2. https://pypi.python.org/pypi/numpy-mkl
  3. https://pypi.python.org/pypi/numpy-atlas

Gohlke์˜ ๋ฐ”ํ€ด๋ฅผ ์—…๋กœ๋“œํ•˜๋ ค๊ณ  2๊ฐœ๋ฅผ ๋“ฑ๋กํ–ˆ์ง€๋งŒ PyPI์—์„œ ๊ฑฐ๋ถ€ํ–ˆ์Šต๋‹ˆ๋‹ค. URL์— ์˜ค์‹  ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

gh-7294๋Š” numpy.distutils ์— BLIS ์ง€์›์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€ ์ด๊ฒƒ์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฌ์ „ํžˆ ๋งŽ์€ pip 7์ด ์žˆ์œผ๋ฉฐ 2015๋…„ 8์›”์— ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ ์–ด๋„ ์ž ์‹œ ๋™์•ˆ์€ ์ข€ ๋” ํ˜ธํ™˜๋˜๋Š” ์ด๋ฆ„์„ ๊ณ ์ˆ˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

Pip 7.0์€ ์•„์ง ๊ทธ๋ ‡๊ฒŒ ์˜ค๋ž˜๋˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

... BLIS๋Š” 32๋น„ํŠธ x86 ์ปค๋„๊ณผ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด์ง€๋งŒ(kernels/x86 ์ฐธ์กฐ) ํ˜„์žฌ ์‚ฌ์ „ ํŒจํ‚ค์ง•๋œ ๊ตฌ์„ฑ์—์„œ ์ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๊ทธ๊ฒƒ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค Ralf - ํ…Œ์ŠคํŠธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ์ƒˆ๋กœ์šด ์“ฐ๋ ˆ๋“œ๋ฅผ ํ•„์š”๋กœ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ, ์šฐ๋ฆฌ๋Š” ์ด์ œ ๋ฆด๋ฆฌ์Šค๋ฅผ ์œ„ํ•ด BLIS ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์— ๋งค์šฐ ๊ฐ€๊น์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ ์šฐ๋ฆฌ์—๊ฒŒ ํ•„์š”ํ•œ ๊ฒƒ์€ ATLAS 64๋น„ํŠธ Windows ๋นŒ๋“œ๋ณด๋‹ค ๋‹ค์†Œ ๋น ๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋Š” SSE2๊ฐ€ ์žˆ๋Š” ์‹œ์Šคํ…œ๊ณผ SSE3์ด ์žˆ๋Š” ์‹œ์Šคํ…œ์— ๊ถŒ์žฅ๋˜๋Š” ํ…œํ”Œ๋ฆฟ๋ฟ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ์ƒˆ๋กœ์šด ์“ฐ๋ ˆ๋“œ๋ฅผ ํ•„์š”๋กœ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ, ์šฐ๋ฆฌ๋Š” ์ด์ œ ๋ฆด๋ฆฌ์Šค๋ฅผ ์œ„ํ•ด BLIS ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์— ๋งค์šฐ ๊ฐ€๊น์Šต๋‹ˆ๋‹ค.

์–ด, ๊ธฐ์ˆ ์ ์œผ๋กœ ์ž‘๋™ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๊ทธ๋ ‡๊ฒŒ ๋ฒฝ ๋„ˆ๋จธ๋กœ ๋นŒ๋“œ๋ฅผ ๋˜์ง€๋Š” ๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์ข‹์€ ๊ณ„ํš์ด ์•„๋‹™๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์•„์ง Linux๋‚˜ OS X์—์„œ BLIS์— ๋Œ€ํ•œ ์ง„์ง€ํ•œ ํ…Œ์ŠคํŠธ์กฐ์ฐจ ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Windows์—์„œ BLIS FAQ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งํ•ฉ๋‹ˆ๋‹ค .

Support for building in Windows is also a long-term goal of ours. 
The Windows build system exists as a separate entity within the top-level
windows directory. However, this feature is still experimental and should not 
(yet) be expected to work reliably. Please contact the developers on the blis-devel 
mailing list for the latest on the Windows build system.

, ํ™•์‹คํžˆ ๋„ˆ๋ฌด ์ด๋ฅด๋‹ค. ํ…Œ์ŠคํŠธ ์™ธ์—๋„ ์ผ๋ถ€ ๋ฒค์น˜๋งˆํ‚น๋„ ์ข‹์€ ์•„์ด๋””์–ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ฌผ๋ก ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Tony๊ฐ€ ๋ณด์—ฌ์ฃผ๋“ฏ์ด ํฌ๋กœ์Šค ์ปดํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ Windows์šฉ BLIS๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์€ ์‹ค์ œ๋กœ ์–ด๋ ต์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‹คํ—˜์ ์ธ ๊ฒƒ์€ - ๋‚ด ์ƒ๊ฐ์— - ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” MSVC ๋นŒ๋“œ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.

์ง€๊ธˆ์€ Windows ํœ ์— BLIS๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์„ ์ œ์•ˆํ•˜๊ณ  ์žˆ์ง€๋งŒ ๋ฌผ๋ก  manylinux ๋นŒ๋“œ์—์„œ๋„ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ข‹์Šต๋‹ˆ๋‹ค.

ํ‰๊ท ์ ์œผ๋กœ ์ƒ๋‹นํ•œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์–ป์ง€ ๋ชปํ•œ๋‹ค๋ฉด BLIS๋ฅผ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ ํ˜„์žฌ๋กœ์„œ๋Š” ๋งค์šฐ ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์„œ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค๋Š” ๋ฐ ์ „์ ์œผ๋กœ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ช‡ ๊ฐ€์ง€ ์ƒˆ๋กœ์šด ํ…œํ”Œ๋ฆฟ์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ณ ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ์ธ์ง€ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ •ํ™•์„ฑ์„ ์œ„ํ•ด ๋‚˜๋„ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฑธ ๋ณด์—ฌ์ฃผ๋ฉด ์–ด๋•Œ

a) ๋ชจ๋“  numpy ํ…Œ์ŠคํŠธ๋Š” ๋ชจ๋“  ๋ฒ„์ „์˜ Windows์—์„œ ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค.
b) ๋ชจ๋“  numpy ๋ฐ scipy ํ…Œ์ŠคํŠธ๋Š” manylinux ์‹œ์Šคํ…œ์„ ํ†ต๊ณผํ•ฉ๋‹ˆ๊นŒ?

BLIS ํ…œํ”Œ๋ฆฟ์„ ๋Ÿฐํƒ€์ž„์— ์„ ํƒ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ์ตœ์‹  ์‹œ์Šคํ…œ์—์„œ ๋ชจ๋“  ์ปค๋„์„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋ž˜๋œ ๋ถˆ์พŒํ•œ ๊ธฐ๊ณ„์—์„œ๋„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ์€ Windows ํœ ์— BLIS๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์„ ์ œ์•ˆํ•˜๊ณ  ์žˆ์ง€๋งŒ ๋ฌผ๋ก  manylinux ๋นŒ๋“œ์—์„œ๋„ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ข‹์Šต๋‹ˆ๋‹ค.

manylinux ๋Š” ๋œ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ์Šคํƒ์ด ์žˆ๋Š” ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์™€ ํ›จ์”ฌ ๋” ์‰ฝ๊ฒŒ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด numpy + BLAS/LAPACK ์ปจํ…์ŠคํŠธ์—์„œ ๊ฑฑ์ •ํ•˜๊ธฐ ์ „์— ๋จผ์ € ์ „์ฒด Manylinux ๊ฐœ๋…์ด ์‹œ์ž‘๋˜๋Š” ๊ฒƒ์„ ๋ด…์‹œ๋‹ค. :)

Windows์˜ ๊ฒฝ์šฐ ์šฐ๋ฆฌ์˜ ์šฐ์„ ์ˆœ์œ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1) ์ „์ฒด ์Šคํƒ ์†”๋ฃจ์…˜(OpenBLAS/ATLAS/BLIS ์ค‘ ํ•˜๋‚˜์™€ ํ•จ๊ป˜ MingwPy ํ•„์š”)
2) ์Šคํ†ฑ๊ฐญ ๋ฐ”์ด๋„ˆ๋ฆฌ ํœ (ATLAS ๋นŒ๋“œ์™€ ํ•จ๊ป˜ ์˜ฌ๋ผ๊ฐˆ ์˜ˆ์ •์ธ ํœ ์ด ์žˆ์Šต๋‹ˆ๋‹ค)
3) (1)์˜ ์„ฑ๋Šฅ์„ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค. ์—ฌ๊ธฐ์—์„œ BLIS๊ฐ€ ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ Windows์—์„œ BLIS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํฌ๊ฒŒ ์„œ๋‘๋ฅผ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

ํ‰๊ท ์ ์œผ๋กœ ์ƒ๋‹นํ•œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์–ป์ง€ ๋ชปํ•œ๋‹ค๋ฉด BLIS๋ฅผ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ ํ˜„์žฌ๋กœ์„œ๋Š” ๋งค์šฐ ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์„œ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค๋Š” ๋ฐ ์ „์ ์œผ๋กœ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ช‡ ๊ฐ€์ง€ ์ƒˆ๋กœ์šด ํ…œํ”Œ๋ฆฟ์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ณ ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ์ธ์ง€ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์˜๋ฏธ๊ฐ€ ์žˆ์œผ๋ ค๋ฉด ์ƒ๋‹นํ•œ ์ด๋“์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์ž‘์—…์ด ํ•„์š”ํ•œ์ง€ ํ™•์ธํ•˜๊ธฐ๊ฐ€ ์•ฝ๊ฐ„ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

์ •ํ™•์„ฑ์„ ์œ„ํ•ด ๋‚˜๋„ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฑธ ๋ณด์—ฌ์ฃผ๋ฉด ์–ด๋•Œ

a) ๋ชจ๋“  numpy ํ…Œ์ŠคํŠธ๋Š” ๋ชจ๋“  ๋ฒ„์ „์˜ Windows์—์„œ ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค.
b) ๋ชจ๋“  numpy ๋ฐ scipy ํ…Œ์ŠคํŠธ๋Š” manylinux ์‹œ์Šคํ…œ์„ ํ†ต๊ณผํ•ฉ๋‹ˆ๊นŒ?

๊ทธ ์ข‹์€ ์†Œ๋ฆฌ. scikit-learn ๋„ ํฌํ•จํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด๋ฉฐ ์ด๋Š” ์ƒ๋‹นํžˆ ์ค‘์š”ํ•œ linalg ์‚ฌ์šฉ์ž์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” blis์™€ libflame์ด ์–ผ๋งˆ ์ „์— ๊ณต๊ฐœ๋œ ACML ์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ์ผ๋ถ€๋ผ๋Š” ๊ฒƒ์„ ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค.

http://developer.amd.com/community/blog/2015/08/07/open-source-strikes-again-accelerated-math-libraries-at-amd/
http://developer.amd.com/tools-and-sdks/opencl-zone/acl-amd-compute-libraries/

๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ : ์ˆ˜๋งŽ์€ CPU ์•„ํ‚คํ…์ฒ˜์—์„œ ํ…Œ์ŠคํŠธํ•  MSVC ๋˜๋Š” mingwpy๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ numpy/scipy ๋นŒ๋“œ์— ๋Œ€ํ•œ 4๊ฐ€์ง€ ๋‹ค๋ฅธ ๊ฐ€์† BLAS/Lapack ๊ตฌํ˜„์„ ๋น„๊ตํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•: Pentium4์—์„œ skylake๊นŒ์ง€?

@carlk ๋ฅผ ์ž˜ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. acml ๋ฐ ์˜คํ”ˆ ์†Œ์Šค acl์„ ์‚ญ์ œํ•œ๋‹ค๊ณ  ๋ฐœํ‘œํ•œ ๊ฒƒ์„ ๊ธฐ์–ตํ•˜์ง€๋งŒ blis/libflame์„ ์ฑ„ํƒํ•œ ๊ฒƒ์€ ๊ธฐ์–ต๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. bsd ๋ผ์ด์„ ์Šค๋Š” ๋งค์šฐ ์ข‹์€ ์†Œ์‹์ž…๋‹ˆ๋‹ค! numpy์™€ Julia๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๊ธฐ ์œ„ํ•ด ut Austin์˜ AMD ๋ฐ shpc์™€ ํ˜‘๋ ฅํ•  ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

msys2 ๋ฐ haswell ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ libblis.a๋ฅผ ๊ต์ฐจ ์ปดํŒŒ์ผํ•˜๊ณ  ์ปค๋„ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ํŒจ์น˜ํ•˜์—ฌ ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ libflame์„ ๋นŒ๋“œํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ํ–‰๋ณต ํ† ๋ก  ๋ฉ”์ผ ๋ง๋ฆฌ์ŠคํŠธ ๊ฒŒ์‹œ๋ฌผ. ๋˜ํ•œ ๊ฐœ์ธ์ ์œผ๋กœ lapack์—์„œ libblis.a๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ ์ˆ˜ ์—†์—ˆ์ง€๋งŒ ๊ทธ๋‹ค์ง€ ๋…ธ๋ ฅํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

MKL์˜ ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ผ์ด์„ ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด pypi์—์„œ MKL ํœ ์„ ์ œ๊ณตํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ผ์ด์„ ์Šค๊ฐ€ ์‹ค์ œ๋กœ ํ˜ธํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ifort ์—†์ด scipy๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๊นŒ?

ํ•œ ๊ฐ€์ง€ ๋ฌธ์ œ๋Š” ์•„๋งˆ๋„ scipy์— ์†ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์–ธ๊ธ‰๋˜์ง€ ์•Š์€ ๊ฒƒ์€ scipy์˜ ๋‚˜๋จธ์ง€ Fortran ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ๋ฉ์ฒญํ•œ ์งˆ๋ฌธ์— ๋Œ€ํ•ด ์ฃ„์†กํ•˜์ง€๋งŒ ์™œ ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ๋“ค์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋‚˜์—๊ฒŒ Fortran๊ณผ ๋ฌด๋ฃŒ ๋ฉ€ํ‹ฐํ”Œ๋žซํผ ์ปดํŒŒ์ผ๋Ÿฌ์˜ ๋ถ€์žฌ๊ฐ€ ์—ฌ๊ธฐ์—์„œ ์ง„์งœ ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๊ฒฐ๊ตญ mingwpy๊ฐ€ ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒƒ ์•„๋‹™๋‹ˆ๊นŒ? ๋ฌด๋ฃŒ MKL์ด๋‚˜ ๋ฏธ๋ž˜์˜ ๋งˆ๋ฒ• acl blis/flame์ด ์ฃผ์–ด์ง€๋ฉด c-์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ๊ฐ€์ง„ ์‚ฌ๋žŒ์€ ๋ˆ„๊ตฌ๋‚˜ scipy ์Šคํƒ์„ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์ง€๋งŒ *.f ํŒŒ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค.

@mikofski , blis๊ฐ€ msys2๋กœ ์ปดํŒŒ์ผ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์†Œ์‹์„ ๋“ฃ๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. libflame๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ธ๊ฐ€์š”? Lapack API์šฉ libflame์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
๊ฐœ์ธ์ ์œผ๋กœ MSVC๋ฅผ numpy๋กœ ์ปดํŒŒ์ผํ•˜๊ณ  mingwpy๋กœ ์ปดํŒŒ์ผ๋œ scipy์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด _๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค_. long double == double์ด ๋˜๋„๋ก ํ•˜๋ ค๋ฉด gcc ํ”Œ๋ž˜๊ทธ์— -mlong-double-64 ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋™์ž‘์„ gcc์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ๊นŒ๋‹ค๋กญ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์ผ์ฃผ์ผ๋ถ€ํ„ฐ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด์ผ์€ scipy ๋ฐ”ํ€ด๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ฌ๊ฒŒ์š”. ์ด๊ฒƒ์€ @matthew-brett์˜ numpy wheel์—์„œ ์ œ๊ณตํ•˜๋Š” Atlas๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ €๋Š” ์ง€๊ธˆ OpenBLAS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ์ฐฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

ํ•œ ๊ฐ€์ง€ ๋ฌธ์ œ๋Š” ์•„๋งˆ๋„ scipy์— ์†ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์–ธ๊ธ‰๋˜์ง€ ์•Š์€ ๊ฒƒ์€ scipy์˜ ๋‚˜๋จธ์ง€ Fortran ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ๋ฉ์ฒญํ•œ ์งˆ๋ฌธ์— ๋Œ€ํ•ด ์ฃ„์†กํ•˜์ง€๋งŒ ์™œ ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ๋“ค์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

๋งค์šฐ ์œ ์šฉํ•˜๊ณ  ๊ณ ์„ฑ๋Šฅ์ธ ์ฝ”๋“œ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. BLAS/LAPACK ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ scipy.sparse.linalg , scipy.linalg , scipy.special ๋ฐ scipy.interpolate ๊ฐ€ ํฌํŠธ๋ž€์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ Scipy๋Š” Fortran ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ์œ ์ผํ•œ ํ”„๋กœ์ ํŠธ๊ฐ€ ์•„๋‹ˆ๋ฉฐ bvp_solver์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์™€ f2py ๋กœ ๋ž˜ํ•‘ํ•œ ์‚ฌ๋žŒ๋“ค์˜ Fortran ์ฝ”๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์‹ค, Carl์„ ์ž˜ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ : ์ˆ˜๋งŽ์€ CPU ์•„ํ‚คํ…์ฒ˜์—์„œ ํ…Œ์ŠคํŠธํ•  MSVC ๋˜๋Š” mingwpy๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ numpy/scipy ๋นŒ๋“œ์— ๋Œ€ํ•œ 4๊ฐ€์ง€ ๋‹ค๋ฅธ ๊ฐ€์† BLAS/Lapack ๊ตฌํ˜„์„ ๋น„๊ตํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•: Pentium4์—์„œ skylake๊นŒ์ง€?

์ด๊ฒƒ์€ ์‹ค์ œ๋กœ ์ ์ ˆํ•œ ์ž๋™ํ™”๋œ ๋นŒ๋“œ/ํ…Œ์ŠคํŠธ/๋ฒค์น˜๋งˆํฌ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์•„์ฃผ ์˜ค๋ž˜๋œ CPU ์•„ํ‚คํ…์ฒ˜(๋ฌธ์ œ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ํ•œ ๊ดœ์ฐฎ์Œ)์— ์‹ ๊ฒฝ ์“ธ ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ MSVC๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •ํ•˜๋ ค๋ฉด ์—ฌ์ „ํžˆ ์•ฝ๊ฐ„์˜ ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

@rgommers ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์•ˆ๋…• ๋ชจ๋‘. ์ƒ๊ฐ: ๋‹ค์–‘ํ•œ ๋ฒกํ„ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋นŒ๋“œ๋œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋‹ค๋ฅธ numpy ํœ ์„ ๊ฒŒ์‹œํ•˜๋ ค๋ฉด ๋‹ค๋ฅธ PyPI ํŒจํ‚ค์ง€ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

https://pypi.python.org/pypi/numpy/1.8.1
https://pypi.python.org/pypi/numpy-mkl
https://pypi.python.org/pypi/numpy-atlas

Gohlke์˜ ๋ฐ”ํ€ด๋ฅผ ์—…๋กœ๋“œํ•˜๋ ค๊ณ  2๊ฐœ๋ฅผ ๋“ฑ๋กํ–ˆ์ง€๋งŒ PyPI์—์„œ ๊ฑฐ๋ถ€ํ–ˆ์Šต๋‹ˆ๋‹ค. URL์— ์˜ค์‹  ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

@hickford ์ œ๋ฐœ ๊ทธ๋Ÿฌ์ง€ ๋งˆ์„ธ์š”. ์ด์™€ ๊ฐ™์€ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์žฌ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์€ MKL ๋ผ์ด์„ผ์Šค๋ฅผ ์œ„๋ฐ˜ํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ(๊ฐœ์ธ ๋ผ์ด์„ผ์Šค๊ฐ€ ์—†๋Š” ํ•œ) ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์ด ์•„๋‹™๋‹ˆ๋‹ค. ์•ž์œผ๋กœ๋Š” ์ถ”๊ฐ€ ๊ธฐ๋Šฅ( numpy[atlas] , numpy[openblas] ๋“ฑ)์„ ํ†ตํ•ด ์ผ๋ถ€ ๋ง›์„ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๋ฌป์ง€ ์•Š๊ณ  PyPi์—์„œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ๋ฐ”ํ€ด๋ฅผ ์žฌ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์€ ์•„๋งˆ๋„ ํ•  ์ผ์ด ์•„๋‹ ๊ฒƒ์ž…๋‹ˆ๋‹ค....

Mingwpy ๋ฐ CPython๊ณผ ๊ฐ™์€ C ๋Ÿฐํƒ€์ž„์— ์—ฐ๊ฒฐ์— ์˜์กดํ•˜๋Š” ํฌํŠธ๋ž€ ๋ฌธ์ œ๋Š” ์†๋„๋Š” BLIS ํ•ด๊ฒฐํ•  ์ˆ˜์žˆ๋Š” ๋ฌธ์ œ ์ ์€ ๋ฌธ์ œ์™€ ์‹คํ—˜์„ํ•˜์ง€๋งŒ, ๋ˆ„๊ตฐ๊ฐ€์— ์˜ํ•ด ๋…๋ฆฝ์ ์œผ๋กœ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค, @carlkl์— ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ ์ง€๊ธˆ BLIS๋ฅผ ๋ณด๊ธฐ ์œ„ํ•ด ๊ฐœ์ธ์ ์ธ ์‹œ๊ฐ„์„ ๋‹ค ์จ๋ฒ„๋ ธ์ง€๋งŒ #7294๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

Tony - ๋„์›€์„ ์ฃผ์…”์„œ ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

64๋น„ํŠธ์— ์ตœ์‹  ATLAS(3.11.38) ๋นŒ๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

https://github.com/matthew-brett/np-wheel-builder

์ด๊ฒƒ์€ Windows์—์„œ 3.11.38์„ ์ปดํŒŒ์ผํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ง๋ ฌ(์Šค๋ ˆ๋“œ๋˜์ง€ ์•Š์€) ๋นŒ๋“œ์ด์ง€๋งŒ 3.10.1๋ณด๋‹ค ์•ฝ๊ฐ„ ๋” ๋นจ๋ผ์•ผ ํ•˜๋ฉฐ ๋‚ด ๊ฐ„๋‹จํ•œ ๋ฒค์น˜๋งˆํฌ์— ์žˆ์Šต๋‹ˆ๋‹ค.

In [2]: %timeit test_dot()
1 loop, best of 3: 1.65 s per loop

์ด์ „ 3.10.1 ๋นŒ๋“œ์™€ ๋น„๊ต(์œ„ ์ฐธ์กฐ):

In [10]: %timeit test_dot()
1 loop, best of 3: 2.41 s per loop

@tkelman - Julia์—์„œ ์ด ๋นŒ๋“œ๋ฅผ ๋ฒค์น˜๋งˆํ‚นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

MKL ๋ฐ”์ด๋„ˆ๋ฆฌ์— ๋Œ€ํ•œ ์‚ฌ์ „ ๋ฉ”๋ชจ๋กœ ์—ฌ๊ธฐ๋กœ ๋›ฐ์–ด๋“ค์–ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ธํ…”์€
๋ชจ๋‘์—๊ฒŒ ๋ฌด๋ฃŒ์ด๋ฏ€๋กœ ์žฌ๋ฐฐํฌ๋ฅผ ํ—ˆ์šฉํ•ด์•ผ ํ•˜๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฒ„์ „...
2016๋…„ 3์›” 2์ผ ์˜คํ›„ 3์‹œ 88๋ถ„์— "Matthew Brett" [email protected] ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

64๋น„ํŠธ์— ์ตœ์‹  ATLAS(3.11.38) ๋นŒ๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

https://github.com/matthew-brett/np-wheel-builder

์ด๊ฒƒ์€ 3.11.38 ์ปดํŒŒ์ผ ๋ฌธ์ œ๋กœ ์ธํ•ด ์ง๋ ฌ(์Šค๋ ˆ๋“œ๋˜์ง€ ์•Š์€) ๋นŒ๋“œ์ž…๋‹ˆ๋‹ค.
Windows์—์„œ๋Š” 3.10.1๋ณด๋‹ค ์•ฝ๊ฐ„ ๋” ๋นจ๋ผ์•ผ ํ•˜๋ฉฐ ๋‚ด ๊ฐ„๋‹จํ•œ
๊ธฐ์ค€:

[2]์—์„œ: %timeit test_dot()
๋ฃจํ”„ 1๊ฐœ, ์ตœ๊ณ  3๊ฐœ: ๋ฃจํ”„๋‹น 1.65์ดˆ

์ด์ „ 3.10.1 ๋นŒ๋“œ์™€ ๋น„๊ต(์œ„ ์ฐธ์กฐ):

[10]์—์„œ: %timeit test_dot()
๋ฃจํ”„ 1๊ฐœ, ์ตœ๊ณ  3๊ฐœ: ๋ฃจํ”„๋‹น 2.41์ดˆ

@tkelman https://github.com/tkelman - ์ด ๋นŒ๋“œ๋ฅผ ๋ฒค์น˜๋งˆํ‚นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
์ค„๋ฆฌ์•„?

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/numpy/numpy/issues/5479#issuecomment -191431331.

@mrslezak - ๋ผ์ด์„ผ์Šค๋Š” ์žฌ๋ฐฐํฌ๋ฅผ ํ—ˆ์šฉํ•˜์ง€๋งŒ ์ธํ…”์ด ์†Œํ”„ํŠธ์›จ์–ด ์‚ฌ์šฉ์˜ ๊ฒฐ๊ณผ๋กœ ์†Œ์†ก์„ ๋‹นํ•˜๋Š” ๊ฒฝ์šฐ ์žฌ๋ฐฐํฌ์ž๊ฐ€ ๋ชจ๋“  ๋ฒ•์  ๋น„์šฉ์— ๋Œ€ํ•ด ์ฑ…์ž„์„ ์ง€๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ฒฐ๊ณผ ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” BSD ๋ผ์ด์„ ์Šค๋ฅผ ๋ฐ›์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฐธ์กฐ: http://mingwpy.github.io/blas_lapack.html#intel -math-kernel-library

'์žˆ๋Š” ๊ทธ๋Œ€๋กœ ์ œ๊ณต๋˜๋ฉฐ ์–ด๋– ํ•œ ์ฑ…์ž„๋„ ์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๊ทธ๊ฒƒ์˜ ์‚ฌ์šฉ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ธˆ์ „์  ์†์‹ค' ๋˜๋Š” ๊ทธ ์˜ํ–ฅ์— ๋Œ€ํ•œ ๊ฒƒ?
2016๋…„ 3์›” 2์ผ ์˜คํ›„ 6์‹œ 22๋ถ„์— "Matthew Brett" [email protected] ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

@mrslezak https://github.com/mrslezak - ๋ผ์ด์„ผ์Šค๊ฐ€ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค
์žฌ๋ฐฐํฌํ•˜์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ ์žฌ๋ฐฐํฌ์ž๊ฐ€ ๋ชจ๋“  ๋ฒ•์  ๋น„์šฉ์— ๋Œ€ํ•ด ์ฑ…์ž„์„ ์ง€๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
์ธํ…”์€ ์†Œํ”„ํŠธ์›จ์–ด ์‚ฌ์šฉ์˜ ๊ฒฐ๊ณผ๋กœ ์†Œ์†ก์„ ๋‹นํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ทธ ๊ฒฐ๊ณผ
๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” BSD ๋ผ์ด์„ ์Šค๊ฐ€ ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ณด๋‹ค:
http://mingwpy.github.io/blas_lapack.html#intel -math-kernel-library

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/numpy/numpy/issues/5479#issuecomment -191505500.

์šฐ๋ฆฌ๋Š” Intel์˜ ๋ผ์ด์„ ์Šค์— ๋™์˜ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๊ฒƒ์ด ํšจ๊ณผ๊ฐ€ ์—†์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Intel์˜ ๋ผ์ด์„ ์Šค์—๋Š” ์†Œ์†ก์„ ๋‹นํ•  ๊ฒฝ์šฐ ๋ฒ•์  ๋น„์šฉ์„ ์ง€๋ถˆํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ผ์ด์„ ์Šค ๊ณ„์•ฝ์—์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ธํ…”์„ ๊ณ ์†Œํ•˜์ง€ ์•Š๋„๋ก ์š”๊ตฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ธํ…”์„ ๊ณ ์†Œํ•˜๊ณ  ์ธํ…”์ด ์šฐ๋ฆฌ์—๊ฒŒ ๋ˆ์„ ์š”๊ตฌํ•˜๋ฉด ํ•ด๋‹น ๋น„์šฉ์— ๋Œ€ํ•ด ์‚ฌ์šฉ์ž๋ฅผ ๊ณ ์†Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ผ์ด์„ ์Šค๋Š” ์šฐ๋ฆฌ๋ฅผ BSD์—์„œ ๋” ๋ฉ€๋ฆฌ ๋ฐ๋ ค๊ฐˆ ๊ฒƒ์ด๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ๋™์˜ํ•˜๋„๋ก ์š”๊ตฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” pip์— ์˜ํ•ด ์„ค์น˜๋œ ๋ฐ”ํ€ด์˜ ๊ฒฝ์šฐ ์‹ค์šฉ์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

SSE3์šฉ ATLAS๋ฅผ ๋นŒ๋“œํ•˜๋ฉด SSE2 ATLAS์— ๋น„ํ•ด 5%์˜ ์„ฑ๋Šฅ ์ด์ ๋งŒ ์ œ๊ณต๋˜์ง€๋งŒ ๋นŒ๋“œ๊ฐ€ ๊นŒ๋‹ค๋กœ์› ๊ณ  SSE3์— ๋Œ€ํ•ด ๊ฐ€์žฅ ๋ถ„๋ช…ํ•œ ํ™œ์„ฑํ™” ํ”Œ๋ž˜๊ทธ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  -msse3 ๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด ํœ ์„ ๋ฐฐํฌํ•  ๊ฒƒ์„ ์ œ์•ˆํ•˜๋Š” numpy ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ์— ๋ฉ”์ผ์„ ์ผ์Šต๋‹ˆ๋‹ค. https://mail.scipy.org/pipermail/numpy-discussion/2016-March/075125.html

@matthew-brett Python ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ Windows๋ฅผ ์ง€์›ํ•˜๋Š” ์‚ฌ๋žŒ์œผ๋กœ์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@matthew-brett, ์•„ํ‹€๋ผ์Šค ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ ์ €์žฅ์†Œ์— 2๊ฐœ์˜ ๋ฌธ์ œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
https://github.com/matthew-brett/atlas-build-scripts/issues ์ฐธ์กฐ

์ฒซ ๋ฒˆ์งธ https://github.com/matthew-brett/atlas-build-scripts/issues/1 ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. numpy-atlas.dll์€ ๋งŽ์€ ๊ธฐํ˜ธ๋กœ ๋‚ด๋ณด๋‚ด๋ฏ€๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ํ•ดํ‚นํ•˜์ง€ ์•Š๊ณ  mingwpy๋ฅผ ๋” ์ด์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋„์„œ๊ด€.

@matthew-brett ๋” ์ด์ƒ ๋ฒค์น˜๋งˆํ‚น์„ ํ•˜๋Š๋ผ ์กฐ๊ธˆ ๋ฐ”๋น ์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ์•„ํ‹€๋ผ์Šค ๋นŒ๋“œ๊ฐ€ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ์˜€์Šต๋‹ˆ๊นŒ? ์—ฌ๋Ÿฌ ์ฝ”์–ด์—์„œ ์ฒซ ๋ฒˆ์งธ ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. julia์— ๋Œ€ํ•ด ์ž˜ ์•Œ์ง€ ๋ชปํ•˜๋”๋ผ๋„ ์š”์ ์€ ์‹คํ–‰ํ•˜๊ธฐ์— ๋งค์šฐ ๊ฐ„๋‹จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋‹ˆ๋ฉด ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค ์ƒˆ๋กœ์šด ํ•˜๋“œ์›จ์–ด์— ์ฃผ๋กœ ๊ด€์‹ฌ์ด ์žˆ์œผ์…จ์Šต๋‹ˆ๊นŒ?

๊ฑฑ์ •ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๋ชจ๋“  ๊ฒƒ์„ ํฌ๊ธฐํ•˜๊ณ  ๋ฒค์น˜๋งˆํฌ๋ฅผ ์‹คํ–‰ํ•  ๊ฒƒ์ด๋ผ๊ณ  ๊ธฐ๋Œ€ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์‚ฌ์‹ค ๋‚ด ์ตœ์‹  ์•„ํ‹€๋ผ์Šค ๋นŒ๋“œ๋Š” ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๊ฐ€ ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ATLAS 3.11์€ Windows์—์„œ ์Šค๋ ˆ๋”ฉ์ด ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋ ค๋ฉด ๋” ๋งŽ์€ ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ฒค์น˜๋งˆํฌ์˜ ๊ฒฝ์šฐ ๊ท€ํ•˜๊ฐ€ ์‹คํ–‰ํ•œ ๋‹ค๋ฅธ ๋ฒค์น˜๋งˆํฌ์™€ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฌ์šธ ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ Windows๊ฐ€ ์ผœ์ง„ ์˜ค๋ž˜๋œ ํ•˜๋“œ์›จ์–ด๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ์ค‘๋ฅ ์€ ๋‚ด ์ปดํ“จํ„ฐ๋ณด๋‹ค ๊ท€ํ•˜ ์ปดํ“จํ„ฐ์—์„œ ํ›จ์”ฌ ๋” ํฝ๋‹ˆ๋‹ค.

Windows ํœ ์ด ์ด์ œ pypi์— ์žˆ์Šต๋‹ˆ๋‹ค. https://pypi.python.org/pypi/numpy/1.10.4

Tony์—๊ฒŒ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ, ์ด์ „ 3.10 ATLAS ๋นŒ๋“œ๋Š” ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ์˜€์Šต๋‹ˆ๋‹ค.

์ด์ œ ์ด ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. @matthew-brett numpy ์กฐ์ง ์•„๋ž˜์—์„œ https://github.com/matthew-brett/np-wheel-builder ๋ฅผ ์ „์†กํ•˜๊ฑฐ๋‚˜ ๋„๊ตฌ ํด๋” ์•„๋ž˜์˜ numpy ์ €์žฅ์†Œ์— PR๋กœ ๊ธฐ์—ฌํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

Ralf - np-wheel-builder ์ด ์–ด๋””๋กœ ๊ฐ€์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ œ์•ˆ์ด ์žˆ์œผ์‹ญ๋‹ˆ๊นŒ? numpy/๊ณต๊ธ‰์—…์ฒด?

๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋Š” numpy ์กฐ์ง ์•„๋ž˜์— ๋ณ„๋„์˜ ์ƒˆ ์ €์žฅ์†Œ( numpy-wheel-builder ?)๋ฅผ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์˜๋„์ ์œผ๋กœ numpy-vendor ์™€ ์ค‘๋ณต๋˜์ง€๋งŒ ์ฝ”๋“œ์—๋Š” ๋งŽ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋Š” ์ƒ๋‹นํžˆ ํฌ๊ณ  ์‹ค์ œ๋กœ Wine์—์„œ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋ฉฐ ๊ทธ ์•ˆ์— ์žˆ๋Š” gcc ๋„๊ตฌ ์ฒด์ธ์€ ๋” โ€‹โ€‹์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ๊ณ„์†ํ•ด์„œ ๋งŒ๋“ค์–ด๋„ ๋ ๊นŒ์š”?

๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. Windows ์ „์šฉ์ธ ๊ฒฝ์šฐ(์ง€๊ธˆ์€ AFAICT์ž…๋‹ˆ๊นŒ?) repo ์ด๋ฆ„์— "windows"๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค :-). ๋˜๋Š” ๋‹ค๋ฅธ ๋ฐ”ํ€ด์—๋„ ์œ ์‚ฌํ•œ ์ธํ”„๋ผ๋ฅผ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์˜๋ฏธ๊ฐ€์žˆ์„๋งŒํผ ์ถฉ๋ถ„ํžˆ ์ž‘ ์œผ๋ฉด ์–ด๋”˜๊ฐ€์— numpy ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์ง์ ‘ ๋„ฃ์–ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ๋ฌด์—‡์ด๋“  ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค :-)

Repo์—๋Š” ์ƒ๋‹นํžˆ ํฐ ATLAS ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์žˆ์œผ๋ฉฐ numpy repo๋ฅผ ํฐ ๋ชฉ์ ์œผ๋กœ ๋งŒ๋“ค์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

win-wheel-builder ๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

windows-wheel-builder ์–ด๋•Œ์š”? ๋‚˜๋Š” win ์˜ ํŒฌ์ด ์•„๋‹™๋‹ˆ๋‹ค ;)

Windows ์ „์šฉ์œผ๋กœ ๋งŒ๋“ค์ง€ ์•Š๊ณ  macosx ๋ฐ ํ–ฅํ›„ manylinux1 ํœ  ๋นŒ๋“œ ๊ตฌ์„ฑ์„ ๋ชจ๋‘ ํ•œ ๊ณณ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด "win"๋ณด๋‹ค "windows"์— ๋Œ€ํ•ด +1์ž…๋‹ˆ๋‹ค.

Windows ์ „์šฉ์œผ๋กœ ๋งŒ๋“ค์ง€ ์•Š๊ณ  macosx ๋ฐ ํ–ฅํ›„ manylinux1 ํœ  ๋นŒ๋“œ ๊ตฌ์„ฑ์„ ๋ชจ๋‘ ํ•œ ๊ณณ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ OS X์™€ โ€‹โ€‹Linux์—๋Š” ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๋งŒ ํ•„์š”ํ•˜๊ณ  Windows์—๋Š” ๊ฑฐ๋Œ€ํ•œ ATLAS ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์žˆ์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋‘ ํ•˜๋‚˜์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ ATLAS ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ๋“  ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ(์•„๋งˆ๋„ git-lfs ์‚ฌ์šฉ)?

๋ฐ”์ด๋„ˆ๋ฆฌ์šฉ github์—์„œ ๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ ์ €์žฅ์†Œ(LFS) ์‚ฌ์šฉ

@rgommers : ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ณง Linux์šฉ atlas-or-some-other-blas ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ œ๊ณตํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ osx๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ฒดํฌ์ธํ•˜๋Š” ๋Œ€์‹  github ๋ฆด๋ฆฌ์Šค ๋˜๋Š” bintray ๋˜๋Š” ๋‹ค๋ฅธ ๊ฒƒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค... DYNAMIC_ARCH ํ™œ์„ฑํ™”๋œ openblas ๋นŒ๋“œ ๋˜๋Š” ์—ฌ๋Ÿฌ blis ๊ตฌ์„ฑ์˜ ๋™๋“ฑํ•œ ์กฐํ•ฉ์— ๋“ค์–ด๊ฐ€๊ธฐ ์ „๊นŒ์ง€๋Š” ํฌ๊ธฐ๊ฐ€ ๊ทธ๋‹ค์ง€ ํฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ์€ repo๋ฅผ windows-wheel-builder ๋กœ ์„ค์ •ํ•˜๊ณ  Linux/OSX๋กœ ๋ฌด์—‡์„ ํ•  ๊ฒƒ์ธ์ง€๊ฐ€ ๋” ๋ช…ํ™•ํ•ด์ง€๋ฉด ๋ฆฌํŒฉํ† ๋ง/์ด๋ฆ„ ๋ณ€๊ฒฝ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

๋‚˜์—๊ฒŒ ์ข‹์€ ์†Œ๋ฆฌ.

๋‚˜๋ž‘๋„ ๊ดœ์ฐฎ์•„

numpy ์กฐ์ง์— ๋Œ€ํ•œ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
๋ˆ„๊ตฐ๊ฐ€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•œ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์„ ๊ฐ–๊ณ  ์žˆ๊ณ , ๊ทธ๋“ค์€ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@matthew-brett: github์˜ ๊ถŒํ•œ ํŽ˜์ด์ง€๊ฐ€ ๋งค์šฐ ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค(ํŠนํžˆ numpy๋Š” ์—‰๋ง์ž…๋‹ˆ๋‹ค). ํ•˜์ง€๋งŒ ์ €๋ฅผ ์ €์žฅ์†Œ์˜ ๊ด€๋ฆฌ์ž๋กœ ์ง€์ •ํ•˜๊ฑฐ๋‚˜ ์ €์žฅ์†Œ๋ฅผ ๋‚˜์—๊ฒŒ ์ด์ „ํ•˜๋ ค๋ฉด numpy/

repo๋ฅผ @njsmith ๋กœ ์˜ฎ๊ฒผ์Šต๋‹ˆ๋‹ค ...

numpy appveyor ๊ณ„์ •์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋ˆ„๊ตฐ๊ฐ€ ์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•ด Appveyor ๋นŒ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@charris ์˜ Appveyor ๊ณ„์ •์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„์š”...

์˜ˆ, ์—ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค https://ci.appveyor.com/project/charris/numpy/history

2016๋…„ 3์›” 16์ผ ์ˆ˜์š”์ผ ์˜ค์ „ 12์‹œ 15๋ถ„, Nathaniel J. Smith <
[email protected]>์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

@charris https://github.com/charris ์˜ Appveyor๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
๊ณ„์ •...

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/numpy/numpy/issues/5479#issuecomment -197064930

์‚ฌ์‹ค, ์ €๋Š” ๋ฐฉ๊ธˆ appveyor์—์„œ numpy์— ๋Œ€ํ•œ ์ƒˆ ๊ทธ๋ฃน ๊ณ„์ •์„ ๋งŒ๋“ค๊ณ (์–ด์จŒ๋“  ์ด๊ฒƒ์„ ํ•˜๋ ค๋Š” ์˜๋ฏธ์˜€๊ณ , ์ด๊ฒƒ์€ ์ œ๊ฐ€ ์‹ค์ œ๋กœ ๊ทธ๊ฒƒ์„ ํ•˜๋„๋ก ์œ ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค :-)), ๊ฑฐ๊ธฐ์—์„œ ํ™œ์„ฑํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค:
https://ci.appveyor.com/project/numpy/windows-wheel-builder

@njsmith ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•˜์…จ๋‚˜์š”? ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ด€๋ฆฌ์ž์—๊ฒŒ ํ”„๋กœ์ ํŠธ ๊ณ„์ •์„ ์ƒ์„ฑํ•˜๋„๋ก ์š”์ฒญํ•ด์•ผ ํ•˜๋Š” ์‚ฌ๋žŒ์„ ๋ณด์•˜๋Š”๋ฐ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์™„์ „ํžˆ ํˆฌ๋ช…ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๊ณ„์ •์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋ฉด numpy ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•œ ์ฑ…์ž„์„ ์ด์ „ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@charris : ์ด๋ฉ”์ผ์„ ํ™•์ธํ•˜์„ธ์š” :-). ๋ฐฉ๊ธˆ numpy-steering-council @googlegroups.com์„ ๊ฐœ์ธ์œผ๋กœ ํ•˜๋Š” ๊ฐœ์ธ ๊ณ„์ •์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ํ”„๋กœ์ ํŠธ ๊ณ„์ •์ด ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค... ์šฐ๋ฆฌ๋Š” ํ•˜๋‚˜๋ฅผ ์›ํ•ฉ๋‹ˆ๊นŒ?

๋Œ€๊ธฐ์—ด์„ ์œ„ํ•ด ๋‹ค๋ฅธ ๊ณ„์ •์— ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ถ„์‚ฐํ•˜๊ณ  ์‹ถ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

numpy-steering-council ๋ฉ”์ผ ์‚ฌ์šฉ์˜ ๋‹จ์ ์€ ๋ณ‘ํ•ฉ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•  ๋•Œ appveyor๊ฐ€ ์•Œ๋ฆผ์„ ๋ณด๋‚ธ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•ฑ๋ฒ ์ด์–ด ์‚ฌ๋žŒ๋“ค์ด ์š”์ฆ˜ ๋” ๋‚˜์€ ๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๊ฒ ์ง€๋งŒ ๊ทธ๋“ค์˜ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๊ณผ๊ฑฐ์— ์—‰๋ง์ด์—ˆ๋˜ ๊ฒƒ์„ ๊ฐ์•ˆํ•  ๋•Œ ๋‚˜๋Š” ๊ทธ๊ฒƒ์— ๋‚ด๊ธฐ๋ฅผ ๊ฑธ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@tkelman ์ข‹์€ ์ง€์ ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ๋” ๋น ๋ฅธ ๋Œ€๊ธฐ์—ด์„ ์–ป๊ธฐ ์œ„ํ•ด ๋ˆ์„ ์“ฐ๋ ค๋ฉด ๋” ๊ณต์‹์ ์ธ ๊ฒƒ์„ ์›ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@charris : ๋ฐฉ๊ธˆ ์ƒˆ appveyor ๊ณ„์ •์—์„œ numpy/numpy ํ…Œ์ŠคํŠธ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ณ  ๋ชจ๋“  ์•Œ๋ฆผ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  ๋ชจ๋“  ๊ด€๋ จ numpy github ํŒ€์„ ๊ณ„์ •์˜ ๊ด€๋ฆฌ์ž๋กœ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ถ”์ธกํ•˜๋‹ค...

@matthew-brett: ๊ฐ€์žฅ ์šฐ์•„ํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์€ numpy/windows-build-tools ์™€ ๊ฐ™์€ ์œ„์น˜์— BLAS ๋นŒ๋“œ๋ฅผ ์ˆจ๊ธฐ์ง€๋งŒ ์‹ค์ œ numpy/numpy ์ €์žฅ์†Œ์—์„œ ์‹ค์ œ ํœ  ๋นŒ๋“œ ๋„๊ตฌ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. appveyor ๋นŒ๋“œ์˜ ์ผ๋ถ€ -- ๊ทธ๋“ค์€ ์š”์ฒญ ์‹œ BLAS ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ํ’€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ํ›Œ๋ฅญํ•œ ์ž‘์—…์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค! numpy 1.11.0 ์ฐฝ ํœ ์ด ๊ณง pypi์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๊นŒ? https://pypi.python.org/pypi/numpy

์˜ค ์˜ˆ, ์—ฌ๊ธฐ์—์„œ ๋ฆด๋ฆฌ์Šค ์ ˆ์ฐจ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋‚ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค... IIUC ํ˜„์žฌ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์€ 1.11 ์†Œ์Šค ๋ฆด๋ฆฌ์Šค๊ฐ€ ์—…๋กœ๋“œ๋˜์ž๋งˆ์ž ๊ฑฐ๊ธฐ์— ์žˆ๋Š” ๋ชจ๋“  Windows ์‹œ์Šคํ…œ์ด ๋‹ค์šด๋กœ๋“œ ํœ ์—์„œ ๊ฐ‘์ž๊ธฐ ์ „ํ™˜๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(์˜ˆ ) ์†Œ์Šค๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ๋นŒ๋“œํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค(boo). ์ด๋ ‡๊ฒŒ ํ•˜๋Š” "์˜ฌ๋ฐ”๋ฅธ" ๋ฐฉ๋ฒ•์€ ์ตœ์ข… ๋ฆด๋ฆฌ์Šค์— ํƒœ๊ทธ๊ฐ€ ์ง€์ •๋˜๋ฉด sdist๋ฅผ ์—…๋กœ๋“œํ•˜๊ธฐ _์ „์—_ ๋ชจ๋“  ๋ฐ”์ด๋„ˆ๋ฆฌ ํœ ์„ ๋นŒ๋“œํ•˜๊ณ  ์—…๋กœ๋“œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์งœ์ฆ๋‚ ์ •๋„๋กœ...

@njsmith ๋Š” ์ข‹๊ฒ ์ง€๋งŒ ๋ช‡ ๋ถ„ ์ง€์—ฐ(๋˜๋Š” ๋ช‡ ์‹œ๊ฐ„) ์ง€์—ฐ์€ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

๋ช…ํ™•ํžˆ ํ•˜๊ธฐ ์œ„ํ•ด 1.11.0 ๋ฆด๋ฆฌ์Šค์šฉ PyPI์˜ ํ˜„์žฌ Windows whl ํŒŒ์ผ์ด ATLAS์— ๋Œ€ํ•ด ๋นŒ๋“œ๋ฉ๋‹ˆ๊นŒ? ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ˆ, ํœ ์€ ATLAS์— ๋งž๊ฒŒ ์ œ์ž‘๋˜์—ˆ์ง€๋งŒ ๊ฒฐ๊ณผ๊ฐ€ ํ™•์‹ ์ด ๋“ค ๋•Œ OpenBLAS๋กœ ์ด๋™ํ•  ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค.

๋นŒ๋“œ๋Š” Appveyor๋ฅผ ํ†ตํ•ด ์ž๋™ํ™”๋ฉ๋‹ˆ๋‹ค. https://github.com/numpy/windows-wheel-builder

23735 downloads in the last day . =)

hidden ๋ฆด๋ฆฌ์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ PyPI ์–‘์‹ https://pypi.python.org/pypi?%3Aaction=submit_form ์— ์˜ต์…˜์ด ์žˆ๊ณ  ๋ชจ๋“  ํŒŒ์ผ์ด ์ค€๋น„๋˜๋ฉด ์ˆจ๊ธฐ๊ธฐ๋ฅผ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.

์Šฌํ”„๊ฒŒ๋„ ์ˆจ๊ฒจ์ง„ ๋ฆด๋ฆฌ์Šค ๊ธฐ๋Šฅ์€ ์‚ฌ๋žŒ๋“ค์ด ๋ช…๋ น์ค„์„ ํ†ตํ•ด ํ•ด๋‹น ๋ฆด๋ฆฌ์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์„ ๋ง‰๊ณ  pypi GUI๋ฅผ ํ†ตํ•ด ๋ฆด๋ฆฌ์Šค๋ฅผ ๋ณด๋Š” ๊ฒƒ๋งŒ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.

https://sourceforge.net/p/pypi/support-requests/428/

numpy์˜ 64๋น„ํŠธ Windows ์„ค์น˜๋ฅผ ์‹œ๋„ํ–ˆ๋Š”๋ฐ ํ›Œ๋ฅญํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋ฏ€๋กœ ์ด ์ž‘์—…์— ์ฐธ์—ฌํ•ด ์ฃผ์‹  ๋ชจ๋“  ๋ถ„๋“ค๊ป˜ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๊ถ๊ธˆํ•œ ์ ์€ scipy ๋ฐ”ํ€ด๋กœ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๊ณ„ํš์ด ์—ฌ์ „ํžˆ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค. OpenBLAS๋กœ์˜ ์ด์ „ ๊ฒฐ์ •์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

https://bitbucket.org/carlkl/mingw-w64-for-python/downloads ์—๋Š” scipy-0.17.0 ์˜ ํ…Œ์ŠคํŠธ ํœ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํœ ์€ @matthew-brett์˜ numpy ๋นŒ๋“œ์— ๋Œ€ํ•ด mingwpy๋กœ ๋นŒ๋“œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. https://pypi.python.org/pypi/numpy/1.10.4

2016๋…„ 4์›” 28์ผ ๋ชฉ์š”์ผ ์˜คํ›„ 12์‹œ 48๋ถ„์— carlkl [email protected] ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

https://bitbucket.org/carlkl/mingw-w64-for-python/downloads ์—๋Š”
scipy-0.17.0์˜ ์ผ๋ถ€ ํ…Œ์ŠคํŠธ ํœ  . ์ด ๋ฐ”ํ€ด๋Š”
@matthew-brett https://github.com/matthew-brett 's์— ๋Œ€ํ•œ mingwpy
numpy https://pypi.python.org/pypi/numpy/1.10.4 ๋นŒ๋“œ

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ๋งํ–ˆ๋Š”๋ฐ ๋†“์ณค์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ…Œ์ŠคํŠธ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‚˜์š”?
์ด ๋ฐ”ํ€ด์— ๋Œ€ํ•œ ์‹คํŒจ?

numpy ๋ฐ”ํ€ด ๋‚ด๋ถ€์— ๋ฐฐ์†ก๋œ ATLAS์— ์—ฐ๊ฒฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

@matthew-brett, ํ•œ ๋‹ฌ ์ „์— ์ด ๋นŒ๋“œ๋ฅผ ๋ฐœํ‘œํ–ˆ์ง€๋งŒ ์–ด๋””์—์„œ์ธ์ง€ ๊ธฐ์–ต์ด ๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“ , ์ด๊ฒƒ๋“ค์€ numpy ๋ฐ”ํ€ด์—์„œ ์ œ๊ณตํ•˜๋Š” numpy-atlas์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.

scipy-0.17.0-cp35-cp35m-win##.whl์€ _wrong_ C ๋Ÿฐํƒ€์ž„ msvcrt.dll์— ๋Œ€ํ•ด ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. scipy์˜ ๊ฒฝ์šฐ ์ด๊ฒƒ์€ ๊ดœ์ฐฎ์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ๋กœ๊ทธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. https://gist.github.com/carlkl/9e9aa45f49fedb1a1ef7

๊ทธ ๋กœ๊ทธ๊ฐ€ ๋งž๋‚˜์š”? ๋์— NumPy is installed in D:\devel\py\python-3.4.4\lib\site-packages\numpy ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž˜๋ชป๋œ MSVC ๋Ÿฐํƒ€์ž„์— ๋Œ€ํ•ด ์œ„ํ—˜ํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋˜๋”๋ผ๋„ scipy wheel์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋นŒ๋“œ์—๋Š” ๋„ˆ๋ฌด ๋งŽ์€ ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

64๋น„ํŠธ ๋นŒ๋“œ์˜ ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋” ์ ์Šต๋‹ˆ๊นŒ? Openblas 0.2.18์— ๋Œ€ํ•œ ํ˜„์žฌ ์ตœ๊ณ ์˜ ๋นŒ๋“œ๋ฅผ ์œ„ํ•ด?

64๋น„ํŠธ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ชจ๋‘ 6๊ฐœ๋ฟ์ž…๋‹ˆ๋‹ค.

FAIL: test_continuous_basic.test_cont_basic(<scipy.stats._continuous_distns.nct_gen object ...

์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ OpenBLAS์™€ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ๋‚˜๋Š” ๋‹น์‹ ์ด ๋ˆˆ์น˜ ์ฑ˜์„ ์ˆ˜๋„ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ์ด์œ ๋กœ ์ง€๋‚œ 4์ฃผ ๋™์•ˆ ๋ฉˆ์ท„์Šต๋‹ˆ๋‹ค. ์ƒํ™ฉ์ด ๊ณ„์† ๊ฐœ์„ ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@matthew-brett, OpenBLAS์™€ ํ•จ๊ป˜ numpy MSVC ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ์ตœ์‹  ๋นŒ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

mingwpy, conda-forge, Anaconda ๋ฐ Canopy๋งŒ์œผ๋กœ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์€ ๊ฒƒ์ฒ˜๋Ÿผ Python์šฉ Intel Distribution ์ด ์ œ๊ณต๋˜๋ฉฐ ๋ฌด๋ฃŒ๋กœ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์ˆ˜์น˜ ๋„๊ตฌ(SciPy, NumPy, Numba, Scikit-Learn)์™€ ์ผ๋ถ€ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ(mpi4py Intel mp ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ pyDAAL ๋ฐ์ดํ„ฐ ๋ถ„์„)๋งŒ ํฌํ•จ๋˜๋ฉฐ conda๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ผ์ด์„ผ์Šค๊ฐ€ 10/29/16์— ๋งŒ๋ฃŒ๋˜๋ฏ€๋กœ ๊ฑฑ์ •ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ด๋Ÿฌํ•œ Intel ๋นŒ๋“œ๋Š”
๋ฒ ํƒ€ ํ…Œ์ŠคํŠธ ํ›„ MKL+ ๋“ฑ์˜ ๋ผ์ด์„ผ์Šค ๋น„์šฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. OpenBLAS ๋นŒ๋“œ
์˜คํ”ˆ ์†Œ์Šค ์†”๋ฃจ์…˜์œผ๋กœ ๋‚จ์„ ๊ฒƒ์ด๋ฏ€๋กœ ์ œ๊ณตํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
๋นŒ๋“œ.
2016๋…„ 4์›” 28์ผ ์˜คํ›„ 7์‹œ 21๋ถ„์— "Mark Mikofski" [email protected] ์ด ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

mingwpy, conda-forge, Anaconda, Canopy ๋งŒ์œผ๋กœ๋Š” ๋ถ€์กฑํ•ด ์—ฌ๊ธฐ ์˜จ๋‹ค
Python์šฉ ์ธํ…” ๋ฐฐํฌํŒ
https://software.intel.com/en-us/python-distribution ๋ฐ ๋ฌด๋ฃŒ
๋‹ค์šด๋กœ๋“œ
https://software.intel.com/en-us/articles/intel-distribution-for-python-support-and-documentation.
์—ฌ๊ธฐ์—๋Š” ์ˆ˜์น˜ ๋„๊ตฌ(SciPy, NumPy, Numba, Scikit-Learn)๋งŒ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
์ถ”๊ฐ€ ๊ธฐ๋Šฅ(mpi4py Intel mp ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ pyDAAL ๋ฐ์ดํ„ฐ ๋ถ„์„) ๋ฐ
์ฝ˜๋‹ค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/numpy/numpy/issues/5479#issuecomment -215600103

1.11.1์˜ ๊ฒฝ์šฐ Python 3.5 amd64์šฉ PyPi์— ๋ˆ„๋ฝ๋œ Windows ํœ ์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํŠน๋ณ„ํ•œ ์ด์œ ๊ฐ€ ์žˆ๋‚˜์š”? 1.11.0(https://pypi.python.org/pypi/numpy/1.11.0)์œผ๋กœ ์ด๋™ํ•˜๋ฉด ๋ฐ”ํ€ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณด๊ณ ์„œ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๋นจ๋ฆฌ ์—…๋กœ๋“œํ•˜๊ณ  ๋ชจ๋“  ๋ฐ”ํ€ด๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ธฐ ์ „์— ์—…๋กœ๋“œํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋น ์ง„ ํœ ์„ ์˜ฌ๋ ธ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ๋Š” ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ํ…Œ์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋น ์ง„ ํœ ์„ ์˜ฌ๋ ธ์Šต๋‹ˆ๋‹ค.

๋ฐฉ๊ธˆ ํ…Œ์ŠคํŠธํ–ˆ๋Š”๋ฐ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค!

Windows ํœ ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ชจ๋“  ์ž‘์—…์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๋ฌธ์ œ ๋งˆ๋ฌด๋ฆฌ -- ์ง€๋‚œ ๋ช‡ ๋ฒˆ์˜ ๋ฆด๋ฆฌ์Šค์—์„œ ํœ ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๊ฐ€ ์ข…๋ฃŒ๋˜์—ˆ์Œ์„ ์ดํ•ดํ•˜์ง€๋งŒ ๋‹ค์‹œ ์—ฌ๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ conda์— ์˜์กดํ•˜์ง€ ์•Š๊ณ  ๊ณผํ•™์  ์Šคํƒ์„ ์‹คํ–‰ํ•˜๋ ค๋Š” Windows ์‚ฌ์šฉ์ž์—๊ฒŒ ์—ฌ์ „ํžˆ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ @cgohlke 'MKL' ๋นŒ๋“œ ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ ์ด ๊ด€๋ จ scipy ๋ฌธ์ œ ๋Š” ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”ํ€ด๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ณ  ์žˆ์ง€๋งŒ scipy์™€ ํ˜ธํ™˜๋˜์ง€ ์•Š๊ณ  ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@waynenilsen ๋ฐฉ๊ธˆ ์–ธ๊ธ‰ํ•œ ๋ฌธ์ œ์— ์—ฐ๊ฒฐ๋œ ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ ์Šค๋ ˆ๋“œ์— ์ƒˆ ๋ฐ”ํ€ด๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ง€์นจ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/scipy/scipy/issues/5461#issuecomment -326744515

๊ทธ๋ž˜์„œ ๋‹น์‹ ์ด ํ•  ๊ฒฝ์šฐ

pip install -f https://7933911d6844c6c53a7d-47bd50c35cd79bd838daf386af554a83.ssl.cf2.rackcdn.com/ --pre scipy

๊ทธ๊ฒƒ์€ ๋‹น์‹ ์„ ์œ„ํ•ด ์ž‘๋™ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

Numpy์— ๋Œ€ํ•ด ์ˆ˜ํ–‰ํ•  ์ž‘์—…์ด ๋‚จ์•„ ์žˆ์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ฌธ์ œ๊ฐ€ ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋งŒํผ
Scipy ๋ฌธ์ œ๋Š” ์•„์ง ์ง„ํ–‰ ์ค‘์ด๋ฉฐ ๋‹ค์Œ ์‹œ๊ฐ„์— ํ•ด๊ฒฐ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
ํ’€์–ด ์ฃผ๋‹ค.

์ด๊ฒƒ์€ ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค @Juanlu001 ์ €๋Š” ์ด๊ฒƒ์ด pypi์— ์žˆ์„ ๋•Œ๋ฅผ ์ •๋ง๋กœ ๊ณ ๋Œ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค!

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰