首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PPL:线程池的初始化

PPL:线程池的初始化
EN

Stack Overflow用户
提问于 2013-08-08 11:40:16
回答 1查看 2K关注 0票数 1

是否有任何标准的方法预先初始化PPL线程池?问题是:当执行parallel_for()时,PPL在运行时创建它的线程池。在第一次运行期间,由于创建了额外的线程,这需要一些性能。

为了澄清这一问题,以下是一个例子:

代码语言:javascript
复制
#pragma once

#include <vector>
#include <ppl.h>

using namespace std;
using namespace Concurrency;

// Use this define for experiments.
#define PPL_INIT_METHOD 2

int main()
{
#if (PPL_INIT_METHOD == 0)    // experiment 1: initialize default scheduler

  CurrentScheduler::Create(SchedulerPolicy());
  // After this call only one additional thread is created

#elif (PPL_INIT_METHOD == 1)  // experiment 2: initialize custom scheduler

  SchedulerPolicy my_policy(3,
                            MinConcurrency, 12,
                            MaxConcurrency, 12,
                            ContextPriority, THREAD_PRIORITY_NORMAL);
  Scheduler* my_scheduler = Scheduler::Create(my_policy);
  // After this call only one additional thread is created
  my_scheduler->Attach();
  assert(my_scheduler->GetNumberOfVirtualProcessors() == 12);
  // Still same number of threads (= 2)

  // cleanup stuff ...

#else      // experiment 3: execute dummy parallel_for()

  std::vector<int> v(1024*1024, 42);
  parallel_for(0u, v.size(), [&v](size_t i) { v[i] += 1; }, static_partitioner());
  // After this call all 12 threads are created and ready for more work!

#endif

  // Do real work now!!!

  return 0;
}
EN

回答 1

Stack Overflow用户

发布于 2013-08-08 14:08:48

您可以通过调用并发性::调度程序::Create在conrt.h中初始化ppl线程池。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18125072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档