设置 PPL 线程组的优先级

Set priority of PPL thread groups

我有一个场景,其中某些功能需要尽快完成并以其他任务为代价获得计算资源(即它们是高优先级)。具体来说,图形渲染以及为渲染而产生的任何任务都应该 运行 尽快,但不要消耗全部 CPU 容量。同时,我想用其他对时间要求不高的工作来填补 CPU 的空周期,并确保不要从渲染任务中窃取周期。

基本思路很简单,但我不知道如何通过 PPL 做我想做的事。我已经找到如何将默认调度程序设置为不同的优先级,但我不想全局更改优先级。相反,我想要两个不同的调度策略,我可以随时向其添加任务。

理想情况是我可以创建两个具有不同优先级的 task_group 实例并根据需要将任务添加到相关组,但我不知道该怎么做。我链接了我找到的最相关的文档,它可以满足我的要求,但使用代理的方式让我不确定如何执行仅添加任务的简单操作。如果我可以使用 PPL 中的基本设施,我也宁愿不增加代理和消息传递的复杂性。

https://msdn.microsoft.com/en-us/library/dd984038.aspx

同样重要的是,我可以确保从线程派生的任何子任务都继承父线程的优先级。具体来说,我从高优先级任务和低优先级任务中调用 parallel_for 并且 parallel_for 块应该保持相同的优先级。

任务构造函数(和 create_task 函数)可以使用自定义调度程序采用 task_options 参数。

https://msdn.microsoft.com/en-us/library/dn237306.aspx