2011-07-11 27 views
4

我正在寫一個算法來測量大型網絡在獨立攻擊下的健壯性。該網絡有大約2000個節點,面臨10^8次攻擊。最初我在Matlab中實現了我的功能,但迭代過多(10^8)沒有解決。每個迭代嘗試通過提高魯棒性重新連接網絡。大型網絡迭代 - 並行性?

簡單並行性的問題是,每當網絡重新佈線時,新的迭代就會在重新佈線的網絡上工作。

我不知道如何在這裏實現高度的並行性,以便有效地運行我的算法。目前沒有平行性,我相信它將需要大約1477天。

+1

你是什麼意思rewired Netowrk? –

回答

0

您制定問題的方式似乎沒有辦法對迭代進行並行化。另外,如果估計1477天是現實的話,那麼在雙核機器上並行化會給你800天,我認爲這仍然是不可接受的。

相反,你可以做典型分析工作流程:

  1. 確定一個合理的一小段代碼,需要很長的時間才能完成。
  2. 通過重新設計,以編譯語言重寫或調整來優化這段代碼。
  3. 轉到1

如果沒有這讓你可以接受的結果,你將不得不做反覆次數比較少或者做一些性能關鍵假設來簡化你的問題。

+0

我優化了一些比特並大大提高了性能。我正在研究並行我的代碼。謝謝! – Trivik

1

每次迭代大約需要1.25秒。 (大約40億個時鐘週期)聽起來好像很長一段時間,必須有一些機會來優化你正在做的事情並將其減少到毫秒。優化代碼通常可以提高性能,而不是平行化。 (因爲並行代碼受限於您擁有的免費硬件數量以及協調多個CPU /系統的開銷)

您有多少硬件?如果您的進程受CPU限制,那麼如果您有N個CPU,則應用程序最多可以使應用程序快N倍。

假設您有足夠的硬件,例如2048個CPU玩和1天是可以接受的。不要假設您需要完全忠實的端到端測試,您可以以不同的隨機/可能配置啓動網絡。獨立地對每個網絡運行10^5次攻擊,並檢查您的結束狀態是否與另一次運行的開始狀態完全匹配。即您可以在理論上將結果連接在一起進行端對端。


取決於你需要多少內存,你可能會發現塔式服務器是最符合成本效益。

您可以購買帶有Xeon Quad 2.5 GHz和4 GB內存的服務器,售價爲354英鎊。這對於錢來說有很大的權力。

但是,如果您有權訪問現有資源,則可能會更好。例如你是否爲一家擁有1,000臺桌面計算機的公司工作,而這些桌面並沒有使用過夜。 ;)

+0

我遵循優化代碼的建議。它提高了很多性能。我更多地考慮爲我的模擬獲取CPU。 – Trivik