其实我有3个问题。任何输入都表示赞赏。谢谢!
1)如何在每台主机上运行1个进程?我的应用程序使用TBB进行多线程处理。这是否意味着我应该在每台主机上运行1个进程以获得最佳性能?
2)我的群集有异构主机。有些主机拥有比其他主机更好的CPU和更多内存。如何将流程等级映射到真实主机以进行工作分配?我想使用主机名。那有更好的办法吗?
3)如何分配流程等级?什么过程得到0?
答案 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的顺序给出了插槽。另一种可能性是它们按顺序分配与奴隶的连接。我不知道。