2012-01-25 7 views
104

मैं this पर चलने के आधार पर ब्लैस और लैपैक के आधार पर अपने numpy/scipy वातावरण को कम या कम कर रहा हूं।numpy/scipy में blas/lapack linkage को कैसे जांचें?

जब मैं कर रहा हूं, तो मैं कैसे जांच सकता हूं कि मेरे numpy/scipy फ़ंक्शंस वास्तव में पहले निर्मित ब्लैस/लैपैक कार्यक्षमताओं का उपयोग करते हैं?

+1

मैंने देखा कि आप अभी भी स्टैक ओवरफ़्लो पर सक्रिय हैं। स्वीकार्य और शीर्ष मतदान वाले उत्तरों को देखते हुए, मेरा सुझाव है कि आप वर्तमान में स्वीकार किए गए एक के बजाय स्वीकार किए गए शीर्ष वोट किए गए उत्तर को चिह्नित करने पर विचार करें :) –

उत्तर

26

क्या आप खोज रहे हैं यह है

import numpy.distutils.system_info as sysinfo 
sysinfo.get_info('atlas') 

अधिक आदेश के लिए प्रलेखन की जाँच करें।

+25

के खिलाफ लिंक नहीं है यह दिखाता प्रतीत नहीं होता है कि numpy वर्तमान में ATLAS का उपयोग करता है, भले ही ATLAS अगले numpy संकलन के दौरान लिंक किया जाएगा । मैं ATLAS से पहले संकलित numpy था। जब तक मैंने numpy (निश्चित चीज़) को दोबारा नहीं बनाया, तब तक यह बहुत धीमी गति से काम करता था, लेकिन पहले और बाद में numpy recompilation sysinfo.get_info ('atlas') दोनों ने एक ही आउटपुट दिखाया। वर्तमान स्थिति की जांच कैसे करें? – dmytro

+2

आउटपुट की व्याख्या कैसे करें? – EOL

+1

आपके पास 'एटलस' के बजाय 'ब्लैस' हो सकता है (ऐसा होता है यदि आप डेबियन आधारित डिस्ट्रोज़ पर ओपनब्लैस इंस्टॉल करते हैं)। – Malcolm

11

यह गतिशील लोड संस्करणों का उपयोग करता है के रूप में, तुम सिर्फ यह कर सकते हैं:

$ ldd anyoftheCmodules.so 

,,, उदाहरण के लिए numpy/core/_dotblas.so जो libblas.so से जोड़ता है, जहां anyoftheCmodules.so हो सकता है।

+1

यदि कोई फ़ाइल 'numpy/core/_dotblas.so' नहीं है तो क्या होगा? (talonmies उत्तर के नीचे टिप्पणी देखें) – Woltan

+1

वहां पर कई '.so' फाइलें होंगी। बस NumPy निर्देशिका के अंदर खोजें (कहें, 'ढूंढें/पथ/से/numpy -name "* .so" ') का उपयोग करके। उनमें से कुछ ('_dotblas.so', 'lapack_lite.so' उबंटू के प्रीकंपिल्ड वाले के तहत, उदाहरण के लिए) बीएलएएस/लैपैक –

+4

का उपयोग करें [' _dotblas.so' अब numpy v1.10 और newer में मौजूद नहीं है] (http : //docs.scipy.org/doc/numpy-dev/release.html#dropped-support), लेकिन आप 'multiarray.so' के लिंक की जांच कर सकते हैं –

7

आप अपने बिल्ड के सी लेवल हुक घटकों को देखने के लिए लिंक लोडर निर्भरता टूल का उपयोग कर सकते हैं और देख सकते हैं कि उनके पास आपके ब्लैस और पसंद के लैपैक पर बाहरी निर्भरताएं हैं या नहीं। मैं एक linux बॉक्स के पास अभी नहीं हूँ, लेकिन एक ओएस एक्स मशीन पर आपको साइट-संकुल निर्देशिका जो प्रतिष्ठानों रखती अंदर ऐसा कर सकते हैं: otool के स्थान पर एक जीएनयू/लिनक्स सिस्टम पर

$ otool -L numpy/core/_dotblas.so 
numpy/core/_dotblas.so: 
    /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0) 
    /System/Library/Frameworks/vecLib.framework/Versions/A/vecLib (compatibility version 1.0.0, current version 268.0.1) 

