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