首页 > 解决方案 > 如何更好地控制 CPU 上每个 BLAS 内核调用使用的线程数?

问题描述

我正在编写一个 OpenMP 代码,在不同的线程中调用不同的 BLAS 内核,主要是具有不同大小的 DGEMM。为了最大限度地提高性能,我想控制我为每个 BLAS 调用的线程数。虽然很难做到,但似乎这是一个非常明显的基本需求。

OpenBLAS 有一个功能openblas_set_num_threads(int n),在 OpenBLAS 代码的 README 文件中是这样描述的

这些仅在库初始化时使用一次,不可用于微调单个 BLAS 调用中的线程数。

所以我想我不能在 OpenBLAS 中使用这个功能。

MKL 有一个功能mkl_set_num_threads_local(int nt),当我使用 MKL 时,它似乎就是我的问题的答案。

无论我使用什么库,有没有办法能够调整每个 BLAS 调用的线程数?(理想的选择)如果不是,是不是只有 MKL 可以让我调整线程数?

标签: multithreadingopenmpintel-mklopenblas

解决方案


推荐阅读