$ otool -L scipy/linalg/flapack.so 
scipy/linalg/flapack.so (architecture i386): 
    /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0) 
    /usr/local/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4) 
    /System/Library/Frameworks/vecLib.framework/Versions/A/vecLib (compatibility version 1.0.0, current version 242.0.0) 
scipy/linalg/flapack.so (architecture ppc): 
    /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0) 
    /usr/local/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4) 

$ otool -L scipy/linalg/fblas.so 
scipy/linalg/fblas.so (architecture i386): 
    /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0) 
    /usr/local/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4) 
    /System/Library/Frameworks/vecLib.framework/Versions/A/vecLib (compatibility version 1.0.0, current version 242.0.0) 
scipy/linalg/fblas.so (architecture ppc): 
    /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0) 
    /usr/local/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4) 

स्थानापन्न ldd और आपको जवाबों को प्राप्त करना चाहिए। system info

मैं संकलित numpy/एटलस के साथ scipy और मैं के साथ इस जाँच कर सकते हैं:

+1

क्या होगा यदि कोई फ़ाइल 'numpy/core/_dotblas.so' नहीं है? (रिकार्डोस उत्तर के नीचे टिप्पणी देखें) – Woltan

+0

@ वोल्टन: या तो कुछ गंभीर रूप से टूटा हुआ है, या आप गलत जगह पर देख रहे हैं। प्रत्येक लिनक्स और ओएस एक्स numpy इंस्टॉल पर मैंने कभी देखा है, एक _ _dotblas.so' होगा जो वितरण के निर्माण के लिए जो कुछ भी ब्लैस का उपयोग किया गया है, इंटरफ़ेस रैपर है। विंडोज़ पर इसे '_dotblas.pyd' कहा जाएगा, लेकिन फ़ंक्शन एक जैसा है। – talonmies

+3

ऐसा लगता है कि '_dotblas.so' केवल तभी बनाया गया है जब आप 'site.cfg' (और एक सीबीएलएएस-सक्षम BLAS लाइब्रेरी) में' [atlas] 'अनुभाग का उपयोग कर रहे हों।इसलिए, आपको इसका उपयोग करना चाहिए, भले ही आप एटीएलएएस का उपयोग नहीं कर रहे हों (सिवाय इसके कि जब आप इंटेल एमकेएल का उपयोग कर रहे हों, जिसमें एक समर्पित अनुभाग है)। –

224

विधि numpy.__config__.show() बिल्ड समय पर एकत्रित संबंध के बारे में जानकारी आउटपुट करता है। मेरा आउटपुट इस तरह दिखता है। मुझे लगता है कि इसका मतलब है कि मैं ब्लैक/लैपैक का उपयोग कर रहा हूं जो मैक ओएस के साथ जहाजों का उपयोग करता है।

>>>import numpy as np 
>>>np.__config__.show() 

lapack_opt_info: 
    extra_link_args = ['-Wl,-framework', '-Wl,Accelerate'] 
    extra_compile_args = ['-msse3'] 
    define_macros = [('NO_ATLAS_INFO', 3)] 
blas_opt_info: 
    extra_link_args = ['-Wl,-framework', '-Wl,Accelerate'] 
    extra_compile_args = ['-msse3', '-I/System/Library/Frameworks/vecLib.framework/Headers'] 
    define_macros = [('NO_ATLAS_INFO', 3)] 
+2

यह वास्तव में दिखाता है कि मैं क्या चाहता था। – astrojuanlu

+17

यह स्वीकार्य उत्तर होना चाहिए – Julius

+4

इसकी व्यापक उपयोगिता को देखते हुए, 'numpy .__ config__' वास्तव में एक सार्वजनिक एपीआई होना चाहिए। फिर भी, ** आप इस दौर को जीतते हैं, [डेवोस्ट] (https://stackoverflow.com/users/2877003/davost)। ** –

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