gpt4 book ai didi

c++ - 为外部 DLL 设置 OMP 线程数

转载 作者:太空宇宙 更新时间:2023-11-04 12:37:03 24 4
gpt4 key购买 nike

我们在内部使用 OpenMP 的过程中导入了第三方动态库。我们希望将此 DLL 的并行线程数限制为一个,并且不影响 DLL 之外的其他潜在 OMP 代码。根据Intel documentation ,它有两种方式:

  1. 设置 OMP_NUM_THREADS 环境变量。
  2. 在运行时调用 omp_set_num_threads()。

第一种方式显然会影响我流程中的所有内容。虽然我不确定第二种方式是否会影响对受限 DLL 的 OMP 设置?文档中没有明确说明。

最佳答案

OpenMP 的通常优先规则是在 OpenMP 运行时启动时和创建第一个线程之前评估 OMP_NUM_THREADSomp_set_num_threads() 的效果取决于调用它的位置。

如果调用是从顺序区域进行的,那么它会影响要遇到的下一个并行区域(除非该区域使用 num_threads 子句设置不同的数字).如果调用是从并行区域内进行的,则效果仅适用于线程调用,并将影响该线程遇到的嵌套并行区域(同样没有 num_threads 子句用于该区域加上 OMP_NESTED=true).

因此,如果您想避免调用的 DLL 函数的并行性,则必须在每次调用 DLL 函数之前调用 omp_set_num_threads(1) 并在调用返回后恢复之前的值。

关于c++ - 为外部 DLL 设置 OMP 线程数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55978331/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com