打开MPI:如何为每个主机正好运行1个进程

时间:2011-08-24 02:15:04

标签: c++ c mpi openmpi

其实我有3个问题。任何输入都表示赞赏。谢谢!

1)如何在每台主机上运行1个进程?我的应用程序使用TBB进行多线程处理。这是否意味着我应该在每台主机上运行1个进程以获得最佳性能?

2)我的群集有异构主机。有些主机拥有比其他主机更好的CPU和更多内存。如何将流程等级映射到真实主机以进行工作分配?我想使用主机名。那有更好的办法吗?

3)如何分配流程等级?什么过程得到0?

1 个答案:

答案 0 :(得分:3)

1)TBB将循环拆分为线程池的多个线程,以利用一台机器的所有处理器。所以你应该只为每台机器运行一个进程。更多的进程会相互争夺处理器时间。每台计算机的进程数由主机文件中的选项给出:

# my_hostfile 
192.168.0.208 slots=1 max_slots=1
...

2)根据每台机器的性能给予每台机器适量的工作并非易事。 最简单的方法是将工作量分成小块工作,将它们发送给奴隶,收集他们的答案,并给他们新的工作,直到你完成。我的website(德语)就有一个例子。您还可以在那里找到一些手册和教程的参考资料。

3)每个进程都通过

获取程序中的数字(processID)
MPI_Comm_rank(MPI_COMM_WORLD, &processID);  

master有processID == 0.也许另一个按照hostfile的顺序给出了插槽。另一种可能性是它们按顺序分配与奴隶的连接。我不知道。