Numpy: np.dot 1.14.5 рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 6 рдЬреБрд▓ре░ 2018  ┬╖  61рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: numpy/numpy

рд╣рдорд╛рд░реЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░, рдирд┐рдореНрди рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдЕрдЬрдЧрд░ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреА рджреБрд░реНрдШрдЯрдирд╛ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ:

import numpy as np
A = np.matrix([[1.], [3.]])
B = np.matrix([[2., 3.]])
np.dot(A, B)

рдХреБрдЫ рд╡рд┐рд╡рд░рдг:

  • рд╡рд┐рдВрдбреЛрдЬ 10
  • рдПрдХ рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдкрд╛рдпрдерди 3.5.2
  • рд╕реБрдиреНрди 1.14.5

рдЕрдиреНрдп рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдпрд╣ рдХрдорд╛рдВрдб рдареАрдХ рдХрд╛рдо рдХрд░рддреА рд╣реИред

рд╕рднреА 61 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЖрдк рдЕрдкрдиреЗ рд╕реБрдиреНрди рдХрд╣рд╛рдБ рд╣реЛ рд░рд╣реЗ рд╣реИрдВ? рдкрд┐рдк? рдПрдирд╛рдХреЛрдВрдбрд╛? np.show_config() рдХрд╣рддрд╛ рд╣реИ?

рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдкрд╛рдЗрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реБрдиреНрди рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИред

>>> import numpy as np
>>> np.show_config()
blas_mkl_info:
  NOT AVAILABLE
openblas_lapack_info:
    library_dirs = ['C:\\projects\\numpy-wheels-jc1cl\\numpy\\build\\openblas']
    libraries = ['openblas']
    define_macros = [('HAVE_CBLAS', None)]
    language = f77
blis_info:
  NOT AVAILABLE
lapack_mkl_info:
  NOT AVAILABLE
openblas_info:
    library_dirs = ['C:\\projects\\numpy-wheels-jc1cl\\numpy\\build\\openblas']
    libraries = ['openblas']
    define_macros = [('HAVE_CBLAS', None)]
    language = f77
lapack_opt_info:
    library_dirs = ['C:\\projects\\numpy-wheels-jc1cl\\numpy\\build\\openblas']
    libraries = ['openblas']
    define_macros = [('HAVE_CBLAS', None)]
    language = f77
blas_opt_info:
    library_dirs = ['C:\\projects\\numpy-wheels-jc1cl\\numpy\\build\\openblas']
    libraries = ['openblas']
    define_macros = [('HAVE_CBLAS', None)]
    language = f77

рдорд╢реАрди рдкрд░ рдирд╡реАрдирддрдо Microsoft Visual C рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рддрд╛ рд╣реИ
рдорджрдж? рд╢рд╛рдпрдж рд╡рд┐рдВрдбреЛрдЬрд╝ рдЕрдкрдбреЗрдЯ рд╕реЗ рдпрд╛ рдЙрд╕рд╕реЗ рдЙрдкрд▓рдмреНрдз:
https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads

@pv рд╕рдВрдХреЗрдд рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд▓реЗрдХрд┐рди рдирд╡реАрдирддрдо 2017 рд░рдирдЯрд╛рдЗрдо рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рддреНрд░реБрдЯрд┐ рдЕрднреА рднреА рдореМрдЬреВрдж рд╣реИред

рд╢рд╛рдпрдж рдЗрд╕рдХрд╛ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рднрд╛рд╡рд┐рдд рд╕рд┐рд╕реНрдЯрдо рдПрдХ рдХреЗрд╡реАрдПрдо рдореЗрдВ рдЪрд▓рдиреЗ рд╡рд╛рд▓рд╛ рд╡рд┐рдВрдбреЛрдЬ 10 рд╣реИред

рдЬрдм рдореИрдВ t.py рдореЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдКрдкрд░ рдкрд░реАрдХреНрд╖рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ: python -u -m trace -t t.py , рдореИрдВ рджреБрд░реНрдШрдЯрдирд╛ рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рдореНрди рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:

t.py(4): A = np.matrix([[1.], [3.]])
 --- modulename: defmatrix, funcname: __new__
defmatrix.py(213):         if isinstance(data, matrix):
defmatrix.py(221):         if isinstance(data, N.ndarray):
defmatrix.py(232):         if isinstance(data, str):
defmatrix.py(236):         arr = N.array(data, dtype=dtype, copy=copy)
defmatrix.py(237):         ndim = arr.ndim
defmatrix.py(238):         shape = arr.shape
defmatrix.py(239):         if (ndim > 2):
defmatrix.py(241):         elif ndim == 0:
defmatrix.py(243):         elif ndim == 1:
defmatrix.py(246):         order = 'C'
defmatrix.py(247):         if (ndim == 2) and arr.flags.fortran:
defmatrix.py(248):             order = 'F'
defmatrix.py(250):         if not (order or arr.flags.contiguous):
defmatrix.py(253):         ret = N.ndarray.__new__(subtype, shape, arr.dtype,
defmatrix.py(254):                                 buffer=arr,
defmatrix.py(255):                                 order=order)
 --- modulename: defmatrix, funcname: __array_finalize__
defmatrix.py(259):         self._getitem = False
defmatrix.py(260):         if (isinstance(obj, matrix) and obj._getitem): return
defmatrix.py(261):         ndim = self.ndim
defmatrix.py(262):         if (ndim == 2):
defmatrix.py(263):             return
defmatrix.py(256):         return ret
t.py(5): B = np.matrix([[2., 3.]])
 --- modulename: defmatrix, funcname: __new__
defmatrix.py(213):         if isinstance(data, matrix):
defmatrix.py(221):         if isinstance(data, N.ndarray):
defmatrix.py(232):         if isinstance(data, str):
defmatrix.py(236):         arr = N.array(data, dtype=dtype, copy=copy)
defmatrix.py(237):         ndim = arr.ndim
defmatrix.py(238):         shape = arr.shape
defmatrix.py(239):         if (ndim > 2):
defmatrix.py(241):         elif ndim == 0:
defmatrix.py(243):         elif ndim == 1:
defmatrix.py(246):         order = 'C'
defmatrix.py(247):         if (ndim == 2) and arr.flags.fortran:
defmatrix.py(248):             order = 'F'
defmatrix.py(250):         if not (order or arr.flags.contiguous):
defmatrix.py(253):         ret = N.ndarray.__new__(subtype, shape, arr.dtype,
defmatrix.py(254):                                 buffer=arr,
defmatrix.py(255):                                 order=order)
 --- modulename: defmatrix, funcname: __array_finalize__
