desempenho do NumPy com diferentes implementações BLAS

Estou executando um algoritmo que é implementado em Python e usa o NumPy. A parte mais computacionalmente cara do algoritmo envolveresolvendo um conjunto de sistemas lineares (ou seja, uma chamada paranumpy.linalg.solve(). Eu vim com esta pequena referência:

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

Eu tenho executado isso em:

Meu laptop, um MacBook Pro 15 "de final de 2013 com 4 núcleos a 2GHz (sysctl -n machdep.cpu.brand_string me dáCPU Intel (R) Core (TM) i7-4750HQ a 2.00GHz)Um Amazon EC2c3.xlarge instância, com 4 vCPUs. A Amazon os anuncia como "Processadores Intel Xeon E5-2680 v2 (Ivy Bridge) de alta frequência"

Bottom line:

No Mac, ele roda em~ 4.5 segundosNa instância do EC2, ele é executado em~ 19,5 segundos

Eu tentei também em outras configurações baseadas no OpenBLAS / Intel MKL, e o tempo de execução é sempre comparável ao que recebo na instância do EC2 (módulo de configuração de hardware)

Alguém pode explicar por que o desempenho no Mac (com o Accelerate Framework) é> 4x melhor? Mais detalhes sobre a configuração do NumPy / BLAS em cada um são fornecidos abaixo.

Configuração do laptop

numpy.show_config() me dá:

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
Configuração da instância do EC2:

No Ubuntu 14.04, instalei o OpenBLAS com

sudo apt-get install libopenblas-base libopenblas-dev

Ao instalar o NumPy, criei umsite.cfg com o seguinte conteúdo:

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

[atlas]
atlas_libs = openblas

numpy.show_config() me dá:

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

questionAnswers(1)

yourAnswerToTheQuestion