VC ++ PPL,将调度程序分配给task_group

时间:2012-10-29 03:12:32

标签: task scheduler ppl

假装我们有一个班级:

class Foo
{
private:
 Concurrency::task_group _tasks;  
};

如何为此task_group分配调度程序?我不想使用默认调度程序,因为我还在代码中的其他位置使用parallel_for。

task_group将通过调度程序设置maxconcurrency级别,以使用所有核心或其中一部分核心,具体取决于小时。应用程序可能会运行数小时,因此需要更改maxconcurrency。

我找不到在PPL中这样做的好方法。在.NET中,这非常简单 - 您只需设置MaxDegreeOfParallelism。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

有几种解决方案:

  1. 如果使用MSVS C ++ 2012而不是:

    _tasks.run([]()
    {
        Context::Oversubscribe(true);
        //
        // long time running task
        //
       Context::Oversubscribe(false);
    });
    
  2. 如果您的APP在Win7x64或Windows Server 2008 R2上运行而不是尝试UMS

    Scheduler::SetDefaultSchedulerPolicy( SchedulerPolicy(1, SchedulerKind, UmsThreadDefault) );
    
  3. 最后。使用新的超额订阅政策(扩大MaxConcurrency)创建新的电流投资者,以创造新的繁重时间任务。

    CurrentScheduler::Create( SchedulerPolicy(1, MaxConcurrency, 8) );
    _tasks.run([](){
        //
        // long time running task
        //
     });
    CurrentScheduler::Detach();