假装我们有一个班级:
class Foo
{
private:
Concurrency::task_group _tasks;
};
如何为此task_group分配调度程序?我不想使用默认调度程序,因为我还在代码中的其他位置使用parallel_for。
task_group将通过调度程序设置maxconcurrency级别,以使用所有核心或其中一部分核心,具体取决于小时。应用程序可能会运行数小时,因此需要更改maxconcurrency。
我找不到在PPL中这样做的好方法。在.NET中,这非常简单 - 您只需设置MaxDegreeOfParallelism。
有什么想法吗?
答案 0 :(得分:2)
有几种解决方案:
如果使用MSVS C ++ 2012而不是:
_tasks.run([]()
{
Context::Oversubscribe(true);
//
// long time running task
//
Context::Oversubscribe(false);
});
如果您的APP在Win7x64或Windows Server 2008 R2上运行而不是尝试UMS:
Scheduler::SetDefaultSchedulerPolicy( SchedulerPolicy(1, SchedulerKind, UmsThreadDefault) );
最后。使用新的超额订阅政策(扩大MaxConcurrency)创建新的电流投资者,以创造新的繁重时间任务。
CurrentScheduler::Create( SchedulerPolicy(1, MaxConcurrency, 8) );
_tasks.run([](){
//
// long time running task
//
});
CurrentScheduler::Detach();