2014-09-24 58 views
1

我想用MPI提供的例程(特別是Open MPI)實現一些文件io。如何用MPI中的單個節點寫入

由於可能的環境限制,我想知道,如果有可能限制負責IO的節點,以便所有其他節點都需要對這組進程執行隱藏mpi_send,寫入數據。這在例如例如,主節點放置在具有高性能文件系統的節點上,而其他節點只能訪問存儲二進制文件的低性能文件系統。

其實,我已經發現了一些信息,這可能是有益的,但我找不到更多的信息,如何真正落實這些事情:

1:有一個信息鍵MPI_IO屬於溝通者,它告訴哪個等級提供符合標準的IO例程。由於這被列爲環境調查,我沒有看到,我可以在哪裏修改。

2:有一個信息鍵io_nodes_list,它似乎屬於文件相關的信息對象。不幸的是,這個鍵的可能值沒有記錄,並且Open MPI似乎沒有以任何方式實現它們。實際上,我甚至無法獲取由mpi_file_get_info返回的信息對象的文件名...

作爲解決方法,我可以想象兩件事:一方面,我可以使用標準Fortran例程,或者另一方面,創建一個新的溝通者,負責IO。但在這兩種情況下,負責IO的進程都必須檢查來自其他進程的可能IO以執行手動通信和文件交互。

是否有一個很好的自動方法來限制IO到某些節點?如果是的話,我怎麼能實現呢?

+1

注意'MPI_IO'屬於執行環境的預定義的屬性,因此是隻讀的。這主要是出於歷史和便攜性的原因。在現代集羣系統中,其值始終爲'MPI_ANY_SOURCE',因爲所有CPU都以某種方式連接到I/O子系統。 – 2014-09-25 15:38:09

回答

3

您明確詢問過OpenMPI,但在OpenMPI中有兩個MPI-IO實現。老主力是ROMIO,MPI-IO實現在幾乎所有MPI實現中共享。 OpenMPI也有OMPIO,但我對調整這一點並不知情。

接下來,如果您希望事情自動發生,您必須使用集體I/O。獨立的I/O例程不能將消息發送給其他人 - 它們是獨立的,無法知道對方是否正在傾聽。

與那些預賽出的方式...

你問 「I/O aggregaton」。有一點的信息在這裏的另一個名爲優化上下文「延遲開放」(和OMPIO調用懶打開)

https://press3.mcs.anl.gov/romio/2003/08/05/deferred-open/

總之,可以肯定地說,「只有這N個過程應該做的我/ O「,然後集體I/O庫將交換數據並確保發生。根據您提出的情況,優化大約在15年前開發出來:一些節點比其他節點更好地連接到存儲器(如舊的ASCI Red機器上的情況,以便讓您瞭解此優化的年齡。 ..)

我不知道你從哪裏得到io_nodes_list。你可能想使用MPI-IO信息鍵cb_config_listcb_nodes

所以,你已經得到了與master1,master2,爲主設備,並compute1,compute2,compute3(或任何主機名實際上是)一個集羣。你可以做這樣的事情(在C,對不起,我不能用Fortran精通):

MPI_Info info; 
MPI_File fh; 
MPI_Info_create(&info); 
MPI_Info_set(info, "cb_config_list", "master1:1,master2:1,master3:1"); 
MPI_File_open(MPI_COMM_WORLD, filename, MPI_MODE_CREATE|MPI_MODE_WRONLY, info, &fh) 

有了這些提示,MPI_File_write_all將聚集所有的I/O通過關於master1,master2 MPI進程,併爲主設備。 ROMIO不會炸燬你的內存,因爲它會將I/O分塊成一個較小的工作集(用「cb_buffer_size」提示:啓動它,如果你有內存,是獲得更好性能的好方法) 。

有一噸的你可以在ROMIO用戶指南設置提示信息: http://www.mcs.anl.gov/research/projects/romio/doc/users-guide/node6.html

+0

感謝這非常豐富的答案。我從'MPI-3'標準中獲得了'io_nodes_list',並且'C'語言沒有問題。儘管如此,我希望有一種非集體的可能性,讓事物不同步。 – Stefan 2014-09-25 15:32:53

+0

哈!近13年來,我一直在盜用我們的MPI-IO實現,並且我從來不知道io_nodes_list ..但是在13.2節的「預留文件提示」下它就是這樣。 ROMIO不支持「文件名」提示...雖然這很容易實現。 – 2014-09-25 15:45:44

+0

您必須在MPI-IO之上實施一些非集體方法。 (比如西北大學在2008年的時間框架內在這方面做了一些工作)。你可以想象在連接良好的節點上的RMA窗口,並且劫持MPI_Write實際上是MPI_Put ...「細節留給讀者」......他們是多毛的細節... – 2014-09-25 15:47:43

相關問題