基本線性代數(Basic Linear Algebra)

uBLAS 是一個提供針對於密集矩陣,壓縮矩陣,稀疏矩陣提供 BLAS 1級, 2級, 3級運算功能的C++模板類庫。通過運算符重載和高效的基於表達式模板(expression template)技術來實現數學記法(mathematical notation)。

功能

uBLAS 是一個提供密集向量,單位向量,稀疏向量以及密集矩陣,方形矩陣(identity),三角矩陣,帶狀矩陣,對稱矩陣,埃爾米特矩陣和稀疏矩陣。向量和矩陣可以使用範圍(range)或切分(slice)和適配器類(adaptor class)來構造。這個庫覆蓋了通常的向量和矩陣的線性代數運算: 類似於不同范數的簡化, 向量和矩陣的加法與減法,與標量的乘法,向量的內積,外積,矩陣與向量的積,矩陣與矩陣的積以及triangular solver。 容器,視圖(view)和表達式模板(expression templated)運算之間的聯繫主要是STL 風格的迭代器接口。

文檔

支持的平台(Supported Platforms)

當前版本的 uBLAS庫需要一個現代的編譯器(遵循ISO標準) 。這個發行版本的目標編譯器和測試所基於的編譯器如下:

Boost 1.32.0 (以及更早版本)的 uBLAS庫支持許多較老的編譯器。如果你使用這樣一個編譯器,請使用這一個版本的 uBLAS 庫。可以編譯運行這個庫較早版本的編譯器如下:

對於可能的問題請參考 Boost 回歸測試(regression tests)。

已知的限制(Known limitations):

其它信息(Further Information)

庫的位置和下載

最新的穩定發行版本的 uBLAS 庫是Boost 庫的一部分。

文檔和討論

參考 Effective uBLAS wiki 來瞭解最新信息和貢獻(contributions)。

同樣也有一個活躍的 uBLAS 郵件列表 來討論和回答uBLAS特定的用戶以及開發的問題。

uBLAS 和 Boost 項目

同樣也有一個uBLAS庫與uBLAS項目代碼的差別的 郵件列表 。 你可以直接 瀏覽 Boost CVS 。 你可以在 這裡找到這個庫。文檔和測試程序在 這裡

作者與致謝

uBLAS庫由 Joerg Walter 和 Mathias Koch編寫。我們要感謝所有的支持和對這個庫的開發作出貢獻的朋友: David Abrahams, Ed Brey, Fernando Cacciola, Juan Jose Gomez Cadenas, Beman Dawes, Matt Davies, Bob Fletcher, Kresimir Fresl, Joachim Kessel, Patrick Kowalzick, Toon Knapen, Hendrik Kueck, John Maddock, Jens Maurer, Alexei Novakov, Gary Powell, Joachim Pyras, Peter Schmitteckert, Jeremy Siek, Markus Steffl, Michael Stevens, Benedikt Weber, Martin Weiser, Gunter Winkler, Marc Zimmermann 以及Boost成員。

常被問到的問題

問題: 我運行 uBLAS 密集向量和密集矩陣性能測試程序( matrix benchmarks )。為什麼我在純C實現與這個庫的實現中發現了一個明顯的性能差距?
回答: uBLAS 分為調試模式(進行大小和類型一致性檢查,禁用表達式模板)以及發行模式(禁用大小和類型一致性檢查,並使用表達式模板)。請檢查,是否定義了cassert 的預處理符號NDEBUGNDEBUG 用於執行發行模式(release mode),這種模式使用表達式模板。你可以定義BOOST_UBLAS_NDEBUG 來禁用所有的uBLAS庫的限制(bounds),結構和類型的檢查。

問題: 我編寫了一些 uBLAS 測試代碼,試圖在不同的矩陣類型之間進行賦值或者超出(overrun)向量和矩陣的維數。為什麼我沒有獲得一個編譯時或運行時的診斷信息(diagnostic)?
回答:uBLAS 分為調試模式(進行大小和類型一致性檢查,禁用表達式模板)以及發行模式(禁用大小和類型一致性檢查,並使用表達式模板)。請檢查,是否定義了cassert 的預處理符號NDEBUGNDEBUG 禁止調試模型( debug mode ),調用模式進行大小和類型一致性檢查。

問題:我編寫了一些 uBLAS 性能測試程序(benchmarks)來測量矩陣鏈式乘法(chain multiplication),類似於prod (A, prod (B, C)) 並看到了由於使用表達式模板而產生的一個明顯的性能差別。我如何禁用表達式模板?
回答:你不需要禁用表達式模板。請嘗試使用prod (A, matrix_type (prod (B, C)))prod (A, prod<matrix_type > (B, C))來重新引入臨時變量。


Copyright (©) 2000-2002 Joerg Walter, Mathias Koch
Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt ).