Я пишу код OpenMP, вызывающий разные ядра BLAS, в основном DGEMM разных размеров, в разных потоках. Чтобы максимизировать производительность, я хочу контролировать количество потоков, которые я вызываю для каждого BLAS. Кажется, что это очень очевидная основная потребность, хотя это очень трудно сделать.
В OpenBLAS есть функция openblas_set_num_threads(int n)
, в файле README кода OpenBLAS описано, что
Они используются только один раз при инициализации библиотеки и недоступны для точной настройки номеров потоков в отдельных вызовах BLAS.
Так что я не могу использовать эту функцию в OpenBLAS.
В MKL есть функция mkl_set_num_threads_local(int nt)
, которая кажется ответом на мой вопрос, когда я использую MKL.
Есть ли способ настроить количество потоков для каждого вызова BLAS независимо от используемой библиотеки? (идеальный выбор) Если нет, то только ли MKL позволяет мне настраивать количество потоков?