Как вы * получаете * количество потоков для операций BLAS в Julia?

библиотека blas Джулии имеет функцию set_num_threads() который устанавливает потоки для операций BLAS.

Как get количество потоков, используемых по умолчанию или в настоящее время?

2 ответов


Если у вас есть Джулия, связанная с OpenBLAS, что было бы в случае, если вы используете двоичные файлы Windows, Mac или generic Linux из julialang.org, или если вы строите из источника и не устанавливаете USE_SYSTEM_BLAS=1, затем вы получаете количество потоков, используемых OpenBLAS, вызывая ccall((:openblas_get_num_threads64_, Base.libblas_name), Cint, ()). В конце концов, мы, вероятно, предоставим это как функцию Джулии.


Module BLAS Джулия Base является оболочкой библиотеки blas, которая может быть openblas, mkl etc.

по умолчанию OpenBLAS использует один поток для небольших матриц и Multi-резьбы вы устанавливаете переменные среды для больших матриц.

установить количество потоков с переменными среды.

примеры:

экспорт OPENBLAS_NUM_THREADS=4 или

экспорт GOTO_NUM_THREADS=4 или

экспорт OMP_NUM_THREADS=4 Приоритетами являются OPENBLAS_NUM_THREADS > GOTO_NUM_THREADS > OMP_NUM_THREADS.

если вы компилируете этот lib с USE_OPENMP=1, Вы должны установить OMP_NUM_THREADS >переменную среды. OpenBLAS игнорирует OPENBLAS_NUM_THREADS и >GOTO_NUM_THREADS с USE_OPENMP=1.

MKL может автоматически настраивать количество потоков для разных размеров матриц.


Вы можете использовать глобальный const дикт переменной ENV в Julia, чтобы получить переменные среды. Но количество потоков, которые вы используете, будет отличаться, когда вы установите его во время выполнения или установите его больше, чем ядра, доступные на вашем компьютере.

если вы используете Яблоко, предоставленное BLAS в vecLi, вы можете через ENV["VECLIB_MAXIMUM_THREADS"] чтобы получить количество потоков, которые вы используете, установите ли вы Количество потоков с переменными среды или установите его во время выполнения.