0

我盡力同時實現狄克遜算法,效果很差。對於小數字<〜40位,它的運行時間大約是我班的其他實現的兩倍,大約40位後,需要更長的時間。Java併發狄克遜算法

我盡我所能,但我擔心它有一些我找不到的致命問題。

我的代碼(相當長)位於here。理想的情況下,該算法比非並行實現更快地工作

回答

0

爲什麼你認爲這會更快?旋轉線程並添加同步調用是巨大的時間同步。如果您無法避免同步關鍵字,我強烈建議使用單線程解決方案。

您可能能夠以各種方式避免它們 - 例如,通過確保給定的變量僅由一個線程編寫,即使被他人讀取或通過像函數式語言一樣工作,並使用遞歸使所有變量最終對於變量存儲(Iffy,很難想象這會加速任何事情)。

如果你真正需要的是快速,但是,我從沒有在尋找迅速解決我自己的努力找到了一些非常反直覺的事情了最近...

  • 靜態方法沒有過幫助實際的類實例。
  • 將代碼分解成更小的類和方法實際上提高了速度。
  • Final方法幫助比我還以爲他們會
  • 一旦我注意到,添加一個方法調用幫助速度順水推舟
  • 不要緊張過度一次性類分配或數據分配而避免分配對象循環(這一點很明顯,但我認爲它是最關鍵的)

我能夠直觀的是,編譯器在優化時非常智能,並且被優化爲「理想」java代碼。靜態方法不適用於接近理想的地方 - 它們是一種反模式,是最多的一種。

我建議你寫出最清晰,最好的OO代碼,它可以真正作爲參考正確運行 - 然後計時並開始嘗試調整以加快速度。

+1

「巨​​大的時間同步」好雙關!故意還是錯字? –