defmatrix.py(259):         self._getitem = False
defmatrix.py(260):         if (isinstance(obj, matrix) and obj._getitem): return
defmatrix.py(261):         ndim = self.ndim
defmatrix.py(262):         if (ndim == 2):
defmatrix.py(263):             return
defmatrix.py(256):         return ret
t.py(6): print(np.dot(A, B))
 --- modulename: defmatrix, funcname: __array_finalize__
defmatrix.py(259):         self._getitem = False
defmatrix.py(260):         if (isinstance(obj, matrix) and obj._getitem): return
defmatrix.py(261):         ndim = self.ndim
defmatrix.py(262):         if (ndim == 2):
defmatrix.py(263):             return

рд╣рдореНрдо,

рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

A = np.matrix([[1.], [3.]])
B = np.matrix([[2., 3.]])
print(np.dot(A.astype(np.float16), B.astype(np.float16)))

рдпрд╣ рдПрдХ рджреБрд░реНрдШрдЯрдирд╛

A = np.matrix([[1.], [3.]])
B = np.matrix([[2., 3.]])
print(np.dot(A.astype(np.float32), B.astype(np.float32)))

рдХреЛрдИ рдЙрдкрд╛рдп?

рд╡рд┐рднрд┐рдиреНрди рд╕реБрдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐

  • рд╕реБрдиреНрди <= 1.13.1, рдЬрдмрдХрд┐ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реИ
  • numpy> = 1.13.3 рдЗрд╕ рдЕрдВрдХ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реИ
  • рд╕рдВрдЦреНрдпрд╛ 1.13.2 рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдкреАрдкреЗ рдкрд░ рдХреЛрдИ рдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ

рдореБрдЭреЗ рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣реЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕ рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдкрд░реНрдпрд╛рд╡рд░рдг, рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдЖрджрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рд╣реИ, рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИред

рдЖрдк рдХрд┐рд╕ рдЬрд╛рдирдХрд╛рд░реА рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ?

OS Name Microsoft Windows 10 Pro
Version 10.0.16299 Build 16299
Other OS Description    Not Available
OS Manufacturer Microsoft Corporation
System Name <REMOVED>
System Manufacturer QEMU
System Model    Standard PC (i440FX + PIIX, 1996)
System Type x64-based PC
System SKU  
Processor   Common KVM processor, 1996 Mhz, 4 Core(s), 4 Logical Processor(s)
BIOS Version/Date   SeaBIOS rel-1.11.0-0-g63451fca13-prebuilt.qemu-project.org, 4/1/2014
SMBIOS Version  2.8
Embedded Controller Version 255.255
BIOS Mode   Legacy
Platform Role   Desktop
Secure Boot State   Unsupported
PCR7 Configuration  Binding Not Possible
Windows Directory   C:\WINDOWS
System Directory    C:\WINDOWS\system32
Boot Device \Device\HarddiskVolume1
Locale  Austria
Hardware Abstraction Layer  Version = "10.0.16299.371"
User Name   Not Available
Time Zone   W. Europe Daylight Time
Installed Physical Memory (RAM) 4.00 GB
Total Physical Memory   4.00 GB
Available Physical Memory   1.94 GB
Total Virtual Memory    8.00 GB
Available Virtual Memory    5.27 GB
Page File Space 4.00 GB
Page File   C:\pagefile.sys
Virtualization-based security   Not enabled
Device Encryption Support   Reasons for failed automatic device encryption: TPM is not usable, PCR7 binding is not supported, Hardware Security Test Interface failed and device is not InstantGo, Un-allowed DMA capable bus/device(s) detected, Disabled by policy, TPM is not usable
A hypervisor has been detected. Features required for Hyper-V will not be displayed.    

рдореИрдВ рдЖрдкрдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддрд┐рд╖реНрдард╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдорддрднреЗрджреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдзрд╛рд░ рдкреНрд░рдгрд╛рд▓реА linux рд╣реИ?

рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

  • рд╕рднреА рднреМрддрд┐рдХ рд╡рд┐рдВрдбреЛрдЬ 10 рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди
  • рд╡рд┐рдВрдбреЛрдЬ 10 рд╣реЛрд╕реНрдЯ рдХреЗ рд╕рд╛рде рд╡рд┐рдВрдбреЛрдЬ 10 рд╣рд╛рдЗрдкрд░-рд╡реА рд╡реАрдПрдо рдореЗрдВ

рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдИ рдЕрдиреНрдп рд╡рд┐рдВрдбреЛрдЬ 10 рд╕реЗрдЯрдЕрдк рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдкреНрд░рднрд╛рд╡рд┐рдд рдкреНрд░рдгрд╛рд▓реА рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдзрд╛рд░ рдкреНрд░рдгрд╛рд▓реА linux рд╣реИ?

рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА: рдбреЗрдмрд┐рдпрди рдЬреАрдПрдирдпреВ / рд▓рд┐рдирдХреНрд╕ 9 (рдЦрд┐рдВрдЪрд╛рд╡)

NumPy рдкрд░рд┐рд╡рд░реНрддрди рдЬреЛ рд╕рдВрднрд╡рдд: рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ 1.13.3 рдХреЗ рд▓рд┐рдП рд╡рд┐рдВрдбреЛрдЬ рдкрд░ OpenBLAS рдХрд╛ рд╕реНрд╡рд┐рдЪ рдерд╛ред рдореИрдВ рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреЗрд╡реАрдПрдо рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЯреНрд╡рд┐рдХрд┐рдВрдЧ рд╣реЛред

рдпрд╣ рднреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдПрдЯрд▓рд╕ dll рддреИрд░ рд░рд╣рд╛ рд╣реИред

рдпрд╣ рднреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдПрдЯрд▓рд╕ dll рддреИрд░ рд░рд╣рд╛ рд╣реИред

рдЗрд╕ рд╡рд╛рдХреНрдп рдХрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ?

рдмрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдУрдкрдирдмреНрд▓рд╕ рдбреАрдПрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдХрд┐рд╕реА рддрд░рд╣ рдкреБрд░рд╛рдиреЗ рдПрдЯрд▓рд╕ рдПрд▓рдПрд▓ рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреНрд░рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╢рд╛рдпрдж рдирд╣реАрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ред IIUC, рд╕реБрдиреНрди рдЪрд▓рддрд╛ рд╣реИ, рдпрд╣ рд╕рд┐рд░реНрдл рдЧрд▓рдд рдкрд░рд┐рдгрд╛рдо рджреЗ рд░рд╣рд╛ рд╣реИред

Numpy рдЪрд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рджреБрд░реНрдШрдЯрдирд╛ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред

