2015-02-01 13 views
6

Speravo di utilizzare openmp per accelerare il mio codice Fortran che eseguo tramite f2py. Tuttavia, dopo aver compilato con successo, non posso importare il modulo in Python.f2py con OMP: impossibile importare il modulo, simbolo non definito GOMP_ *

Per un modulo Fortran95 come questo:

module test 
implicit none 
contains 
subroutine readygo() 
real(kind = 8), dimension(10000) :: q 
!$OMP WORKSHARE 
q = 7 
!$OMP END WORKSHARE 
end subroutine 
end module 

Compilato e importato con questi comandi:

f2py -m SOmod --fcompiler=gnu95 --f90flags='-march=native -O3 -fopenmp' -c SOtest.f95 
python2 -c "import SOmod" 

ottengo un errore. L'errore è per l'importazione: la compilazione funziona bene sia con f2py sia con gfortran direttamente (viene visualizzato solo un avviso relativo all'utilizzo dell'API NumPy deprecato).

Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
ImportError: ./SOmod.so: undefined symbol: GOMP_barrier 

ottengo diversi GOMP_ * errori per le diverse direttive OMP. Senza direttive (ma con flag -openmp) funziona.

Qualsiasi aiuto sarebbe molto apprezzato.

risposta

5

sono stato in grado di riprodurre l'errore su Mac OS X (10.9.5), con gfortran installato utilizzando homebrew, e sono stato in grado di risolvere il problema con l'aggiunta -lgomp al comando:

f2py -m SOmod --fcompiler=gnu95 --f90flags='-march=native -O3 -fopenmp' -lgomp -c SOtest.f95 

Aggiunto di @Mark: nota che -lgomp è un argomento per f2py, non per gfortran. Sebbene compili solo con il numero -gomp, sono necessari sia lo standard -gomp e -fopenmp per essere parallelo, come descritto in here. GOMP è l'implementazione GNU openMP.

+0

Funziona alla grande! Aggiungerò un po 'di informazioni che ho trovato a causa della tua risposta, spero che sia ok. – Mark

+0

@Mark, la modifica è grandiosa, grazie! –

Problemi correlati