मै मैक ओएस एक्स 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
मैंने अभी कोशिश की है: 'python -mtimeit -s'import np के रूप में numpy; ए = np.random.randn (1e3,1e3) '' np.dot (ए, ए) '' यह एकाधिक कोर का उपयोग करता है। तो कम से कम कुछ विन्यास में यह कर सकता है। – jfs
@ जेएफ। सेबेस्टियन मुझे पता है कि यह कर सकता है, लेकिन मैं यह पता लगाने की कोशिश कर रहा हूं कि मैं क्या खो रहा हूं। – Nino
@ जेएफ। सेबेस्टियन मैंने बस वही करने की कोशिश की जो आपने किया और मेरे कोर का पूर्ण उपयोग किया। इसका कारण यह है कि numpy गणना जीआईएल से जाने देती है, ताकि लूप के रूप में कई अलग-अलग गणनाएं चलें (जैसा कि समय-समय पर किया जाता है), प्रत्येक गणना एक अलग थ्रेड में की जाती है। हालांकि, मुझे जो समस्या हो रही है, वह एक गणना की बहु-थ्रेडिंग है। यदि मैं समय-समय पर उपयोग किए बिना आपकी तरह की एक स्क्रिप्ट चलाता हूं (इसलिए कोई पुनरावृत्ति नहीं), एक समय में केवल एक कोर का उपयोग किया जाता है। – Nino