Ho un codice in Fortran che utilizza DGESVD
da MKL e gira su 8 core con compilatore Intel. Il codice viene accelerato tramite OpenMP. So anche che OpenMP e MKL hanno le proprie impostazioni per impostare il numero di thread (omp_num_threads
e mkl_num_threads
). Voglio sapere il numero ottimale di thread. Devo impostare OMP_NUM_THREADS=1
prima di chiamare la routine LAPACK? Il numero di thread OpenMP influenza il numero di thread MKL?Filettatura OpenMP e MKL
risposta
MKL utilizza anche OpenMP per il suo driver multithread. Ciò significa che il numero di thread OpenMP influisce sul numero di thread MKL, ma in un modo molto complesso.
Innanzitutto, essendo codice OpenMP, MKL è anche controllato dai soliti modi OpenMP per impostare il numero di thread, ad es. OMP_NUM_THREADS
e chiamate a omp_set_num_threads
. Ma fornisce anche meccanismi di configurazione di override sotto forma di MKL_NUM_THREADS
e mkl_set_num_threads()
. Ciò consente di avere un numero diverso di thread nel codice utente e nelle routine MKL.
Dopo aver configurato il numero desiderato di thread, si dovrebbe anche sapere come si comporta MKL nei casi di parallelismo nidificati. Ovvero, MKL eseguirà per impostazione predefinita single-threaded se chiamato all'interno di una regione attiva parallel
nel codice utente. MKL fornisce lo switch MKL_DYNAMIC
che può ignorare questo comportamento ma richiede che lo stesso compilatore OpenMP venga utilizzato per il codice utente come per MKL (leggi che - devi utilizzare il compilatore Intel) poiché non è garantita alcuna compatibilità tra diversi runtime OpenMP.
In generale, non è necessario impostare il numero di thread su 1 prima di chiamare in MKL, in quanto ciò lo renderebbe a thread singolo, a meno che il numero di thread MKL non sia stato sovrascritto configurandolo in modo esplicito. E si dovrebbe fare attenzione quando si chiama da dentro le regioni parallel
quando il parallelismo nidificato è abilitato.
Ulteriori informazioni sul controllo del numero di thread in MKL sono disponibili in MKL's User Guide.
- 1. Prestazioni MKL su Intel Phi
- 2. eventi e filettatura
- 3. Perl Code e filettatura
- 4. Filettatura e semaforo Python
- 5. Servizio WCF e filettatura
- 6. Differenza tra Numpy e Numpy-MKL?
- 7. OpenMP e affinità CPU
- 8. clang, openMP e CMake
- 9. OpenMP e core/thread
- 10. pitone NumPy MKL ERRORE
- 11. Contratti di raccolta e filettatura
- 12. OpenMP e STL-style per
- 13. Estensioni Python e OpenMP C
- 14. OpenMP e programma ibrido MPI
- 15. C# HPC - MPI e OpenMP
- 16. Numpy-MKL per OS X
- 17. filettatura e statici metodi in C#
- 18. Manca ___emutls_get_address con gcc-4.7 e openMP
- 19. Attività OpenMP con e senza parallelo
- 20. Blocco filettatura UI
- 21. Riferimento anello filettatura
- 22. blocchi di filettatura python
- 23. Filettatura WPF C#
- 24. Filettatura dell'interfaccia utente
- 25. Filettatura BOOST: comportamento cout
- 26. .NET domanda filettatura
- 27. Informazioni sulla filettatura
- 28. Filettatura C# - Blocca oggetto
- 29. Filettatura Python3 con uWSGI
- 30. Parametri della filettatura modificati