2015-02-01 2 views
6

Я надеялся использовать openmp для ускорения моего кода Fortran, который я запускаю через f2py. Однако после успешного компиляции я не могу импортировать модуль в Python.f2py с OMP: невозможно импортировать модуль, неопределенный символ GOMP_ *

Для модуля Fortran95, как это:

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

Составитель и импортирован с этими командами:

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

Я получаю сообщение об ошибке. Ошибка для импорта - компиляция работает отлично как с f2py, так и с gfortran напрямую (только получить предупреждение о «Использование устаревших NumPy API»).

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

У меня разные ошибки GOMP_ * для разных директив OMP. Без директив (но с флагом -openmp) он работает.

Любая помощь была бы принята с благодарностью.

ответ

5

Я был в состоянии воспроизвести ошибку на Mac OS X (10.9.5), с gfortran установлен с помощью доморощенного, и я был в состоянии исправить это путем добавления -lgomp к команде:

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

Добавлено by @Mark: Обратите внимание, что -lgomp является аргументом для f2py, а не gfortran. Хотя он компилируется только с -gomp, для него необходимы как -gomp, так и -fopenmp, как описано here. GOMP - это реализация GNU openMP.

+0

Отлично работает! Я добавлю немного информации, которую я нашел из-за вашего ответа, надеюсь, что все в порядке. – Mark

+0

@Mark, редактирование отлично, спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^