tbb:task_scheduler_init自定义分配器
tbb:task_scheduler_init custom allocator?
所以我尝试对每个使用并行。。我在哪里有代码:
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(它确实这样做了..)所以问题是:
- 为什么它运行良好?它工作得好吗
- 有没有一种方法可以为英特尔的所有目的提供一个特定的分配器
感谢
tbb:task_scheduler_init
对象的实例化是可选的。TBB具有惰性自动初始化机制,该机制在对TBB算法/调度器的第一次调用时构造所有内容。自动初始化相当于在第一次调用TBB之前构造一个全局task_scheduler_init对象。
当然,如果您需要覆盖默认的线程数,指定TBB应该初始化的范围,或者指定工作线程的堆栈大小,那么显式初始化是不可避免的。
如果在TBB二进制文件附近找到TBB调度程序,则它使用自己的可扩展分配器(tbbmalloc.dll,libtbbmallocso..),或者在其他情况下使用malloc。没有办法显式指定调度程序要使用的任何其他分配器(与具有相应模板参数的TBB容器不同)。
考虑到以上所有内容,我认为您有两个[可组合]选项:
- 确保TBB调度程序使用自己的分配器,这样您就不必担心TBB的malloc的正确替换
- 或者/和,确保在malloc/free处于一致状态的点(范围)创建和销毁唯一的task_scheduler_init
相关文章:
- C++17 - 使用自定义分配器的节点提取/重新插入 - 适用于 clang++/libc++,但不适用于 libstd
- C++自定义分配器大小参数作为模板参数会引发编译器错误
- c++ 中的自定义分配器,用于不调用secure_string实现
- 我可以对 std::array 使用自定义分配器来获取安全加密密钥吗?
- shared_ptr的删除程序是否存储在自定义分配器分配的内存中?
- 自定义分配器,包括放置新案例
- 对 std::regex_match 使用自定义分配器
- 为什么我的代码不适用于自定义分配器?
- 为什么这个自定义分配器的析构函数在 GCC/MSVS 的 stdlib 中被调用两次
- std::cout 如果从自定义分配器 (Visual Studio 2019) 调用,则不会输出
- 通过自定义分配器和删除器有效使用shared_ptr
- 如何将带有自定义分配器的 std::vector 传递给期望带有 std::分配器的函数?
- 自定义分配器兼容性
- 使用自定义分配器及其替代项重载基本类型
- C 中STL地图的自定义分配器
- 带有 clang++ v4 和 gcc 6.3 库的自定义分配器
- 不调用带有 std::vector 的自定义分配器
- 何时使用自定义分配器
- 为什么当我使用自定义分配器溢出向量时没有出现分段错误?
- 如何将自定义分配器的完全相同状态传递给多个容器?