[英]C++ Eigen Library - Quadratic Programming, Fixed vs Dynamic, Performance
我正在研究做一些二次編程,並且看過不同的庫。 我見過 QuadProg++ 的各種 Eigen 變體( KDE 論壇、 Benjamin Stephens 、 StackOverflow 帖子)。 作為測試,我分叉了GitHub 上可用的wingit 的 Eigen 變體,以實現編譯時大小的問題,以通過模板來衡量性能。
我發現我在模板案例中的性能比來自wingsit 代碼的動態大小(MatrixXD / VectorXD)案例更差。 我知道這不是一個簡單的問題,但誰能看出為什么會這樣?
注意:我確實需要增加問題大小/迭代次數,我會盡快發布。
編輯:我在 Ubuntu 12.04 上使用 GCC 4.6.3。 這些是我正在使用的標志(從wingit的代碼修改):
CFLAGS = -O4 -Wall -msse2 -fopenmp # option for obj
LFLAGS = -O4 -Wall -msse2 -fopenmp # option for exe (-lefence ...)
靜態大小的代碼的好處通常隨着大小的增加而減少。 靜態大小代碼的典型好處主要包括(但不限於)以下幾點:
換句話說,對於小尺寸(最多可能 N=12 左右),靜態尺寸的代碼可以比等效的動態尺寸的代碼更好更快,只要編譯器對內聯和循環相當積極展開。 但是,當尺寸更大時,就沒有意義了。
此外,靜態大小的代碼也有許多缺點:
因此,從中吸取的教訓是僅將靜態大小的向量和矩陣用於 2 到 6 維向量或矩陣等小事物。 但除此之外,最好使用動態大小的代碼(或者嘗試靜態大小的代碼,但要驗證它的性能更好,因為不能保證這樣做)。 因此,我建議您重新考慮使用靜態大小的代碼解決更大問題的想法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.