2012-08-03 23 views
7

मै मैक ओएस एक्स 10.6.8 चला रहा हूं और एनथॉट पायथन वितरण का उपयोग कर रहा हूं। मैं अपने कोर दोनों का लाभ लेने के लिए numpy कार्यों के लिए चाहता हूँ। मुझे इस पोस्ट के समान समस्या है: multithreaded blas in python/numpy लेकिन उस पोस्टर के चरणों के माध्यम से अनुसरण करने के बाद, मुझे अभी भी वही समस्या है। यहाँ मेरी numpy.show_config() है:माना जाता है कि स्वचालित रूप से थ्रेडेड scipy और numpy फ़ंक्शंस एकाधिक कोर का उपयोग नहीं कर रहे हैं

lapack_opt_info: 
    libraries = ['mkl_lapack95_lp64', 'mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'mkl_mc', 'mkl_mc3', 'pthread'] 
    library_dirs = ['/Library/Frameworks/EPD64.framework/Versions/1.4.2/lib'] 
    define_macros = [('SCIPY_MKL_H', None)] 
    include_dirs = ['/Library/Frameworks/EPD64.framework/Versions/1.4.2/include'] 
blas_opt_info: 
    libraries = ['mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'mkl_mc', 'mkl_mc3', 'pthread'] 
    library_dirs = ['/Library/Frameworks/EPD64.framework/Versions/1.4.2/lib'] 
    define_macros = [('SCIPY_MKL_H', None)] 
    include_dirs = ['/Library/Frameworks/EPD64.framework/Versions/1.4.2/include'] 
lapack_mkl_info: 
    libraries = ['mkl_lapack95_lp64', 'mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'mkl_mc', 'mkl_mc3', 'pthread'] 
    library_dirs = ['/Library/Frameworks/EPD64.framework/Versions/1.4.2/lib'] 
    define_macros = [('SCIPY_MKL_H', None)] 
    include_dirs = ['/Library/Frameworks/EPD64.framework/Versions/1.4.2/include'] 
blas_mkl_info: 
    libraries = ['mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'mkl_mc', 'mkl_mc3', 'pthread'] 
    library_dirs = ['/Library/Frameworks/EPD64.framework/Versions/1.4.2/lib'] 
    define_macros = [('SCIPY_MKL_H', None)] 
    include_dirs = ['/Library/Frameworks/EPD64.framework/Versions/1.4.2/include'] 
mkl_info: 
    libraries = ['mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'mkl_mc', 'mkl_mc3', 'pthread'] 
    library_dirs = ['/Library/Frameworks/EPD64.framework/Versions/1.4.2/lib'] 
    define_macros = [('SCIPY_MKL_H', None)] 
    include_dirs = ['/Library/Frameworks/EPD64.framework/Versions/1.4.2/include'] 

मूल पोस्ट की टिप्पणी के रूप में, मैं लाइन है कि चर MKL_NUM_THREADS=1 सेट नष्ट कर दिया। लेकिन फिर भी बहु-थ्रेडिंग का लाभ उठाने वाले नुकीले और तेज कार्यों को एक समय में केवल मेरे कोर का उपयोग करना है। क्या मुझे कुछ और बदलना चाहिए?

संपादित करें: स्पष्टीकरण के लिए, मैं एक एकल गणना जैसे numpy.dot() को एमकेएल कार्यान्वयन के अनुसार बहु-थ्रेडिंग का उपयोग करने की कोशिश कर रहा हूं, मैं इस तथ्य का लाभ उठाने की कोशिश नहीं कर रहा हूं कि numpy गणना जीआईएल का नियंत्रण जारी करती है, इसलिए अन्य कार्यों के साथ बहु-थ्रेडिंग को आसान बनाते हैं।

यहां एक छोटा स्क्रिप्ट बहु सूत्रण का उपयोग करना चाहिए, लेकिन मेरे मशीन पर नहीं है:

import numpy as np 

a = np.random.randn(1000, 10000) 
b = np.random.randn(10000, 1000) 

np.dot(a, b) #this line should be multi-threaded 
+0

मैंने अभी कोशिश की है: 'python -mtimeit -s'import np के रूप में numpy; ए = np.random.randn (1e3,1e3) '' np.dot (ए, ए) '' यह एकाधिक कोर का उपयोग करता है। तो कम से कम कुछ विन्यास में यह कर सकता है। – jfs

+0

@ जेएफ। सेबेस्टियन मुझे पता है कि यह कर सकता है, लेकिन मैं यह पता लगाने की कोशिश कर रहा हूं कि मैं क्या खो रहा हूं। – Nino

+0

@ जेएफ। सेबेस्टियन मैंने बस वही करने की कोशिश की जो आपने किया और मेरे कोर का पूर्ण उपयोग किया। इसका कारण यह है कि numpy गणना जीआईएल से जाने देती है, ताकि लूप के रूप में कई अलग-अलग गणनाएं चलें (जैसा कि समय-समय पर किया जाता है), प्रत्येक गणना एक अलग थ्रेड में की जाती है। हालांकि, मुझे जो समस्या हो रही है, वह एक गणना की बहु-थ्रेडिंग है। यदि मैं समय-समय पर उपयोग किए बिना आपकी तरह की एक स्क्रिप्ट चलाता हूं (इसलिए कोई पुनरावृत्ति नहीं), एक समय में केवल एक कोर का उपयोग किया जाता है। – Nino

उत्तर

7

This article कि Numpy मतलब लगता है समझदारी से निश्चित संचालनों के समानांतर बना देता है, आपरेशन के भविष्यवाणी speedup के आधार पर :

  • "अपने numpy/scipy इनमें से किसी एक का उपयोग कर संकलित किया गया है, तो आप कुछ भी करने के बिना डॉट() समानांतर में गणना की जाएगी (यदि यह तेजी से होता है)।"

शायद आपका छोटा (-ish) परीक्षण केस किसी विशेष डॉट() कॉल को समानांतर करने के लिए निर्धारित करने के लिए numpy के उत्थान के अनुसार महत्वपूर्ण गति दिखाई नहीं देगा? शायद एक हास्यास्पद बड़े ऑपरेशन का प्रयास करें और देखें कि दोनों कोर का उपयोग किया जाता है या नहीं?

एक साइड नोट के रूप में, क्या आपका प्रोसेसर/मशीन कॉन्फ़िगरेशन वास्तव में बीएलएएस का समर्थन करता है?

+0

यह बीएलएएस का समर्थन करता है, लेकिन यह सवाल से बाहर है क्योंकि मेरा numpy एमकेएल से जुड़ा हुआ है। तो, आश्चर्यजनक रूप से पर्याप्त, निराशा से बाहर, मैंने उस स्क्रिप्ट को दोबारा चलाने की कोशिश की, और अब यह काम करता है। बहुत परेशान ... लेकिन अब मैं जाने के लिए अच्छा हूं, और जब से आपने उत्तर दिया, 50 अंक आपको। धन्यवाद। – Nino

+0

जी, धन्यवाद! – chisaipete

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

  • कोई संबंधित समस्या नहीं^_^