2015-02-01 3 views
6

मैं अपने फोरट्रान कोड को तेज़ करने के लिए ओपनएमपी का उपयोग करने की उम्मीद कर रहा था जिसे मैं f2py के माध्यम से चलाता हूं। हालांकि, सफलतापूर्वक संकलित करने के बाद, मैं पाइथन में मॉड्यूल आयात नहीं कर सकता।ओएमपी के साथ f2py: मॉड्यूल आयात नहीं कर सकता, अपरिभाषित प्रतीक 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_ * त्रुटियां मिलती हैं। निर्देशों के बिना (लेकिन -openmp ध्वज के साथ) यह काम करता है।

किसी भी मदद की सराहना की जाएगी।

उत्तर

5

मैं gfortran homebrew का उपयोग कर स्थापित, मैक ओएस एक्स (10.9.5) पर त्रुटि प्रजनन करने में सक्षम था, और मैं आदेश को -lgomp जोड़कर इसे ठीक करने में सक्षम था:

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

जोड़ा गया @Mark द्वारा: ध्यान दें कि -lgomp f2py के लिए एक तर्क है, gfortran नहीं। हालांकि यह के साथ संकलित करता है, और -fopenmp दोनों समानांतर होने के लिए आवश्यक हैं, जैसा कि here वर्णित है। जीओएमपी जीएनयू ओपनएमपी कार्यान्वयन है।

+0

बढ़िया काम करता है! मैं थोड़ी सी जानकारी जोड़ूंगा जो मैंने आपके उत्तर के कारण पाया, उम्मीद है कि यह ठीक है। – Mark

+0

@ मार्क, संपादन बहुत अच्छा है, धन्यवाद! –

संबंधित मुद्दे