3

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

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

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

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

4

1 回答 1

3

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

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

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

3)每个进程在你的程序中获得一个数字(processID)

MPI_Comm_rank(MPI_COMM_WORLD, &processID);  

主人有 processID == 0。也许其他人按照你的主机文件的顺序被给予插槽。另一种可能性是它们按照与从属设备的连接建立的顺序进行分配。我不知道。

于 2011-08-24T05:28:12.627 回答