C++ tbb:任务调度程序初始化自定义分配器?

C++ tbb:任务调度程序初始化自定义分配器?,c++,multithreading,parallel-processing,intel,tbb,C++,Multithreading,Parallel Processing,Intel,Tbb,所以我试着对每一个都使用parallel。。 我有代码,我做: Source s;.. parallel_for_each(begin(_allocs), end(_allocs), [&s] (Allocs_t::value_type allocation) { // cool stuff with allocation } 这很有效,而且效果很好。然而,我在许多帖子中看到,在调度任务之前,我应该调用tbb:task\u scheduler\u init 问题是我重写了mallo

所以我试着对每一个都使用parallel。。 我有代码,我做:

Source s;..
parallel_for_each(begin(_allocs), end(_allocs), [&s] (Allocs_t::value_type allocation) {
  // cool stuff with allocation
}
这很有效,而且效果很好。然而,我在许多帖子中看到,在调度任务之前,我应该调用tbb:task\u scheduler\u init

问题是我重写了malloc和calloc,并且我不能使用init调用malloc和calloc(它是这样做的…) 因此,问题是:

  • 为什么它工作得很好?它工作得好吗
  • 有没有一种方法可以为英特尔的所有用途提供一个特定的分配器

  • 感谢实例化
    tbb:task\u scheduler\u init
    对象是可选的。TBB具有延迟自动初始化机制,它在第一次调用TBB算法/调度程序时构造所有内容。自动初始化相当于在第一次调用TBB之前构造一个全局任务调度程序初始化对象

    当然,如果需要覆盖默认的线程数,指定TBB应该初始化的范围,或者指定工作线程的堆栈大小,那么显式初始化是不可避免的

    TBB调度程序使用它自己的可伸缩分配器(tbbmalloc.dll,libtbbmalloc.so..),如果在TBB二进制文件附近找到,或者在其他情况下使用malloc。无法显式指定调度器要使用的任何其他分配器(与具有相应模板参数的TBB容器不同)

    综上所述,我认为您有两个[可组合]选项:

  • 确保TBB调度程序使用它自己的分配器,这样您就不必担心将malloc正确替换为TBB
  • 或/和,确保在malloc/free处于一致状态的点(范围)处创建并销毁唯一的task_scheduler_init

  • tbb:task\u scheduler\u init
    对象的实例化是可选的。TBB具有延迟自动初始化机制,它在第一次调用TBB算法/调度程序时构造所有内容。自动初始化相当于在第一次调用TBB之前构造一个全局任务调度程序初始化对象

    当然,如果需要覆盖默认的线程数,指定TBB应该初始化的范围,或者指定工作线程的堆栈大小,那么显式初始化是不可避免的

    TBB调度程序使用它自己的可伸缩分配器(tbbmalloc.dll,libtbbmalloc.so..),如果在TBB二进制文件附近找到,或者在其他情况下使用malloc。无法显式指定调度器要使用的任何其他分配器(与具有相应模板参数的TBB容器不同)

    综上所述,我认为您有两个[可组合]选项:

  • 确保TBB调度程序使用它自己的分配器,这样您就不必担心将malloc正确替换为TBB
  • 或/和,确保在malloc/free处于一致状态的点(范围)处创建并销毁唯一的task_scheduler_init