所以我试图为每个使用并行... 我的代码在哪里:
Source s;..
parallel_for_each(begin(_allocs), end(_allocs), [&s] (Allocs_t::value_type allocation) {
// cool stuff with allocation
}
这很有效,效果很好。但是,我在很多帖子中都看到过我应该在调度任务之前调用tbb:task_scheduler_init。
问题是我覆盖了malloc和calloc,我不能使用init调用malloc和calloc(它可以...) 所以问题是:
由于
答案 0 :(得分:4)
tbb:task_scheduler_init
对象的实例化是可选的。 TBB具有惰性自动初始化机制,它在第一次调用TBB算法/调度程序时构造所有内容。自动初始化等同于在第一次调用TBB之前构建全局task_scheduler_init对象。
当然,如果您需要覆盖默认的线程数,请指定TBB应该初始化的范围,或者指定工作组的堆栈大小,显式初始化是不可避免的。
TBB调度程序使用其自己的可伸缩分配器(tbbmalloc.dll,libtbbmalloc.so ..),如果在tbb二进制文件附近找到它,否则它将回退到使用malloc。没有办法显式指定调度程序使用的任何其他分配器(与具有相应模板参数的TBB容器不同)。
考虑到上述所有情况,我认为你有两个[可组合]选项: