我有一个场景,其中一些功能需要尽快完成,并以牺牲其他任务为代价给予计算资源(即它们是高优先级的)。具体而言,图形渲染以及为渲染生成的任何任务应尽可能快地运行,但不会消耗完整的CPU容量。同时,我想用其他不是时间关键的工作来填充CPU的空循环,并确保不要从渲染任务中窃取循环。
基本思路相当简单,但我无法弄清楚如何通过PPL做我想做的事。我已经找到了如何将默认调度程序设置为不同的优先级,但我不想全局更改优先级。相反,我希望有两个不同的调度策略,我可以随时添加任务。
理想的情况是,如果我可以创建两个具有不同优先级的task_group实例,并根据需要向相关组添加任务,但我不知道如何做到这一点。我链接了我找到的最相关的文档,它做了我想要的,但是使用代理的方式使我不确定如何只添加任务的简单操作。如果我可以使用PPL中的基本功能,我也不会添加代理和消息传递的复杂性。
https://msdn.microsoft.com/en-us/library/dd984038.aspx
同样重要的是,我可以确保从线程生成的任何子任务继承父级的优先级。具体来说,我从高优先级和低优先级任务中调用parallel_for,并且parallel_for块应保持相同的优先级。
答案 0 :(得分:0)
任务构造函数(和create_task函数)可以使用自定义调度程序获取task_options参数。