2016-10-26 4 views
2

OpenMP를 사용하여 실행을 병렬화하는 사전 작성된 선형 대수 라이브러리를 사용하고 있습니다.OpenMP 지원이없는 BLAS, ATLAS 및 LAPACK 빌드

지금 당장은 일부 작업을 병렬 처리하기 위해 OpenMP로 프로젝트 작업을하고 있습니다. 그래서 환경 변수 OMP_NUM_THREADS를 설정했습니다.

일부 스레드는 BLAS 및 LAPACK 선형 대수 루틴을 사용합니다. 이 라이브러리들은 또한 병렬 적이며 OMP_NUM_THREADS 환경 변수를 사용하여 그들이 사용해야하는 쓰레드의 수를 봅니다.

내 프로젝트의 요구 사항. 병렬이 아닌 BLAS 및 LAPACK 구현을 사용하여이 중첩 병렬화를 피할 필요가 있습니다.

최상의 라이브러리는 무엇이며 어떻게 구축 할 수 있습니까?

대단히 감사합니다.

답변

2

OpenBLAS를 사용할 수 있습니다. 이 라이브러리는 LAPACK 루틴의 ​​한 버전을 포함하며 스레딩과 관련하여 매우 유연합니다.

$shell> make USE_THREAD=0 

또는 명시 적 environment variable 사용 :

스레드의 수는 하나 compile time에서 정의 할 수 있습니다

export OPENBLAS_NUM_THREADS=4 

또는 런타임에 라이브러리 API를 사용하여 :

void openblas_set_num_threads(int num_threads); 
+0

질문 하나, 내가 사용하는 경우 : USE_THREAD = 1을 만들고 나서 OPENBLAS를 사용합니다. _NUM_THREADS = 4. 얼마나 많은 스레드가있을 것입니까? 왜냐하면 어떤 환경 변수가 정의 되더라도 항상 1 개의 스레드를 사용하는 BLAS 구현이 필요하기 때문입니다. – Rob

+0

스레드가 컴파일 타임에 비활성화 된 경우 런타임에 다시 활성화 할 수 없습니다. – ztik

+0

대단히 감사합니다 – Rob

관련 문제