我在Matlab中,我需要在不同的初始點運行約1000獨立優化算法(fmincon)的運行,那裏有優化,而凌亂似然函數像32個免費參數。並行優化:漸變或循環
不幸的是,我不能同時對1000次運行的優化算法,和進行並行計算的有限差分梯度。我必須選擇一個。
有誰知道它是否更有效地並行化外部循環,並使每個優化運行在其自己的核心上,還是計算有限差分梯度計算?
謝謝!
我在Matlab中,我需要在不同的初始點運行約1000獨立優化算法(fmincon)的運行,那裏有優化,而凌亂似然函數像32個免費參數。並行優化:漸變或循環
不幸的是,我不能同時對1000次運行的優化算法,和進行並行計算的有限差分梯度。我必須選擇一個。
有誰知道它是否更有效地並行化外部循環,並使每個優化運行在其自己的核心上,還是計算有限差分梯度計算?
謝謝!
如果不知道任何有關代碼和/或硬件的信息,則無法完全回答。
如果你有超過32個內核,那麼在並行梯度計算過程中,它們中的一些將無所事事。在這種情況下,並行運行1000個仿真可能會更快。
另一方面,並行計算梯度可能使您的CPU更有效地使用它們的緩存,因爲緩存未命中的次數會更少。你可以看看Why does the order of the loops affect performance when iterating over a 2D array?或What is 「cache-friendly」 code?。
謝謝!我有25個核心可以使用。我知道我最終需要做一些測試,但認爲有人比我可能已經知道的更有知識。我會檢查這些鏈接 – hipHopMetropolisHastings
我不知道它是否適用於你的情況,但檢查你是否可以使用'gpuarray'。只有當我知道有一個帶有cuda核心的Nvidia GPU時,它纔有效,但它可以爲您提供1000個或更多內核。不保證它會讓您的特定程序更快,但可能值得一試。 – maxb
謝謝!我會檢查出來的。其實現在在新的視頻卡市場。我會牢記這一點。 – hipHopMetropolisHastings