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

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

2)我的群集具有异构主机。一些主机比其他主机具有更好的CPU和更多的内存。如何将流程等级映射到真实主机以进行工作分配?我正在考虑使用主机名,还有更好的方法吗?

3)流程等级如何分配?哪个过程得到0?

最佳答案

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

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

2)根据其性能给每台机器适当的工作量并非易事。
最简单的方法是将工作负载分解为小部分工作,将其发送给从属,收集他们的答案,并为他们提供新的工作,直到完成为止。我的website(德语)上有一个示例。您还可以在那里找到一些手册和教程引用。

3)每个进程通过以下方式在您的程序中获取一个数字(processID):
MPI_Comm_rank(MPI_COMM_WORLD, &processID);

主机的processID ==0。也许其他主机按照您的主机文件的顺序分配了插槽。另一种可能性是按照建立与从站的连接的顺序分配它们。我不知道

关于c++ - 开放式MPI:如何在每个主机上精确运行1个进程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7169738/

10-11 22:45
查看更多