2014-09-23 73 views
1

我想在MPI(Java實現)中編寫一個小程序 聲明變量x(雙變量)。線程嘗試修改變量(比如說隨機修改)。當一個線程找到一個小於舊值的X的新值時,就向其他線程進行廣播,以便它們可以更新其變量的值。我已經看過了MPI中的Bcast函數。 ..但是在所有的例子中,它被所有的線程調用,不管變量是否被修改。在MPI中廣播更好的價值

+1

沒錯,這就是廣播如何工作 - 一個傳播者的所有過程都參與其中。在進程交換消息之前,一個進程不知道另一個進程的變量值已經改變。您可能需要查看其他集合,例如'mpi_gather','mpi_scatter'或'mpi_allgather'。還有其他人。 – 2014-09-23 17:43:40

回答

2

這是在多線程環境(例如OpenMP或Java線程)中很容易實現的場景之一,很難在MPI中無法高效實現。通常的做法是以這樣一種方式重構算法,即每步執行N步驟(N可能等於1,但由於通信開銷可能非常低效),然後使用Intracomm.Allreduce與reduce操作設置爲MPI.MIN。每個進程提供自己的最小值,並減少返回全局最小值。如果您還想知道擁有全局最小值的進程等級,則應該使用MPI.MINLOC

如果您嘗試實施並行遺傳優化,有some C++ libraries可能會給你一個靈感。

+0

我看到,在討論多機器/分佈式系統時,這總是一個問題。是的,你的想法是好的,但正如你所說,由於N = 1時的通信開銷將會是低效的,如果N> 1,它將不會被優化得足夠多。 感謝這些用於並行遺傳優化的C++庫。 ..我的領域並不關注於此,但閱讀新事物總是很有趣的 – 2014-09-23 19:15:10