рдПрдХ рдФрд░ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдУрдПрдлрдПрд▓рдмреАрдПрдПрд╕ рдПрдХ рдЕрд╡реИрдз рдирд┐рд░реНрджреЗрд╢ рдЬрд╛рд░реА рдХрд░ рд░рд╣рд╛ рд╣реИ (рдПрд╕рдПрд╕рдИ *) рдХреЗрд╡реАрдПрдо рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рд╕рдХреНрд╖рдо рд╣реИ, рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдЖрдк OpenBlas рдХреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред set OPENBLAS_VERBOSE=2 рдЙрдкрдпреЛрдЧ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЙрдбрд▓ рдХрд╛ рдкреНрд░рд┐рдВрдЯ рдЖрдЙрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрддрд┐рдерд┐ рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣реЛрд╕реНрдЯ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЗ рд╕рдорд╛рди рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП set OPENBLAS_CORETYPE=nehalem рд╣реИ рдпрджрд┐ рдпрд╣ рдЖрдкрдХреЗ рдореЗрдЬрдмрд╛рди рдорд╢реАрди рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реИред рдХреНрдпрд╛ NumPy рдореЗрдЬрдмрд╛рди рдорд╢реАрди рдкрд░ рдареАрдХ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ? рдпрджрд┐ рдРрд╕рд╛ рд╣реИ рддреЛ рдЖрдк рд╡рд░реНрдмреЛрдЬрд╝ рд╕реЗрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЕрддрд┐рдерд┐ рдХреЛ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА?

рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рдореМрдЬреВрдж рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рддрдХ @mattip рдЪреАрдЬреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдерд╛ рдФрд░ рдЖрдкрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдерд╛ред рдореИрдВ рдЕрдЧрд▓реЗ рджреЛ рд╕рдкреНрддрд╛рд╣ рдХреЗ рднреАрддрд░ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рдкрд╛рдКрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдРрд╕рд╛ рдХрд░реВрдВрдЧрд╛ред

рдареАрдХ рд╣реИ рдзрдиреНрдпрд╡рд╛рджред

@ m55c55 рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ рд╣реИрдВ?

рдирдорд╕реНрддреЗ,
рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдФрд░ рдПрдХ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рджреЗрдХрд░ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ ...

рдореЗрд░реА рдорд╢реАрди рдкрд░ рдПрдХ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ (рддрд╛рдЬрд╛ рд▓рд┐рдирдХреНрд╕ рд╕реНрдерд╛рдкрд┐рдд):

Linux 4.15.0-42-generic #45-Ubuntu SMP Thu Nov 15 19:32:57 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

Ubuntu 18.04.1 LTS

numpy (1.15.4)

>>> np.show_config()
blas_mkl_info:
  NOT AVAILABLE
blis_info:
  NOT AVAILABLE
openblas_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/usr/local/lib']
    language = c
    define_macros = [('HAVE_CBLAS', None)]
blas_opt_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/usr/local/lib']
    language = c
    define_macros = [('HAVE_CBLAS', None)]
lapack_mkl_info:
  NOT AVAILABLE
openblas_lapack_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/usr/local/lib']
    language = c
    define_macros = [('HAVE_CBLAS', None)]
lapack_opt_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/usr/local/lib']
    language = c
    define_macros = [('HAVE_CBLAS', None)]

рдореЗрд░реА рдЕрдЬрдЧрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ:

import numpy as np
A = np.random.randn(100, 3000)
B = np.random.randn(3000, 100)
np.dot(B, A)

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрд╣реБрдд рдЫреЛрдЯреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХреНрд░реИрд╢ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рджреБрд░реНрдШрдЯрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ: рдорд╢реАрди рддреБрд░рдВрдд рд░рд┐рдмреВрдЯ рд╣реЛ рдЬрд╛рддреА рд╣реИ рдФрд░ рдХрдИ рдлрд╛рдЗрд▓реЗрдВ рджреВрд╖рд┐рдд рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ (рдореЗрд░реА рдЬрд╛рдВрдЪ рдХреЗ рджреМрд░рд╛рди рдореЗрд░реА рдмреИрд╢ рдФрд░ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдореЙрдбреНрдпреВрд▓ рдЯреВрдЯ рдЧрдпрд╛)ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдЖрдк np.dot(B, A.T) рдорддрд▓рдм рд╣реИ? рдЖрдкрдХреЛ NumPy рдХреИрд╕реЗ рдорд┐рд▓рд╛? рдпрджрд┐ рдЖрдкрдиреЗ рдЦреБрдж рдмрдирд╛рдпрд╛ рд╣реИ, рддреЛ OpenBLAS рдХрд╛ рдХреМрди рд╕рд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ?

рд╕рдВрд░реЗрдЦрд┐рдд рдЖрдпрд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдпрд╣ np.dot(B, A) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВрдиреЗ рдкрд╛рдЗрдк рд╕реЗ рд╕реБрдиреНрди рд╣реЛрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА (1.15.4)

тЮЬ  ~ pip3 install numpy
Collecting numpy
  Using cached https://files.pythonhosted.org/packages/ff/7f/9d804d2348471c67a7d8b5f84f9bc59fd1cefa148986f2b74552f8573555/numpy-1.15.4-cp36-cp36m-manylinux1_x86_64.whl

рдФрд░ ubuntu рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рднреА рдХреЛрд╢рд┐рд╢ рдХреА (1.13.3)

тЮЬ  ~ apt-cache show python3-numpy
Package: python3-numpy
Architecture: amd64
Version: 1:1.13.3-2ubuntu1
Priority: optional
Section: python
Source: python-numpy
Origin: Ubuntu
Maintainer: Ubuntu Developers <[email protected]>
Original-Maintainer: Sandro Tosi <[email protected]>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 10670
Provides: python3-f2py, python3-numpy-abi9, python3-numpy-api11, python3-numpy-dev, python3.6-numpy
Depends: python3 (<< 3.7), python3 (>= 3.6~), python3.6:any, python3:any (>= 3.4~), libblas3 | libblas.so.3, libc6 (>= 2.14), liblapack3 | liblapack.so.3
Suggests: gcc (>= 4:4.6.1-5), gfortran, python-numpy-doc, python3-dev, python3-nose (>= 1.0), python3-numpy-dbg
Filename: pool/main/p/python-numpy/python3-numpy_1.13.3-2ubuntu1_amd64.deb
Size: 1942804
MD5sum: 7b84ea9967f987a292b64f5bc5b6d65f
SHA1: 73fd8354b7106ac81b8add37947173aad515a9d5
SHA256: 3098ad88b8404cbeee66cc6eef96b13ea87eda848900d7cb754fd0bf280741bf

