现在我有一个 C++ 中的串行求解器来解决优化问题,我应该用不同的参数并行化我的求解器,看看它是否有助于提高求解器的性能。现在我不确定我应该使用 TBB 还是 MPI。从我读过的一本 TBB 书来看,我觉得 TBB 更适合循环或细粒度的代码。由于我对TBB没有太多经验,我觉得很难将我的代码分成小部分以实现并行化。此外,从文献中,我发现许多作者使用 MPI 来并行几个求解器并使其协作。我想也许 MPI 更适合我的需要。因为我对 TBB 或 MPI 都不太了解。谁能告诉我我的感觉是否正确?MPI 会更适合我吗?如果是这样,什么材料适合开始学习 MPI。我没有使用 MPI 的经验,我使用 Windows 系统和 c++。非常感谢。
问问题
1057 次
1 回答
3
您需要记住的基本事项是在共享内存和分布式内存之间进行选择。共享内存是指您有多个可以访问公共内存的进程(通常一个进程内有多个线程)。这可以是非常细粒度的,并且通常更简单地将单线程程序调整为具有多个线程。您需要以这样一种方式设计程序,即线程大部分时间都在内存的不同部分工作(利用数据并行性),并且共享部分使用锁来防止并发访问。分布式内存意味着您有可能在一台或多台分布式计算机上执行的不同进程,但这些进程具有共同的目标并通过消息传递(数据通信)共享数据。没有公共内存空间,一个进程需要来自另一个进程的所有数据都需要通信。这是一种更通用的方法,但由于通信要求,它需要粗粒度。TBB 是一个支持基于线程的共享内存并行的库,而 MPI 是一个分布式内存并行的库(它具有用于通信的简单原语以及用于不同节点执行中的多个进程的脚本)。
最重要的是您要确定求解器中的并行性,然后选择最佳解决方案。您是否具有数据并行性(不同的线程/进程可以在不同的数据块中并行工作,而无需通信或共享部分数据)?任务并行性(不同的线程/进程可能对您的数据执行不同的转换,或者以管道或图形方式执行数据处理中的不同步骤)?
于 2010-02-18T10:33:43.627 回答