Подтвердить что ты не робот

Numpy на многоядерном оборудовании

Что из уровня техники в отношении получения numpy использования mutliple ядер (на оборудовании 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
4b9b3361

Ответ 1

Вероятно, вам стоит начать с проверки того, была ли построена Atlas, использующая numpy, с многопоточным потоком. Вы можете создать и запустить это, чтобы проверить конфигурацию Atlas (прямо из часто задаваемых вопросов 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 не поддерживают многопоточность (и не без оснований, потому что нет преимуществ по производительности, кроме поистине огромных размеров проблем).