рдмрд╕ рджреВрд╕рд░реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ ubuntu 18 рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдкрд╛рдЗрдк рд╕реБрдиреНрди рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ ... рдФрд░ рджреБрд░реНрдШрдЯрдирд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдирд┐рд╢рдЪрд┐рдд рддреМрд░ рдкрд░ рдорд╛рд▓реВрдо рдирд╣реАрдВ рдХрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ !

рдирдорд╕реНрдХрд╛рд░, рдореИрдВрдиреЗ рдЗрд╕ рдмрдЧ рдХрд╛ рд╕рд╛рдордирд╛ рддрдм рдХрд┐рдпрд╛ рдЬрдм рдореИрдВ рдЧрд▓рд┐рдпрд╛рд░реЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░ рд░рд╣рд╛ рдерд╛ред рдореИрдВрдиреЗ рдиреАрдЪреЗ рдбреНрд░рд┐рд▓ рдХрд┐рдпрд╛ рдФрд░ рдкрд╛рдпрд╛ рдХрд┐ рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЙрд▓ np.dot(np.array([[0], [0]]), np.array([0, 0]).conj()) рд╕рд╛рде рджреБрд░реНрдШрдЯрдирд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ

рдЗрдо рд░рдирд┐рдВрдЧ рд╡рд┐рдВрдбреЛ 10 рдПрдирд╛рдХреЛрдВрдбрд╛ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВред

np.__version__

1.14.2

np.show_config ()

mkl_info:
    libraries = ['mkl_rt']
    library_dirs = ['C:/Users/tommassino/AppData/Local/Continuum/Anaconda3/envs/project-conda\\Library\\lib']
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2016.4.246\\windows\\mkl', 'C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2016.4.246\\windows\\mkl\\include', 'C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2016.4.246\\windows\\mkl\\lib', 'C:/Users/tommassino/AppData/Local/Continuum/Anaconda3/envs/project-conda\\Library\\include']
blas_mkl_info:
    libraries = ['mkl_rt']
    library_dirs = ['C:/Users/tommassino/AppData/Local/Continuum/Anaconda3/envs/project-conda\\Library\\lib']
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2016.4.246\\windows\\mkl', 'C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2016.4.246\\windows\\mkl\\include', 'C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2016.4.246\\windows\\mkl\\lib', 'C:/Users/tommassino/AppData/Local/Continuum/Anaconda3/envs/project-conda\\Library\\include']
blas_opt_info:
    libraries = ['mkl_rt']
    library_dirs = ['C:/Users/tommassino/AppData/Local/Continuum/Anaconda3/envs/project-conda\\Library\\lib']
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2016.4.246\\windows\\mkl', 'C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2016.4.246\\windows\\mkl\\include', 'C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2016.4.246\\windows\\mkl\\lib', 'C:/Users/tommassino/AppData/Local/Continuum/Anaconda3/envs/project-conda\\Library\\include']
lapack_mkl_info:
    libraries = ['mkl_rt']
    library_dirs = ['C:/Users/tommassino/AppData/Local/Continuum/Anaconda3/envs/project-conda\\Library\\lib']
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2016.4.246\\windows\\mkl', 'C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2016.4.246\\windows\\mkl\\include', 'C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2016.4.246\\windows\\mkl\\lib', 'C:/Users/tommassino/AppData/Local/Continuum/Anaconda3/envs/project-conda\\Library\\include']
lapack_opt_info:
    libraries = ['mkl_rt']
    library_dirs = ['C:/Users/tommassino/AppData/Local/Continuum/Anaconda3/envs/project-conda\\Library\\lib']
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2016.4.246\\windows\\mkl', 'C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2016.4.246\\windows\\mkl\\include', 'C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2016.4.246\\windows\\mkl\\lib', 'C:/Users/tommassino/AppData/Local/Continuum/Anaconda3/envs/project-conda\\Library\\include']

@ рдЯреЙрдорд╕рд┐рдиреЛ рдкреНрд░рдЬрдирди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдХреНрдпрд╛ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ рдХрд┐ рд╡реЗ рдЖрдХреГрддрд┐рдпрд╛рдБ рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣реА рд╣реИрдВ?
рдпрд╣ рд╕рдорд╕реНрдпрд╛ VM рдХреЗ рдЕрдВрджрд░ рдЪрд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рдпрджрд┐ рдЖрдкрдХрд╛ рд╕реЗрдЯрдЕрдк рдЕрд▓рдЧ рд╣реИ рддреЛ рдХреГрдкрдпрд╛ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВред

>>> import sys
>>> print(sys.version)
3.6.6 (default, Sep 12 2018, 18:26:19) 
[GCC 8.0.1 20180414 (experimental) [trunk revision 259383]]
>>> import numpy as np
>>> np.__version__
'1.14.2'
>>> np.dot(np.array([[0], [0]]), np.array([0, 0]).conj())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: shapes (2,1) and (2,) not aligned: 1 (dim 1) != 2 (dim 0)

@ рдореИрдордЯрд┐рдк рдЖрд╣, рдореБрдЭреЗ рдзреНрдпрд╛рди рдирд╣реАрдВ рдЖрдпрд╛ рдХрд┐ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рд╡реАрдПрдо рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдирд┐рдореНрди рдкреЛрд╕реНрдЯ рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдерд╛ред рдЕрдиреНрдп рдЙрддреНрддрд░реЛрдВ рдореЗрдВ рд╕реЗ рдХреБрдЫ рдЧреИрд░-рд╡реАрдПрдордПрд╕ рдкрд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВред Np.dot рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдореЗрд░реА рдЧрд▓рддреА, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдбреАрдмрдЧрд░ рд╕реЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ред

>>> import sys
>>> import numpy as np
>>> print(sys.version)
3.6.6 | packaged by conda-forge | (default, Jul 26 2018, 11:48:23) [MSC v.1900 64 bit (AMD64)]
>>> print(np.__version__)
1.14.2
>>> X = np.array([0., 0.])
>>> X_T = np.array([0., 0.])
>>> print(X)
[0. 0.]
>>> print(X_T)
[0. 0.]
>>> print(np.dot(X, X_T.conj()))
Process finished with exit code 2

рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдкрд╛рдпрд╛ рдХрд┐ рдпрд╣ mkl рдХреЗ рдореВрд▓ рдирд┐рд╡рд╛рд╕рд┐рдпреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓реЛрдб рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдФрд░ рдореБрджреНрджрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

@ рдЯреЙрдорд╛рд╕рд┐рдиреЛ рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХреЛрдВрдбрд╛ рд╕реЗ рднреА рдЦрд╛рдВрд╕реА рд╣реБрдИ рдереА?

