나는 질문은 당신이 SciPy/NumPy와보다는 오히려 사용 BLAS/LAPACK 라이브러리에 해결 더 나은 생각합니다.
일부 BLAS/LAPACK 라이브러리 (예 : MKL)는 다른 구현이없는 경우 여러 코어를 기본적으로 사용합니다.
당신이 볼 수 있듯이
def solve(a, b, sym_pos=0, lower=0, overwrite_a=0, overwrite_b=0,
debug = 0):
if sym_pos:
posv, = get_lapack_funcs(('posv',),(a1,b1))
c,x,info = posv(a1,b1,
lower = lower,
overwrite_a=overwrite_a,
overwrite_b=overwrite_b)
else:
gesv, = get_lapack_funcs(('gesv',),(a1,b1))
lu,piv,x,info = gesv(a1,b1,
overwrite_a=overwrite_a,
overwrite_b=overwrite_b)
if info==0:
return x
if info>0:
raise LinAlgError, "singular matrix"
raise ValueError,\
'illegal value in %-th argument of internal gesv|posv'%(-info)
, 그것은 LAPACK 기능의 두 가족의 주위에 그냥 얇은 래퍼 (이다 : 예를 들어 scipy.linalg.solve
을하려면
, 여기 (명확성을 위해 생략 일부 오류 처리 코드) 소스 코드의 DPOSV
및 DGESV
으로 예시 됨).
SciPy 레벨에서는 병렬 처리가 진행되지 않지만 시스템에서 여러 코어를 사용하는 기능을 관찰 할 수 있습니다. 유일한 설명은 LAPACK 라이브러리가이되도록 NumPy/SciPy가없는 여러 코어를 사용할 수 있다는 것입니다.
출처
2011-08-04 13:43:09
NPE
'numpy' /'scipy'보다는 BLAS/LAPACK 라이브러리에 어느 정도까지 대답하기가 약간 까다 롭습니다. 예를 들어, MKL (http://software.intel.com/en-us/articles/intel-mkl/)은 다른 라이브러리가없는 곳에서 여러 개의 코어를 사용할 수 있습니다. – NPE
염두에두고있는 특정 유형의 기능이 있습니까? – NPE
@aix 일반적으로 SciPy에 대해 생각해 보았지만 Linear algebra 기능에 더 중점을 둘 수 있습니다. 나는 그것을 본다. scipy.linalg.solve는 다중 코어를 사용합니다 (코어의 활동을보기 위해 시스템 모니터를 확인하는 것만으로). – matiasq