2016-04-03 71 views
0

以我軟件獲取數據I從一個流中讀取信息X與過程(另一個進程的標準輸出),那麼我發送讀取到其他N-1的信息進程和最後我收集的所有數據由N進程收集。建議分佈式計算,從流

現在我的問題是:「什麼是共享從流程之間的流讀取的信息最有效的方式?」

PS。進程也可能在通過網絡連接的不同計算機上。

在這裏,我列出一些可能性:

  1. 流(中號線)的計數線路,保存到Ñ文件M/N 線和發送到每個處理1文件。
  2. 計數行數據流(M行),分配足夠的內存來包含所有信息,直接發送給每個進程的信息。

但我認爲,這可能是一些問題:

  1. 寫了這麼多的文件可以是一個開銷,並通過網絡發送的文件是不是有效的。
  2. 我需要足夠的內存進程,這樣的過程可能是一個瓶頸。

你有什麼建議,你有更好的點子嗎? 我在C上使用MPI來進行此計算。

回答

1

如果性能不是問題,使用文件就好了。優點是,您可以將所有文件保持模塊化,並將其作爲分離的接口。你甚至可以用非常簡單的命令行工具:

./YOUR_COMMAND > SPLIT_ALL 
split -n l/$(N) -d SPLIT_ALL SPLIT_FILES 

N在你的shell或適當更換。 注意:不幸的是,在這種情況下,您不能直接輸入split,因爲從stdin讀取時,它無法確定總行數。如果循環賽,而不是連續的分裂是好的,你可以直接管:

./YOUR_COMMAND | split -n r/$(N) -d - SPLIT_FILES 

你第二個解決方案也很好 - 如果你有足夠的內存。請記住使用適當的集體操作,例如MPI_Scatter(v)用於發送,而MPI_GatherMPI_Reduce用於接收來自客戶端的數據。

如果內存不足,則將輸入緩衝區塊(例如100,000行),然後將塊分散到您的工人,計算,收集結果並重復。