在 TBB 中,经常(并且应该?)在内部调用的 task_scheduler_init () 方法是经过深思熟虑的设计决策。
但是,如果我们把TBB和MPI混合使用,是不是在不控制每个MPI进程的线程数的情况下保证线程安全呢? 例如,假设我们有 7 个内核(没有超线程)和 2 个 MPI 进程。如果每个进程同时使用 4 个线程生成一个单独的 TBB 任务,则存在可能导致程序在运行时崩溃的冲突。
我是 TBB 的新手。 期待您的意见和建议!
最佳答案
从英特尔 TBB 运行时的角度来看,它是否是 MPI 进程并不重要。因此,如果您有两个进程,您将拥有两个独立的英特尔 TBB 运行时实例。我不确定我是否理解与线程安全相关的问题,但它应该可以正常工作。但是,您可能会超额订阅,从而导致性能问题。
此外,如果您同时(从多个线程)使用 MPI 例程,您应该检查 MPI 实现文档,因为它可能会导致一些问题。
关于c++ - 混合并行 : MPI and TBB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45579255/