@ oleksandr-pavlyk: рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?

@ рдЯреЙрдорд╛рд╕рд┐рдиреЛ рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХреЛрдВрдбрд╛ рд╕реЗ рднреА рдЦрд╛рдВрд╕реА рд╣реБрдИ рдереА?

рджреЗрд░ рд╕реЗ рдЬрд╡рд╛рдм, рдЫреБрдЯреНрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВ ... рд╣рд╛рдБ рдореИрдВ рдПрдХ conda numpy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ

> conda list --no-pip | grep numpy
numpy                     1.14.2           py36h5c71026_1

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдмрддрд╛рдпрд╛, рдЬрдм рдореИрдВрдиреЗ mkl ( conda update mkl ) рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рддреЛ рд╕рдорд╕реНрдпрд╛ рджреВрд░ рд╣реЛ рдЧрдИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? @Khemal рдЬрдм рд╕реЗ рдЖрдк linux рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпрд╛ рдЖрдк рдЙрд╕ рдмреЙрдХреНрд╕ рдкрд░ https://gist.github.com/seberg/ce4563f3cb00e33997e4f80675b80953 рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рджреБрд░реНрдШрдЯрдирд╛ рд╣реЛрддреА рд╣реИ? рдпрд╣ рдЖрдкрдХреЛ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмреНрд▓рд╛рд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред

рдЬрдм рддрдХ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рд╕рдВрджрд░реНрдн рдЧрд┐рдирддреА рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдЧрд╛ рдХрд┐ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЛ рднреА рдирд╣реАрдВ рдорд╛рд░реЗрдВрдЧреЗред

рдирдорд╕реНрддреЗред

рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЯреНрд░реЗрд╕рдмреИрдХ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ред

рдЕрдЬрдЧрд░ 3.6.7
рд╕реБрдиреНрди (1.15.4)

(.kfr-test-env) root<strong i="9">@whatever</strong>:/app# gdb python3
(gdb) run testcode.py 
Starting program: /app/.kfr-test-env/bin/python3 testcode.py
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7ffff3c1b700 (LWP 29704)]

Thread 1 "python3" received signal SIGILL, Illegal instruction.
0x00007ffff4a5c204 in dgemm_oncopy_OPTERON_SSE3 () from /app/.kfr-test-env/lib/python3.6/site-packages/numpy/core/../.libs/libopenblasp-r0-8dca6697.3.0.dev.so
(gdb) bt
#0  0x00007ffff4a5c204 in dgemm_oncopy_OPTERON_SSE3 () from /app/.kfr-test-env/lib/python3.6/site-packages/numpy/core/../.libs/libopenblasp-r0-8dca6697.3.0.dev.so
#1  0x00007ffff6520630 in ?? () from /app/.kfr-test-env/lib/python3.6/site-packages/numpy/core/../.libs/libopenblasp-r0-8dca6697.3.0.dev.so
#2  0x00000000000000e0 in ?? ()
#3  0x00007ffff41275db in dgemm_tt () from /app/.kfr-test-env/lib/python3.6/site-packages/numpy/core/../.libs/libopenblasp-r0-8dca6697.3.0.dev.so
#4  0x00007ffff4052088 in cblas_dgemm () from /app/.kfr-test-env/lib/python3.6/site-packages/numpy/core/../.libs/libopenblasp-r0-8dca6697.3.0.dev.so
#5  0x00007ffff676d28f in ?? () from /app/.kfr-test-env/lib/python3.6/site-packages/numpy/core/multiarray.cpython-36m-x86_64-linux-gnu.so
#6  0x00007ffff6732c36 in ?? () from /app/.kfr-test-env/lib/python3.6/site-packages/numpy/core/multiarray.cpython-36m-x86_64-linux-gnu.so
#7  0x00007ffff673400a in ?? () from /app/.kfr-test-env/lib/python3.6/site-packages/numpy/core/multiarray.cpython-36m-x86_64-linux-gnu.so
#8  0x00000000005030d5 in _PyCFunction_FastCallDict (kwargs=<optimized out>, nargs=<optimized out>, args=<optimized out>, 
    func_obj=<built-in method dot of module object at remote 0x7ffff6a535e8>) at ../Objects/methodobject.c:231
#9  _PyCFunction_FastCallKeywords (kwnames=<optimized out>, nargs=<optimized out>, stack=<optimized out>, func=<optimized out>) at ../Objects/methodobject.c:294
#10 call_function.lto_priv () at ../Python/ceval.c:4837
#11 0x0000000000506859 in _PyEval_EvalFrameDefault () at ../Python/ceval.c:3335
#12 0x0000000000504c28 in PyEval_EvalFrameEx (throwflag=0, f=Frame 0xadeb18, for file testcode.py, line 10, in <module> ()) at ../Python/ceval.c:4166
#13 _PyEval_EvalCodeWithName.lto_priv.1761 () at ../Python/ceval.c:4166
#14 0x0000000000506393 in PyEval_EvalCodeEx (closure=0x0, kwdefs=0x0, defcount=0, defs=0x0, kwcount=0, kws=0x0, argcount=0, args=0x0, locals=<optimized out>, 
    globals=<optimized out>, _co=<optimized out>) at ../Python/ceval.c:4187
#15 PyEval_EvalCode (co=<optimized out>, globals=<optimized out>, locals=<optimized out>) at ../Python/ceval.c:731
#16 0x0000000000634d52 in run_mod () at ../Python/pythonrun.c:1025
#17 0x0000000000634e0a in PyRun_FileExFlags () at ../Python/pythonrun.c:978
#18 0x00000000006385c8 in PyRun_SimpleFileExFlags () at ../Python/pythonrun.c:419
#19 0x00000000006387a5 in PyRun_AnyFileExFlags () at ../Python/pythonrun.c:81
#20 0x000000000063915a in run_file (p_cf=0x7fffffffe2fc, filename=<optimized out>, fp=<optimized out>) at ../Modules/main.c:340
#21 Py_Main () at ../Modules/main.c:810
#22 0x00000000004a6f10 in main (argc=2, argv=0x7fffffffe4f8) at ../Programs/python.c:69

@seberg рдЗрд╕ рдЙрддреНрдкрд╛рджрди рд╣реЛрддрд╛ рд╣реИ:

Probing Multiarray
------------------
OpenBLAS:
    num threads: 2
    version info: DYNAMIC_ARCH NO_AFFINITY Opteron MAX_THREADS=64

Probing Linalg
--------------
OpenBLAS:
    num threads: 2
    version info: DYNAMIC_ARCH NO_AFFINITY Opteron MAX_THREADS=64

