PPL相当于OpenMP的omp_set_num_threads()

时间:2019-07-25 13:32:36

标签: concurrency openmp ppl

我一直在将一些代码从OpenMP转换为PPL。将使用#pragma omp parallel的循环转换为使用concurrency::parallel_for()很容易。  但是有一个折衷:我转换的SDK假设是OpenMP模型,该模型可以随意调用omp_set_num_threads(),然后影响后续的并行操作。因此,我正在尝试使用户能够使用PPL执行相同的操作。似乎并不那么简单。

如果我正确地阅读了concurrency docs,那么一旦创建了任何PPL Scheduler对象,我就不能只更改最大线程数。相反,我必须做很多工作。像这样:

  1. 使用适当的策略创建新的调度程序对象
  2. 创建并注册一个自动重置的“关机”事件,以使其随之发生。
  3. 将该事件存储在以后的某个地方。
  4. 将新的调度程序设为默认调度程序
  5. 如果以前有一个调度程序,则必须等待 “关机”事件发出信号。
  6. 当客户端使用完我的SDK后,我必须查看是否有自定义 调度程序正在使用中,并在某个事件中表面上等待该事件 我的SDK缺少全局Shutdown()函数

我读对了吗?还是在创建默认调度程序后,有一些更简单的方法来动态设置PPL使用的并行线程数?

(我个人希望完全消除这种情况,而不是让我的客户选择线程数,但目前我需要研究实现这一点)

0 个答案:

没有答案