2012-11-10 51 views
6

我正準備爲實時應用程序編寫一個algorthim,它涉及一些高維NLP(非線性編程)。Matlab fmincons與C++的NLP解算器(如ipopt)之間的性能差距如何?

在實現之前,我需要對我的算法進行計時,以查看它是否適用於實時應用程序,因此我使用Matlab的內置fmincons作爲基線。根據經驗表明,matlab算法的速度往往慢於C++的速度慢,因此我想估計在這種特殊情況下我可以期待什麼樣的性能增益?由於我的工作大多與實時應用有關,因此我很少使用NLP(非線性編程),所以我問同事們,他們推薦我試試ipopt作爲開始,我用Google搜索它的網站,沒有基準測試對照Matlab,也沒有關於其算法細節的許多主題(至少在Matlab中,不難檢查他們的algorthims的細節),所以我基本上對準確性/魯棒性/最優性等知之甚少。關於它。

所以這裏關於NLP的C++實現的任何幫助都會非常有幫助,非常感謝。

+1

搜索問題與域非常相關;你將得到的唯一明確的答案是實際上讓這兩個系統解決了你可能遇到的一個真正的問題,並且看到他們的表現如何。 – Isaac

回答

2

許多這類問題都是由大的O(n ^〜3)矩陣乘法支配的。如果是這種情況,並且兩個系統都使用相同的算法,而性能將會相似,並且不依賴於語言,因爲底層矩​​陣乘法函數將在asm中原生實現。

如果算法不是由像這樣的簡單函數支配的,而是需要大量的內存管理,而C++庫會贏得很多(3-10 x)。 (如果性能比許多人使用OpenCL將GPU設計用於這種類型的數值計算並且在20-100倍範圍內具有性價比差異更重要,或者您可以將它如果您需要更快的話,請關閉羣集。)

+0

在許多方面與你一致,但我懷疑GPU可以在這裏提供任何改進,以SQP爲例,實際上該方法必須有很多分支才能正常工作,考慮到GPU極差的分支性能和非常低的緩存(基本上完全消除了GPU在內存帶寬上超過CPU的任何優勢),如果GPU的實現速度不會明顯慢於CPU的速度,我會感到驚訝。 – user0002128

+0

與CPU相比,GPU的優勢在於其大規模並行架構,該架構實際上擁有數千個處理器核心,而CPU則相當於10個左右。如果您的問題可以細分爲數據並行結構(並非全部可以),則GPU將通過數量級獲勝。 http://www.youtube.com/watch?v=IEWGTpsFtt8 –