LDD information:
----------------
running: ldd /app/.kfr-test-env/lib/python3.6/site-packages/numpy/core/multiarray.cpython-36m-x86_64-linux-gnu.so
    linux-vdso.so.1 (0x00007ffe941ef000)
    libopenblasp-r0-8dca6697.3.0.dev.so => /app/.kfr-test-env/lib/python3.6/site-packages/numpy/core/../.libs/libopenblasp-r0-8dca6697.3.0.dev.so (0x00007f9319cea000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f931994c000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f931972d000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f931933c000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f931c800000)
    libgfortran-ed201abd.so.3.0.0 => /app/.kfr-test-env/lib/python3.6/site-packages/numpy/core/../.libs/libgfortran-ed201abd.so.3.0.0 (0x00007f9319042000)
running: ldd /app/.kfr-test-env/lib/python3.6/site-packages/numpy/linalg/_umath_linalg.cpython-36m-x86_64-linux-gnu.so
    linux-vdso.so.1 (0x00007ffda69d5000)
    libopenblasp-r0-8dca6697.3.0.dev.so => /app/.kfr-test-env/lib/python3.6/site-packages/numpy/linalg/../.libs/libopenblasp-r0-8dca6697.3.0.dev.so (0x00007f12097c1000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f12095a2000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f12091b1000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f1208e13000)
    libgfortran-ed201abd.so.3.0.0 => /app/.kfr-test-env/lib/python3.6/site-packages/numpy/linalg/../.libs/libgfortran-ed201abd.so.3.0.0 (0x00007f1208b19000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f120c0ee000)

@ рдПрдордЖрдЯрд┐рдк рдореИрдВрдиреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдЪреАрдЬреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЬрд┐рд╕рдХрд╛ рдЖрдкрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ:

os.environ["OPENBLAS_CORETYPE"] = "nehalem" рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ред

import os
os.environ["OPENBLAS_VERBOSE"] = "2"
os.environ["OPENBLAS_CORETYPE"] = "nehalem"
import numpy as np

A = np.matrix([[1.], [3.]])
B = np.matrix([[2., 3.]])
ret = np.dot(A, B)
print(ret)

@kfrendrich рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рднреА рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдкрд░ рд╣реИрдВ? рдЕрдиреНрдпрдерд╛, рд╢рд╛рдпрдж OpenBLAS рдореЗрдВ рд╕реАрдкреАрдпреВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ? рдпрджрд┐ рдпрд╣ рдПрдХ рдЖрднрд╛рд╕реА рдорд╢реАрди рд╣реИ рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдмрд╕ рдЙрди рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИред

@seberg рд╣рд╛рдБ рдпрд╣ рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╣реИ

рдпрд╣ рдЙрд╕ рддрд░рд╣ рд╕реЗ рдХреБрдЫ рдмрдЧ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ OpenBLAS рд╕реАрдкреАрдпреВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЗрд╕рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореБрдЭреЗ рдЦреБрд▓рд╛ kvm рдореБрджреНрджрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛, рд▓реЗрдХрд┐рди рдХреБрдЫ рдмрдВрдж рд╣реИрдВ

рд╣рд╛рдВ, рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдЬрд▓реНрдж рд╣реА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реВрдВрдЧрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдЕрдм рднреА рдкреНрд░рдЬрдирди рдХрд░рддрд╛ рд╣реИ?

1.17.3 рдЕрдВрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рджреБрд░реНрдШрдЯрдирд╛ред

$ python
>>> import numpy as np
>>> A = np.matrix([[1.0], [3.0]])
>>> B = np.matrix([[2.0, 3.0]])
>>> ret = np.dot(A, B)
Illegal instruction (core dumped)

рд╕рдВрднрд╡рддрдГ рдпрд╣ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдкрдХрдбрд╝рд╛ рдерд╛ - рдкрд╛рдпрдерди рдХреА рдореГрддреНрдпреБ "рдЕрд╡реИрдз рдирд┐рд░реНрджреЗрд╢ (рдХреЛрд░ рдбрдВрдк)" рдХреЗ рд╕рд╛рде рд╣реЛрддреА рд╣реИ рдЬрдм рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ:

import matplotlib.pyplot as plt
fig = plt.figure(figsize=(10,10))

рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкреНрд░рджреВрд╖рдг:

import os
os.environ["OPENBLAS_VERBOSE"] = "2"
os.environ["OPENBLAS_CORETYPE"] = "nehalem"
import numpy as np

рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ :(

рдпрд╣рд╛рдБ рдкреВрд░реА рдХрд╣рд╛рдиреА рдФрд░ рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ:

$ python
Python 3.6.8 (default, Oct  9 2019, 14:04:01)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> import numpy as np
>>> print(sys.version)
3.6.8 (default, Oct  9 2019, 14:04:01)
[GCC 8.3.0]
>>> print(np.__version__)
1.17.3
>>> np.show_config()
blas_mkl_info:
  NOT AVAILABLE
blis_info:
  NOT AVAILABLE
openblas_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/usr/local/lib']
    language = c
    define_macros = [('HAVE_CBLAS', None)]
blas_opt_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/usr/local/lib']
    language = c
    define_macros = [('HAVE_CBLAS', None)]
lapack_mkl_info:
  NOT AVAILABLE
openblas_lapack_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/usr/local/lib']
    language = c
    define_macros = [('HAVE_CBLAS', None)]
lapack_opt_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/usr/local/lib']
    language = c
    define_macros = [('HAVE_CBLAS', None)]

CPU рдЬрд╛рдирдХрд╛рд░реА (рдпрд╣ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╣реИ):

$ cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 85
model name      : Intel Xeon Processor (Skylake)
stepping        : 4
microcode       : 0x1
cpu MHz         : 2199.998
cache size      : 4096 KB
physical id     : 0
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl cpuid tsc_known_freq pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm pti fsgsbase smep erms
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs
bogomips        : 4399.99
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 85
model name      : Intel Xeon Processor (Skylake)
stepping        : 4
microcode       : 0x1
cpu MHz         : 2199.998
cache size      : 4096 KB
physical id     : 1
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 1
initial apicid  : 1
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl cpuid tsc_known_freq pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm pti fsgsbase smep erms
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs
bogomips        : 4399.99
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

processor       : 2
vendor_id       : GenuineIntel
cpu family      : 6
model           : 85
model name      : Intel Xeon Processor (Skylake)
stepping        : 4
microcode       : 0x1
cpu MHz         : 2199.998
cache size      : 4096 KB
physical id     : 2
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 2
initial apicid  : 2
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl cpuid tsc_known_freq pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm pti fsgsbase smep erms
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs
bogomips        : 4399.99
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

processor       : 3
vendor_id       : GenuineIntel
cpu family      : 6
model           : 85
model name      : Intel Xeon Processor (Skylake)
stepping        : 4
microcode       : 0x1
cpu MHz         : 2199.998
cache size      : 4096 KB
physical id     : 3
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 3
initial apicid  : 3
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl cpuid tsc_known_freq pni pclmulqdq ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm pti fsgsbase smep erms
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs
bogomips        : 4399.99
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

@prokulski рдЖрдкрдиреЗ

рдУрдкреЗрдирдмреНрд▓рд╛рд╕ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдХреБрдЫ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ)ред рдореИрдВрдиреЗ рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдФрд░ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ (рдЙрдкрдпреБрдХреНрдд рдЗрдВрд╕реНрдЯреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) - рдорджрдж рдирд╣реАрдВ рдХреА

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рдпрдорд┐рдд рд╕рд░рдгрд┐рдпреЛрдВ ( np.matrix рдмрдЬрд╛рдп) рдХреЗ рд╕рд╛рде рднреА рдХреНрд░реИрд╢ рд╣реЛрддрд╛ рд╣реИ? рдбреАрдмрдЧрд┐рдВрдЧ рд╕реЗ рд╣рдЯрд╛рдП рдЧрдП рдХреЛрдб рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ?

