2015-09-25 86 views
1

我有一個數據科學應用的異步並行程序的想法。考慮一個擁有一個「主」和20個「奴隸」的共享存儲系統。它將在主節點上有一個矩陣;奴隸會讀矩陣的值,使用隨機數和返回值將修改矩陣的一些元素(異步做一些操作,允許覆寫,即誰來到第2可能會覆蓋一些由奴隸所做的工作的奴隸誰來了第一)。模擬並行代碼

我知道這可以在pthreads做,但我不想花精力有一些原型之前編碼它。

我在MATLAB寫並行程序模擬器:

  • 一在-A-時間和順序,確實,從站會做的操作,並記錄時間。將其存儲在名爲NEXT_EVENT_TIME_ARRAY的向量中。
  • 添加一個人爲延遲到時間 (= how_many_procs * BANDWIDTH_CONSTANT * size_of_M_in_megabytes)
  • 集CURRENT_TIME = 0

現在,我們循環:

  • 挑選具有最小時間作爲從該「完成第一併聯」的一個
  • 設爲CURRENT_TIME +這個(最小)時間CURRENT_TIME的值。
  • 這從隨後要求用更新的矩陣(返回值會發生變化,因爲該過程涉及隨機數)做同樣的操作。
  • 記錄需要從站的時間來完成和更新NEXT_EVENT_TIME_ARRAY相應 元素是CURRENT_TIME +時間從花 完成計算與幾個迭代M.
  • 循環的新的價值!

我會選擇BANDWIDTH_CONSTANT來匹配我的電腦。 這是一個合理的模型來獲得一個概念證明我的算法是否可以在異步設置中工作?

回答

0

我不太確定你的模擬器在這裏有什麼特點,所以我不確定我要指出的缺陷對你來說是一個問題,但是我看到它的方式,你的BANDWIDTH_CONSTANT應該代表內存帶寬可用在您的計算機上,對嗎?

如果是這樣,麻煩在於,由於這個帶寬是一個全局資源,可以在您的機器上同時運行的所有線程和進程之間共享,所以「slave」的實際行爲很可能會有所不同,具體取決於它們有專門的訪問資源(順序模式),或者如果他們必須與其他從機(並行模式)共享...

評估這種共享的影響的一個好方法是運行幾個獨立的順序版本你的代碼同時在同一臺機器上,並記錄對性能的影響這併發有比運行一個單一的作業......這樣一來,你應該能夠更好地考慮到這個因素到你的模型(雖然再次我不確定這是y的重要組成部分我們的模擬器在第一位)。