OpenBLAS为单个例程设置线程数

3
在 C++17 中,我想使用几个 OpenBLAS 子程序,并为每个子程序使用不同数量的线程。有什么办法可以实现这一点吗?
过去,我曾经使用 openblas_set_num_threads() 函数来设置我的 OpenBLAS 子程序所使用的线程数。虽然这个方法可行,但它会将全局的 OpenBLAS 线程数设置为一个值,这样每个子程序在并行运行时都会使用相同数量的线程。因此,我只能为所有的 OpenBLAS 子程序使用相同数量的线程让它们并行运行。

我正在处理一个类似的问题,你有什么想法吗?我现在正在考虑使用多个进程并为它们创建共享内存,用于存储矩阵。 - Y00
1
发布之后我再也没有深入研究过这个问题,但一个想法是将子程序分离到不同的文件中,每个文件可以输入数据(矩阵信息)使用BLAS例程,然后将其传递到另一个文件中。 - gkroiz
1个回答

1
没有办法!!到目前为止似乎是不可能的。根据他们的user manual

如果您的应用程序已经是多线程的,它将与OpenBLAS的多线程冲突。

实际上,这个功能对于大多数想要使用BLAS的多线程库来说是必不可少的。
一个简单的选择是使用MKL代替OpenBLAS,并使用他们的mkl_set_num_threads_local,可以很好地协调,开发人员对线程有很好的控制。看这里
更困难的选择是调用单线程的OpenBLAS,并自己实现多线程。这可以在OpenBLAS和MKL中使用,但是如果您不知道自己在做什么,这将是繁琐的,而且可能会失去性能。
对于这个问题,无论您使用C++17、C++11、任何其他C++或C的版本,都没有区别。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接