>>> import numpy as np
>>> A = np.array([[1.0], [3.0]])
>>> B = np.array([[2.0, 3.0]])
>>> ret = np.dot(A, B)

рдХреИрд╕рд╛ рд░рд╣реЗрдЧрд╛

>>> import numpy as np
>>> A = np.array([[1.0], [3.0]])
>>> B = np.array([[2.0, 3.0]])
>>> ret = np.matmul(A, B)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рдпрдорд┐рдд рд╕рд░рдгрд┐рдпреЛрдВ ( np.matrix рдмрдЬрд╛рдп) рдХреЗ рд╕рд╛рде рднреА рдХреНрд░реИрд╢ рд╣реЛрддрд╛ рд╣реИ? рдбреАрдмрдЧрд┐рдВрдЧ рд╕реЗ рд╣рдЯрд╛рдП рдЧрдП рдХреЛрдб рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ?

>>> import numpy as np
>>> A = np.array([[1.0], [3.0]])
>>> B = np.array([[2.0, 3.0]])
>>> ret = np.dot(A, B)

"рдЕрд╡реИрдз рдирд┐рд░реНрджреЗрд╢ (рдХреЛрд░ рдбрдВрдк)" рдХреЗ рд╕рд╛рде рдХреНрд░реЗрдЪ

>>> import numpy as np
>>> A = np.array([[1.0], [3.0]])
>>> B = np.array([[2.0, 3.0]])
>>> ret = np.matmul(A, B)

рджреЗрддрд╛ рд╣реИ:

>>> ret
array([[2., 3.],
       [6., 9.]])

@prokulski рдЖрдкрдиреЗ

рдУрдкреЗрдирдмреНрд▓рд╛рд╕ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдХреБрдЫ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ)ред рдореИрдВрдиреЗ рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдФрд░ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ (рдЙрдкрдпреБрдХреНрдд рдЗрдВрд╕реНрдЯреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) - рдорджрдж рдирд╣реАрдВ рдХреА

рдпрд╣ рдЕрднреА рднреА рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред

рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдХрд┐ рдХреИрд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реАрдкреАрдпреВ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИред рдмреЗрд╣рддрд░ рдЙрдиреНрд╣реЗрдВ рд╕реАрдзреЗ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рд╕реБрдкреАрд░рд┐рдпрд░ рдХреЗрд╡рд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ рдореЗрд░рд╛ рдореБрджреНрджрд╛ https://github.com/xianyi/OpenBLAS/issues/2067 рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВред

$ apt list *blas* | grep installed
libblas-dev/bionic,now 3.7.1-4ubuntu1 amd64 [installed,automatic]
libblas3/bionic,now 3.7.1-4ubuntu1 amd64 [installed,automatic]
libgslcblas0/bionic,now 2.4+dfsg-6 amd64 [installed,automatic]

рдореИрдВрдиреЗ рд▓рд┐рдмреЛрдкреЗрдВрдмреНрд▓рд╛рд╕-рджреЗрд╡ рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдЕрдм рдпрд╣ рд╣реИ:

$ apt list *blas* | grep installed
libblas-dev/bionic,now 3.7.1-4ubuntu1 amd64 [installed,automatic]
libblas3/bionic,now 3.7.1-4ubuntu1 amd64 [installed,automatic]
libgslcblas0/bionic,now 2.4+dfsg-6 amd64 [installed,automatic]
libopenblas-base/bionic,now 0.2.20+ds-4 amd64 [installed,automatic]
libopenblas-dev/bionic,now 0.2.20+ds-4 amd64 [installed]

рдЕрдЬрдЧрд░:

$ python
Python 3.6.8 (default, Oct  9 2019, 14:04:01)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> A = np.matrix([[1.0], [3.0]])
>>> B = np.matrix([[2.0, 3.0]])
>>> ret = np.dot(A, B)
Illegal instruction (core dumped)

рдЖрдк рд╣реЛрд╕реНрдЯ рд╕рд┐рд╕реНрдЯрдо рдХреЗ CPU рдореЗрдВ OPENBLAS_CORETYPE рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред PyPI рд╕реЗ pip install рдХреЗ рд╕рд╛рде рдорд┐рд▓рдиреЗ рд╡рд╛рд▓реА рд╕реБрдкреАрд░рд┐рдпрд░ рдореЗрдВ OpenBLAS 0.3.7 рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд┐рдХреНрд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдк pip install рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪреБрдирддреЗ рд╣реИрдВ рдФрд░ рдПрдХ virtualenv рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЕрдкрдиреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЕрдЬрдЧрд░ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП pip install --upgrade --user numpy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред

OpenBLAS рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ OpenBLAS 0.3.5 рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдЧрд╛

    import numpy
    import ctypes

    dll = ctypes.CDLL(numpy.core._multiarray_umath.__file__)
    get_config = dll.openblas_get_config
    get_config.restype=ctypes.c_char_p
    res = get_config()
    print('OpenBLAS get_config returned', str(res))

@ рдЕрдкрдирд╛ рдХреЛрдб "рдУрдкрдирдмреНрд▓рд╛рд╕ get_config b'OpenBLAS 0.3.7 DYNAMIC_ARCH NO_AFFINITY рд╣реИрд╕рд╡реЗрд▓ MAX_THREADS = 64 'рджреЗрддрд╛ рд╣реИ

