Numpy на многоядерном оборудовании - PullRequest
16 голосов
/ 13 мая 2011

Каково современное состояние в отношении получения numpy для использования многослойных ядер (на аппаратном обеспечении Intel) для таких вещей, как внутренние и внешние векторные продукты, векторно-матричные умножения и т. Д.?

Я радперестройте numpy при необходимости, но на данный момент я ищу способы ускорить процесс без изменения моего кода.

Для справки, мой show_config() выглядит следующим образом, и я никогда не наблюдал numpy использовать более одного ядра:

atlas_threads_info:
    libraries = ['lapack', 'ptf77blas', 'ptcblas', 'atlas']
    library_dirs = ['/usr/local/atlas-3.9.16/lib']
    language = f77
    include_dirs = ['/usr/local/atlas-3.9.16/include']

blas_opt_info:
    libraries = ['ptf77blas', 'ptcblas', 'atlas']
    library_dirs = ['/usr/local/atlas-3.9.16/lib']
    define_macros = [('ATLAS_INFO', '"\\"3.9.16\\""')]
    language = c
    include_dirs = ['/usr/local/atlas-3.9.16/include']

atlas_blas_threads_info:
    libraries = ['ptf77blas', 'ptcblas', 'atlas']
    library_dirs = ['/usr/local/atlas-3.9.16/lib']
    language = c
    include_dirs = ['/usr/local/atlas-3.9.16/include']

lapack_opt_info:
    libraries = ['lapack', 'ptf77blas', 'ptcblas', 'atlas']
    library_dirs = ['/usr/local/atlas-3.9.16/lib']
    define_macros = [('ATLAS_INFO', '"\\"3.9.16\\""')]
    language = f77
    include_dirs = ['/usr/local/atlas-3.9.16/include']

lapack_mkl_info:
  NOT AVAILABLE

blas_mkl_info:
  NOT AVAILABLE

mkl_info:
  NOT AVAILABLE

1 Ответ

7 голосов
/ 13 мая 2011

Вы, вероятно, должны начать с проверки, была ли сборка Atlas, используемая numpy, построена с многопоточностью. Вы можете создать и запустить его для проверки конфигурации Atlas (прямо из FAQ по Atlas):

main()
/*
 * Compile, link and run with something like:
 *    gcc -o xprint_buildinfo -L[ATLAS lib dir] -latlas ; ./xprint_buildinfo
 * if link fails, you are using ATLAS version older than 3.3.6.
 */
{
   void ATL_buildinfo(void);
   ATL_buildinfo();
   exit(0);
}

Если у вас нет многопоточной версии Atlas: «есть ваша проблема». Если он многопоточный, то вам нужно выполнить одну из многопоточных подпрограмм BLAS3 (вероятно, dgemm) с достаточно большим матрично-матричным продуктом и посмотреть, используется ли многопоточность. Я думаю, что я прав, говоря, что ни подпрограммы BLAS 2, ни BLAS 1 в Atlas не поддерживают многопоточность (и на то есть веские причины, потому что нет никакого выигрыша в производительности, за исключением действительно огромных размеров задач).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...