2011-08-24 123 views
3

其實我有3個問題。任何輸入讚賞。謝謝!打開MPI:每個主機如何正確運行1個進程

1)如何在每臺主機上精確運行1個進程?我的應用程序使用TBB進行多線程。這是否意味着我應該在每臺主機上正確運行一個進程以獲得最佳性能?

2)我的羣集有不同的主機。一些主機比其他主機擁有更好的CPU和更多的內存。如何將進程隊列映射到實際主機以用於工作分配目的?我想用hostname.Is有更好的辦法嗎?

3)如何分配進程排名?什麼過程得到0?

回答

3

1)TBB將循環分割成線程池的多個線程,以利用一臺機器的所有處理器。所以你應該只在每臺機器上運行一個進程。更多的流程將會與處理器時間相互爭奪。每臺機器的進程數是通過選擇在HOSTFILE給出:

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

2)爲了給每臺機器根據其工作表現的適當量是不平凡的。 最簡單的方法是將工作量分成小塊,發送給奴隸,收集答案,並給他們新的工作,直到完成。在我的website(德文)上有一個例子。您也可以在這裏找到一些對手冊和教程的參考。

3)每個過程

MPI_Comm_rank(MPI_COMM_WORLD, &processID); 

主程序中的獲取一個數字(的ProcessID)已的ProcessID == 0,也許其它給出槽在HOSTFILE的順序。另一種可能性是它們按照與從機的連接建立的順序進行分配。我不知道。

+0

感謝您的回答。我確實進行了實驗,發現0級被分配給執行mpirun的進程。 – pic11

+0

@ pic11:對不起,我沒有說清楚:主進程在啓動mpirun的機器上運行,是的。 –

相關問題