MKL에서 DGESVD
을 사용하고 Intel 컴파일러로 8 코어에서 실행되는 코드가 Fortran에 있습니다. 이 코드는 OpenMP를 통해 가속화됩니다. 또한 OpenMP 및 MKL에는 스레드 수 (omp_num_threads
및 mkl_num_threads
)를 설정하는 자체 설정이 있음을 알고 있습니다. 최적의 스레드 수를 알고 싶습니다. LAPACK 루틴을 호출하기 전에 OMP_NUM_THREADS=1
을 설정해야합니까? OpenMP 스레드의 수가 MKL 스레드 수에 영향을 줍니까?OpenMP 및 MKL 스레딩
답변
MKL도 다중 스레드 드라이버 용으로 OpenMP를 사용합니다. 즉, OpenMP 스레드의 수는 MKL 스레드의 수에 영향을 미치지 만 매우 복잡한 방식입니다.
먼저 OpenMP 코드 인 MKL은 일반적인 OpenMP 방식으로 제어되어 스레드 수를 설정합니다. OMP_NUM_THREADS
및 omp_set_num_threads
로 전화하십시오. 그러나 MKL_NUM_THREADS
및 mkl_set_num_threads()
의 형식으로 재정의 구성 메커니즘을 제공합니다. 이를 통해 사용자 코드와 MKL 루틴에서 서로 다른 수의 스레드를 가질 수 있습니다.
원하는 스레드 수를 구성하면 중첩 된 병렬 처리에서 MKL이 작동하는 방식을 알아야합니다. 즉, MKL은 사용자 코드에서 활성 parallel
영역 내부에서 호출되면 기본적으로 단일 스레드를 실행합니다. MKL은이 동작을 무시할 수있는 MKL_DYNAMIC
스위치를 제공하지만 다른 OpenMP 런타임간에 호환성이 보장되지 않으므로 동일한 OpenMP 컴파일러가 MKL의 사용자 코드 (읽기 - Intel의 컴파일러를 사용해야 함)에 사용되어야합니다.
일반적으로 MKL을 호출하기 전에 스레드 수를 1로 설정할 필요가 없습니다. MKL 스레드를 명시 적으로 구성하여 덮어 쓰지 않는 한, 스레드가 단일 스레드가되기 때문에 스레드의 수를 1로 설정할 필요가 없습니다. 또한 중첩 된 병렬 처리를 사용하는 경우 내부에서 parallel
영역을 호출 할 때주의해야합니다.
MKL의 스레드 수 제어에 대한 추가 정보는 MKL's User Guide에서 볼 수 있습니다.
- 1. MKL 가속화 수학 라이브러리
- 2. MKL Intel C++ 및 준 난수 생성기
- 3. OpenMP 및 C99 데이터
- 4. 의 OpenMP 및 기능
- 5. 행렬 및 벡터가있는 OpenMP
- 6. ICC, GCC 및 OpenMP
- 7. OpenMP 및 병렬 문제
- 8. 의 OpenMP 및 섹션
- 9. 파이썬 NumPy와 MKL 오류
- 10. OpenMP 및 CPU 친 화성
- 11. OpenMP 및 Pthreads에서 잠금 사용
- 12. OpenMP 및 MPI 하이브리드 프로그램
- 13. 데스크탑 CPU의 MPI 및 OpenMP
- 14. C# HPC - MPI 및 OpenMP
- 15. IMSL을 사용할 때 MKL 오류
- 16. double, float 및 int 데이터 유형을 사용하는 인텔 MKL 매트릭스 제품
- 17. OpenMP - 섹션
- 18. 파이썬에서 MKL의 스레드 함수 호출 : openmp 라이브러리를 찾을 수 없습니까?
- 19. 성능 카운터 및 스레딩
- 20. Ruby : 스레딩 및 소켓
- 21. C# 스레딩 및 동기화
- 22. 스레딩 및 슬립()
- 23. 동시성 및 스레딩 서적
- 24. SSE 및 하이퍼 스레딩
- 25. urllib2 및 스레딩
- 26. 스레딩 및 pcap 문제
- 27. NativeXml 및 스레딩
- 28. 지연로드 및 멀티 스레딩
- 29. 스레딩 및 동기화 방법
- 30. C# 스레딩 및 블로킹