производительность NumPy с различными реализациями BLAS

Я использую алгоритм, который реализован на Python и использует NumPy. Наиболее вычислительно дорогая часть алгоритма включает в себярешение множества линейных систем (то есть звонок вnumpy.linalg.solve(), Я придумал этот небольшой тест:

import numpy as np
import time

# Create two large random matrices
a = np.random.randn(5000, 5000)
b = np.random.randn(5000, 5000)

t1 = time.time()
# That's the expensive call:
np.linalg.solve(a, b)
print time.time() - t1

Я запускаю это на:

Мой ноутбук, MacBook Pro 15 "в конце 2013 года с 4 ядрами с частотой 2 ГГц (sysctl -n machdep.cpu.brand_string дает мнеПроцессор Intel (R) Core (TM) i7-4750HQ с частотой 2,00 ГГц)Amazon EC2c3.xlarge Например, с 4 виртуальными ЦП. Amazon рекламирует их как «Высокочастотные процессоры Intel Xeon E5-2680 v2 (Ivy Bridge)»

Нижняя линия:

На Mac он работает в~ 4,5 секундыНа экземпляре EC2 он работает в~ 19,5 секунд

Я пробовал это также на других установках OpenBLAS / Intel MKL, и время выполнения всегда сопоставимо с тем, что я получаю на экземпляре EC2 (по модулю конфигурации оборудования).

Кто-нибудь может объяснить, почему производительность на Mac (с Accelerate Framework) в 4 раза выше? Более подробная информация о настройке NumPy / BLAS в каждом приведена ниже.

Настройка ноутбука

numpy.show_config() дает мне:

atlas_threads_info:
  NOT AVAILABLE
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)]
atlas_blas_threads_info:
  NOT AVAILABLE
openblas_info:
  NOT AVAILABLE
lapack_opt_info:
    extra_link_args = ['-Wl,-framework', '-Wl,Accelerate']
    extra_compile_args = ['-msse3']
    define_macros = [('NO_ATLAS_INFO', 3)]
atlas_info:
  NOT AVAILABLE
lapack_mkl_info:
  NOT AVAILABLE
blas_mkl_info:
  NOT AVAILABLE
atlas_blas_info:
  NOT AVAILABLE
mkl_info:
  NOT AVAILABLE
Настройка экземпляра EC2:

На Ubuntu 14.04 я установил OpenBLAS с

sudo apt-get install libopenblas-base libopenblas-dev

При установке NumPy я создалsite.cfg со следующим содержанием:

[default]
library_dirs= /usr/lib/openblas-base

[atlas]
atlas_libs = openblas

numpy.show_config() дает мне:

atlas_threads_info:
    libraries = ['lapack', 'openblas']
    library_dirs = ['/usr/lib']
    define_macros = [('ATLAS_INFO', '"\\"None\\""')]
    language = f77
    include_dirs = ['/usr/include/atlas']
blas_opt_info:
    libraries = ['openblas']
    library_dirs = ['/usr/lib']
    language = f77
openblas_info:
    libraries = ['openblas']
    library_dirs = ['/usr/lib']
    language = f77
lapack_opt_info:
    libraries = ['lapack', 'openblas']
    library_dirs = ['/usr/lib']
    define_macros = [('ATLAS_INFO', '"\\"None\\""')]
    language = f77
    include_dirs = ['/usr/include/atlas']
openblas_lapack_info:
  NOT AVAILABLE
lapack_mkl_info:
  NOT AVAILABLE
blas_mkl_info:
  NOT AVAILABLE
mkl_info:
  NOT AVAILABLE

Ответы на вопрос(1)

Ваш ответ на вопрос