是否可以使用C++ API或任何解决方案设置OMP_WAIT_POLICY/GOMP_SPINCOUNT环境变量,以避免OpenMP默认设置的高CPU问题?

sqserrrh  于 2023-05-28  发布在  Go
关注(0)|答案(1)|浏览(117)

我试图通过Visual Studio 2019在应用程序中启用OpenMP支持,但最终出现了以下代码的高CPU问题:

omp_set_dynamic(0);
omp_set_num_threads(omp_get_max_threads());
#pragma omp parallel for
//CPU intensive operation

我可以通过将系统环境变量OMP_WAIT_POLICY设置为PASSIVE或将GOMP_SPINCOUNT设置为0来解决这个高CPU问题。
但是,这里的请求是在运行时使用类似omp_set_wait_policy("passive")的东西设置这个变量。就我所阅读的OpenMP文档而言,我没有看到任何这样的运行时API可用。
是否有其他解决方案来避免此问题?

c0vxltue

c0vxltue1#

可以在调用OpenMP库之前立即从C代码设置环境变量,也可以使用Visual Studio中的POSIX putenv函数existing
例如,在main()函数的开头设置它:

#include <cstdlib>

int main()
{
    putenv( "OMP_WAIT_POLICY=PASSIVE" );
    ...

相关问题