在C ++ 17中,我想使用几个带有不同线程数的OpenBLAS子例程。反正有做到这一点吗?
过去,我使用过openblas_set_num_threads();。 设置我的OpenBLAS子例程的线程数。在此过程中,它将全局设置openblas num线程,从而防止每个子例程在并行运行时使用不同数量的线程。因此,我为所有OpenBLAS子例程使用相同数量的线程,以便它们可以并行运行。
答案 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 的任何其他风格,则没有区别。