2016-05-14 152 views
5

我習慣了Eigen幾乎所有的數學線性代數工作。 最近,我發現Boost還提供了一個C++模板類庫,它提供了基本線性代數庫(Boost::uBLAS)。這讓我想知道我是否能夠僅僅基於boost來獲得我所有的工作,因爲它已經是我的代碼的主要庫。Boost :: uBLAS vs Eigen

在兩個仔細一看真的沒有讓我他們之間的明確區分:

  • 的boost :: uBLAS庫:

的uBLAS提供密集,單元模板C++類和稀疏矢量,密集,身份,三角形,帶狀,對稱,厄密和稀疏矩陣。可以通過範圍,切片,適配器類和間接陣列構建向量和矩陣的視圖。該庫涵蓋了關於向量和矩陣的常用基本線性代數運算:像不同規範的減法,向量和矩陣的加法和減法,以及與向量的內積和外積,矩陣向量和矩陣矩陣乘積以及三角求解器的乘積。

...

  • 徵:

它支持所有的矩陣大小,從小型固定大小的矩陣來任意大的密集矩陣,甚至稀疏矩陣。它支持所有標準數字類型,包括std :: complex,整數,並且可以輕鬆擴展到自定義數字類型。

它支持各種矩陣分解和幾何特徵。

其不支持模塊的生態系統提供了許多專業功能,如非線性優化,矩陣函數,多項式求解器,FFT等等。

...

有誰對他們的主要差別,並在此基礎上更好的主意,我們可以在它們之間進行選擇?

回答

2

如果您關心表達式模板引入的性能和性能增益,請選擇Eigen,如果您只想學習表達式模板,請選擇uBlas。

http://eigen.tuxfamily.org/index.php?title=Benchmark

+0

Eigen也使用表達模板。 –

+0

@quant_dev我說得更清楚了。 – kangshiyin

+0

請注意,這些基準很舊(從2011年開始),而不是獨立的。 –

1

我只是做了提升和本徵之間的相當瑣碎的矩陣計算的時間複雜度比較。這些結果雖然有限,但似乎表明助推是一種更好的選擇。 我有一個FEM代碼,它執行預處理部分(設置元素矩陣並將它們拼接在一起)。自然,這將涉及大量的內存分配。

enter image description here

我寫代碼的相同件與升壓和本徵上C++(GCC 5.4.0,ubuntu的16.04,英特爾的i3四核處理器,2。40GHz,RAM:4Gb),並使用linux cl-utility單獨運行它們以獲得不同的節點大小(N)和計算時間。 就我而言,我決定在Boost中繼續使用我的代碼。

+0

內存分配是否會影響結果? –

+4

你在這裏執行的操作是什麼? – myradio

+1

你一定要顯示這個基準的來源! – Synxis