2010-11-30 145 views
5

一切都是標題。 我和我的團隊正在開展一個項目,我們正在使用MPI。在一個地方,我們正在爲超時資源執行MPI_send resquesting。如果資源可用,我們返回1,如果不是並且超時結束,我們返回0. 我們嘗試使用像SIGALRM這樣的信號,但它不起作用,因爲每個新請求都會通過設置新警報來取消舊請求。MPI中是否存在超時機制?

感謝您的回答!

回答

7

您應該研究非阻塞點對點通信原語,如MPI_IsendMPI_IrecvMPI_Iprobe。然後,您可以自行實施超時,並根據需要使用MPI_Cancel

+0

嗨埃德里克,謝謝你的回答。但是我怎樣才能使用超時? – Dimitri 2010-11-30 11:40:16

2

沒有標準的方法來實現這一點。

使用非阻塞調用(例如MPI_Isend,MPI_Irecv)和使用MPI_Test和MPI_Cancel實現send/recv對是一種可能的解決方案。

根據資源性質的性質以及程序中需要此功能的次數,您可能還會考慮將MPI_ISend作爲「持久請求」對象來實現。這裏有更多的信息:Persistent Communications

持久性請求的優點是可以形成請求,然後僅在資源實際可用時才執行....假設可以獨立於實際的MPI_ *調用檢查資源。持續通信請求可以在整個程序中重複使用很多次,而無需重新構造整個MPI_Send/MPI_Recv調用。