OPENBLAS_CORETYPE рдХреЛ рд╣реИрд╕рд╡реЗрд▓ (рд▓реЛрдЕрд░рдХреЗрд╕, рдЕрдкрд░реЗрд╕реЗрдЬрд╝, рд╡реНрд╣реЗрдпрд░) рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдХреЛрдИ рдорджрдж рдирд╣реАрдВ рдорд┐рд▓рддреА - рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рднреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЗрд╡реАрдПрдо рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдФрд░ рдЦрд░рд╛рдм рд╕реАрдкреАрдпреВ рдбрд┐рдЯреЗрдХреНрд╢рди рдореЗрдВ рд╣реИред рдЕрдЬреАрдм рдмрд╛рдд рд╣реИ, рдХрд┐ рдХреБрдЫ рджрд┐рди рдкрд╣рд▓реЗ everythink рдареАрдХ рдерд╛ ...

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд╕рд╡реЗрд▓ рдЖрдкрдХреЗ рд▓рд┐рдП рдЧрд▓рдд рдореВрд▓реНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЖрднрд╛рд╕реА рдорд╢реАрди рдХреЗ рдЕрдВрджрд░ рдПрдХ рдмрд╛рд░ рдореЗрдЬрдмрд╛рди рд╕реАрдкреАрдпреВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддреНрд╡рд░рд┐рдд Google рдЦреЛрдЬ рдЕрдЪреНрдЫреЗ рдЙрддреНрддрд░ рдирд╣реАрдВ рджреЗ рд░рд╣реА рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд╕рд╡реЗрд▓ рдЖрдкрдХреЗ рд▓рд┐рдП рдЧрд▓рдд рдореВрд▓реНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЖрднрд╛рд╕реА рдорд╢реАрди рдХреЗ рдЕрдВрджрд░ рдПрдХ рдмрд╛рд░ рдореЗрдЬрдмрд╛рди рд╕реАрдкреАрдпреВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддреНрд╡рд░рд┐рдд Google рдЦреЛрдЬ рдЕрдЪреНрдЫреЗ рдЙрддреНрддрд░ рдирд╣реАрдВ рджреЗ рд░рд╣реА рд╣реИред

рд╣рд╛рдВред Skylake рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ (рдпрджрд┐ рдЖрдк cpuinfo рджреЗрдЦреЗрдВрдЧреЗ), рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдлрдБрд╕ рдЧрдпрд╛ рд╣реВрдБред
https://github.com/numpy/numpy/milestone/69 рдЖрд╢рд╛ рджреЗрддрд╛ рд╣реИ;)

OpenBLAS рдХрд░реНрдиреЗрд▓ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдиреНрд╣реЗрдВ рдЖрдЬрд╝рдорд╛рдПрдВ, рдХреНрдпрд╛ рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

export OPENBLAS_CORETYPE=prescott

рдФрд░ рдбрд╛рдпрдирд┐рдВрдЧрдЯрди, рдкреЗрдирд┐рд░реНрди, рдХреЛрд░ 2, рдиреЗрд╣реЗрд▓рдо, рд╕реИрдВрдбрд┐рдмреНрд░рд┐рдЬ

рд╣рд░ рдХреЛрдИ рдорд░рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдХреЗрд╡реАрдПрдо рд╕реАрдкреАрдпреВ рдкреНрд░рдХрд╛рд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?

рдмрд╕ рдпрд╣ рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреЛрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬреЛрдбрд╝реЗрдВ:

export OPENBLAS_VERBOSE=2
export OPENBLAS_CORETYPE=prescott
python -c 'import numpy as np; A = np.array([[1.0], [3.0]]); B = np.array([[2.0, 3.0]]); print(np.dot(A, B))'

рдореБрдЭреЗ рдорд┐рд▓рд╛:

Core: Prescott
[[2. 3.]
 [6. 9.]]

рд╕рдорд░реНрдерди рдиреЗ рдХрд╣рд╛ рдХрд┐ рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред

рдореИрдВрдиреЗ рднреА рдЦреАрдВрдЪрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдорд╢реАрди рдкрд░ docker image jupyter / tanorflow-рдиреЛрдЯрдмреБрдХ рд╢реБрд░реВ рдХрд░ рджреА рд╣реИ рдФрд░ jupyter рдореЗрдВ рдЪрд▓рд╛рдпрд╛ рдЧрдпрд╛ np.dot () рдЙрджрд╛рд╣рд░рдг рдЙрд╕реА рддрд░рд╣ рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИред рддреЛ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╕рдорд╕реНрдпрд╛ рд╣реИ?

@prokulski рдпрджрд┐ рдЖрдк рдЙрдкрд░реЛрдХреНрдд рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЕрд╡реИрдз рдирд┐рд░реНрджреЗрд╢ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдЙрдЯрдкреБрдЯ Core: Prescott ?

рдЪреВрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ 1.18 рдореАрд▓ рдХреЗ рдкрддреНрдерд░ рд╕реЗ рд╣рдЯрд╛ рд░рд╣рд╛ рд╣реВрдВред

рдореЗрд░реЗ рдкрд╛рд╕ "Core: Presscot" рдФрд░ рдлрд┐рд░ рдореИрдЯреНрд░рд┐рдХреНрд╕ 2x2 рдФрд░ NO рдЕрд╡реИрдз рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВред

"рдирд┐рд░реНрдпрд╛рдд OPENBLAS_CORETYPE = рдкреНрд░реЗрд╕реНрдХреЙрдЯ" рд▓рд╛рдЗрди рдХреЗ рдмрд┐рдирд╛ рдЕрд╡реИрдз рдирд┐рд░реНрджреЗрд╢ рдФрд░ рдХреЛрдИ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдирд╣реАрдВ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ OpenBLAS рдХреЗ рдЕрдВрджрд░ рдЕрдкрдиреЗ CPU рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рджрд┐рдирдЪрд░реНрдпрд╛ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдЖрдкрдХреЗ KVM рджреНрд╡рд╛рд░рд╛ рднреНрд░рдорд┐рдд рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ OpenBLAS рд╕рдорд╕реНрдпрд╛ рдЯреНрд░реИрдХрд░ рдкрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╡реЗ рдХрд╛рдо рдХрд░ рд╕рдХреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ?

рдЖрдк рд╕рдВрднрд╡рддрдГ рдКрдкрд░ рд╕реВрдЪреАрдмрджреНрдз рд╕рднреА рдореБрдЦреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд╛рдЗрдХрд┐рд▓ рдЪрд▓рд╛рдХрд░ рдФрд░ рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдХреЛ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдУрдкрдирдмреНрд▓рд╕ рдХреА рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