ฉันกำลังสร้างสภาพแวดล้อมที่น่าเบื่อ / scipy ของฉันโดยอาศัย blas และ lapack มากหรือน้อยตามสิ่งนี้ใช้เวลาเดินผ่าน
เมื่อฉันทำเสร็จแล้วฉันจะตรวจสอบได้อย่างไรว่าฟังก์ชัน numpy / scipy ของฉันใช้ฟังก์ชัน blas / lapack ที่สร้างไว้ก่อนหน้านี้หรือไม่
ฉันกำลังสร้างสภาพแวดล้อมที่น่าเบื่อ / scipy ของฉันโดยอาศัย blas และ lapack มากหรือน้อยตามสิ่งนี้ใช้เวลาเดินผ่าน
เมื่อฉันทำเสร็จแล้วฉันจะตรวจสอบได้อย่างไรว่าฟังก์ชัน numpy / scipy ของฉันใช้ฟังก์ชัน blas / lapack ที่สร้างไว้ก่อนหน้านี้หรือไม่
คำตอบ:
เมธอดnumpy.show_config()
(หรือnumpy.__config__.show()
) แสดงข้อมูลเกี่ยวกับการเชื่อมโยงที่รวบรวมในเวลาสร้าง ผลลัพธ์ของฉันมีลักษณะเช่นนี้ ฉันคิดว่านั่นหมายความว่าฉันใช้ BLAS / LAPACK ที่มาพร้อมกับ Mac OS
>>> import numpy as np
>>> np.show_config()
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)]
lapack_opt_info
ปรากฏขึ้นหมายความว่า numpy เชื่อมโยงกับ lapack?
numpy.show_config()
ซึ่งน่าจะเป็นฟังก์ชัน API สาธารณะโดยอาศัยการไม่มีขีดล่างเริ่มต้น แต่ไม่ได้จัดทำเป็นเอกสารทางออนไลน์และไม่มี docstring จึงไม่แปลกใจเลยที่หายากมาก หวังว่าพวกเขาจะแก้ไขได้
สิ่งที่คุณกำลังค้นหามีดังนี้: ข้อมูลระบบ
ฉันรวบรวม numpy / scipy ด้วย atlas และฉันสามารถตรวจสอบสิ่งนี้ด้วย:
import numpy.distutils.system_info as sysinfo
sysinfo.get_info('atlas')
ตรวจสอบเอกสารสำหรับคำสั่งเพิ่มเติม
sysinfo.get_info('atlas')
ไม่คืนอะไรให้ฉัน แต่sysinfo.get_info('blas')
กลับ {'include_dirs': ['/usr/local/include', '/usr/include', '/opt/local/include', '/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/include'], 'libraries': ['blas', 'blas'], 'library_dirs': ['/usr/lib']}
แล้วsysinfo.get_info('lapack')
ส่งคืน {'language': 'f77', 'libraries': ['lapack', 'lapack'], 'library_dirs': ['/usr/lib']}
หมายความว่าอย่างไร
เนื่องจากใช้เวอร์ชันที่โหลดแบบไดนามิกคุณสามารถทำได้:
$ ldd anyoftheCmodules.so
ที่anyoftheCmodules.so
อาจจะเป็นตัวอย่างที่เชื่อมโยงไปยังnumpy/core/_dotblas.so
libblas.so
numpy/core/_dotblas.so
? (ดูความคิดเห็นด้านล่างคำตอบของ Talonmies)
.so
ไฟล์อยู่ในนั้น เพียงค้นหาในไดเรกทอรี NumPy (พูดโดยใช้find /path/to/numpy -name "*.so"
) คู่ของเหล่านั้น ( _dotblas.so
, lapack_lite.so
ภายใต้ของ Ubuntu precompiled หนึ่งตัวอย่างเช่น) ทำให้การใช้หน่าย / LAPACK
_dotblas.so
ไม่มีอยู่ใน numpy v1.10 และใหม่กว่าอีกต่อไปแต่คุณสามารถตรวจสอบการเชื่อมโยงของmultiarray.so
แทนได้
numpy.__config__
วัตถุที่ยอมรับในรันไทม์แทน (ดูคำตอบที่ยอดเยี่ยมของdavost )
คุณสามารถใช้เครื่องมือการพึ่งพาตัวโหลดลิงค์เพื่อดูส่วนประกอบเบ็ดระดับ C ของบิลด์ของคุณและดูว่ามีการอ้างอิงภายนอกกับ blas และ lapack ที่คุณเลือกหรือไม่ ตอนนี้ฉันไม่ได้อยู่ใกล้กล่อง linux แต่ในเครื่อง OS X คุณสามารถทำได้ภายในไดเร็กทอรีไซต์แพ็คเกจซึ่งมีการติดตั้ง:
$ 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
ในotool
ระบบ gnu / Linux และคุณควรได้รับคำตอบที่ต้องการ
numpy/core/_dotblas.so
? (ดูความคิดเห็นด้านล่างคำตอบของ Ricardos)
_dotblas.so
ที่เป็นตัวห่ออินเทอร์เฟซสำหรับบลาสที่ใช้ในการสร้างการกระจาย บน windows จะเรียกใช้_dotblas.pyd
แต่ฟังก์ชันเหมือนกัน
_dotblas.so
จะสร้างขึ้นเฉพาะเมื่อคุณใช้[atlas]
ส่วนในsite.cfg
(และไลบรารี BLAS ที่เปิดใช้งาน CBLAS) ดังนั้นคุณควรใช้สิ่งนั้นแม้ว่าคุณจะไม่ได้ใช้ ATLAS ก็ตาม (ยกเว้นเมื่อคุณใช้ Intel MKL ซึ่งมีส่วนเฉพาะ)
_dotblas.so
ไม่มีอยู่ใน numpy v1.10 และใหม่กว่าอีกต่อไปแต่คุณสามารถตรวจสอบการเชื่อมโยงของmultiarray.so
แทนได้
คุณสามารถแสดงการเชื่อมโยง BLAS, LAPACK, MKL โดยใช้show_config()
:
import numpy as np
np.show_config()
ซึ่งสำหรับฉันให้ผลลัพธ์:
mkl_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/my/environment/path/lib']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/my/environment/path/include']
blas_mkl_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/my/environment/path/lib']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/my/environment/path/include']
blas_opt_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/my/environment/path/lib']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/my/environment/path/include']
lapack_mkl_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/my/environment/path/lib']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/my/environment/path/include']
lapack_opt_info:
libraries = ['mkl_rt', 'pthread']
library_dirs = ['/my/environment/path/lib']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['/my/environment/path/include']
('HAVE_CBLAS', None)]
อย่างไร?
หากคุณติดตั้ง anaconda-navigator (ที่ www.anaconda.com/anaconda/install/ สำหรับ linux, Windows หรือ macOS) - blas, scipy และ numpy ทั้งหมดจะถูกติดตั้งและคุณสามารถดูได้โดยคลิกที่แท็บสภาพแวดล้อมทางด้านซ้ายของหน้าแรกของเนวิเกเตอร์ หน้า (ค้นหาแต่ละไดเรกทอรีตามลำดับอัลฟา) การติดตั้งอนาคอนดาเต็มรูปแบบ (ซึ่งต่างจากมินิคอนดาหรือแพ็กเกจส่วนบุคคล) จะดูแลการติดตั้งแพ็กเกจที่จำเป็นจำนวนมากที่จำเป็นสำหรับวิทยาศาสตร์ข้อมูล
numpy.__config__
ควรเป็น API สาธารณะ อย่างไรก็ตามคุณชนะรอบนี้davost