2011-08-04 5 views
4

여러 프로세서에서 실행되는 SciPy/NumPy의 함수 중 명시 적으로 이해하려고합니다. 나는 할 수있다. SciPy가 이것을 사용하는 SciPy 참고서를 읽으십시오. 그러나 모든 함수가 병렬 계산을 실행하지 않기 때문에 어떤 함수가 정확하게 수행되는지에 더 관심이 있습니다. 꿈 시나리오는 물론 도움말 (SciPy.foo)을 입력 할 때 포함되어있는 경우에 해당되지만이 경우는 아닌 것 같습니다.여러 코어에서 실행되는 SciPy/NumPy 기능을 아는 것이 가능합니까?

도움이 될 것입니다.

최저

,

마티아스

+2

'numpy' /'scipy'보다는 BLAS/LAPACK 라이브러리에 어느 정도까지 대답하기가 약간 까다 롭습니다. 예를 들어, MKL (http://software.intel.com/en-us/articles/intel-mkl/)은 다른 라이브러리가없는 곳에서 여러 개의 코어를 사용할 수 있습니다. – NPE

+0

염두에두고있는 특정 유형의 기능이 있습니까? – NPE

+0

@aix 일반적으로 SciPy에 대해 생각해 보았지만 Linear algebra 기능에 더 중점을 둘 수 있습니다. 나는 그것을 본다. scipy.linalg.solve는 다중 코어를 사용합니다 (코어의 활동을보기 위해 시스템 모니터를 확인하는 것만으로). – matiasq

답변

4

나는 질문은 당신이 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을하려면

, 여기 (명확성을 위해 생략 일부 오류 처리 코드) 소스 코드의 DPOSVDGESV으로 예시 됨).

SciPy 레벨에서는 병렬 처리가 진행되지 않지만 시스템에서 여러 코어를 사용하는 기능을 관찰 할 수 있습니다. 유일한 설명은 LAPACK 라이브러리가이되도록 NumPy/SciPy가없는 여러 코어를 사용할 수 있다는 것입니다.

+0

유용한 답변을 보내 주셔서 감사합니다. 나는 MKL을 사용하는 Enthoughts 2.7.1 python을 가지고 있으므로 좋은 모양입니다. – matiasq

+0

과 어떤 BLAS/LAPACK 함수가 병렬로 실행되는지 어떻게 알 수 있습니까? – usethedeathstar