我一直在将一些代码从OpenMP转换为PPL。将使用#pragma omp parallel
的循环转换为使用concurrency::parallel_for()
很容易。
但是有一个折衷:我转换的SDK假设是OpenMP模型,该模型可以随意调用omp_set_num_threads()
,然后影响后续的并行操作。因此,我正在尝试使用户能够使用PPL执行相同的操作。似乎并不那么简单。
如果我正确地阅读了concurrency docs,那么一旦创建了任何PPL Scheduler
对象,我就不能只更改最大线程数。相反,我必须做很多工作。像这样:
我读对了吗?还是在创建默认调度程序后,有一些更简单的方法来动态设置PPL使用的并行线程数?
(我个人希望完全消除这种情况,而不是让我的客户选择线程数,但目前我需要研究实现这一点)