2012-12-08 2 views
6

MKL에서 DGESVD을 사용하고 Intel 컴파일러로 8 코어에서 실행되는 코드가 Fortran에 있습니다. 이 코드는 OpenMP를 통해 가속화됩니다. 또한 OpenMP 및 MKL에는 스레드 수 (omp_num_threadsmkl_num_threads)를 설정하는 자체 설정이 있음을 알고 있습니다. 최적의 스레드 수를 알고 싶습니다. LAPACK 루틴을 호출하기 전에 OMP_NUM_THREADS=1을 설정해야합니까? OpenMP 스레드의 수가 MKL 스레드 수에 영향을 줍니까?OpenMP 및 MKL 스레딩

답변

12

MKL도 다중 스레드 드라이버 용으로 OpenMP를 사용합니다. 즉, OpenMP 스레드의 수는 MKL 스레드의 수에 영향을 미치지 만 매우 복잡한 방식입니다.

먼저 OpenMP 코드 인 MKL은 일반적인 OpenMP 방식으로 제어되어 스레드 수를 설정합니다. OMP_NUM_THREADSomp_set_num_threads로 전화하십시오. 그러나 MKL_NUM_THREADSmkl_set_num_threads()의 형식으로 재정의 구성 메커니즘을 제공합니다. 이를 통해 사용자 코드와 MKL 루틴에서 서로 다른 수의 스레드를 가질 수 있습니다.

원하는 스레드 수를 구성하면 중첩 된 병렬 처리에서 MKL이 작동하는 방식을 알아야합니다. 즉, MKL은 사용자 코드에서 활성 parallel 영역 내부에서 호출되면 기본적으로 단일 스레드를 실행합니다. MKL은이 동작을 무시할 수있는 MKL_DYNAMIC 스위치를 제공하지만 다른 OpenMP 런타임간에 호환성이 보장되지 않으므로 동일한 OpenMP 컴파일러가 MKL의 사용자 코드 (읽기 - Intel의 컴파일러를 사용해야 함)에 사용되어야합니다.

일반적으로 MKL을 호출하기 전에 스레드 수를 1로 설정할 필요가 없습니다. MKL 스레드를 명시 적으로 구성하여 덮어 쓰지 않는 한, 스레드가 단일 스레드가되기 때문에 스레드의 수를 1로 설정할 필요가 없습니다. 또한 중첩 된 병렬 처리를 사용하는 경우 내부에서 parallel 영역을 호출 할 때주의해야합니다.

MKL의 스레드 수 제어에 대한 추가 정보는 MKL's User Guide에서 볼 수 있습니다.