OpenBLAS仅为一个例程设置了线程数

时间:2019-07-11 15:55:35

标签: c++ openblas

在C ++ 17中,我想使用几个带有不同线程数的OpenBLAS子例程。反正有做到这一点吗?

过去,我使用过openblas_set_num_threads();。 设置我的OpenBLAS子例程的线程数。在此过程中,它将全局设置openblas num线程,从而防止每个子例程在并行运行时使用不同数量的线程。因此,我为所有OpenBLAS子例程使用相同数量的线程,以便它们可以并行运行。

1 个答案:

答案 0 :(得分:1)

没门!!到目前为止似乎是不可能的。 基于他们的user manual

<块引用>

如果你的应用程序已经是多线程的,它会与 OpenBLAS 多线程

实际上,这个特性对于大多数想要使用 BLAS 的多线程库来说是必不可少的。

一个简单的选择是使用 MKL 而不是 OpenBLAS 并使用他们的 ?-split(' ', X, [[p,r,o,l,o,g],[i,s],[g,o,o,d]]), write_canonical(X). [p,r,o,l,o,g,' ',i,s,' ',g,o,o,d] X = [p, r, o, l, o, g, ' ', i, s|...] 可以很好地发挥作用,并且开发人员可以很好地控制线程。 Look here

更难的选择是调用单线程 OpenBLAS,然后您自己实现多线程。这可以与 OpenBLAS 和 MKL 一起使用,但它很麻烦,如果您不知道自己在做什么,您可能会失去性能。

对于这个问题,如果您使用 C++17、C++11、C++ 或 C 的任何其他风格,则没有区别。