2012-12-08 13 views
6

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

12

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.