154 | | |
155 | | === Boost.uBLAS === |
156 | | |
157 | | First of all, we have a page with the list of future and desired new features here: http://sourceforge.net/apps/mediawiki/ublas/index.php?title=Main_Page. Students are encourage to consult this page. |
158 | | |
159 | | Boost.uBLAS is a fast implementation of linear algebra procedures, of for short it's a vector and matrix library. Actually it's indeed a vector AND matrix library and this is one of the main problem. Vectors are matrices, at least in standard math textbook, but not in Boost.uBLAS. They are represented as 2 separate classes and do not share code really. Not enough to be efficient. Moreover, vector being considered as fixed-sized vectors, they are not as versatile as STL vectors (but it's not the same concept) and not as accurate as a true linear algebra vector, that is they do not implement the notion of being row-vector or column-vector. |
160 | | |
161 | | Said like that, it's not that important you would say, but by merging vector and matrix classes, we could share a lot of code and optimize even further. Second of all, by having a unified architecture we could start implementing modern acceleration techniques that lacks in Boost.uBLAS, like SIMD computations, multi-core, GPU, etc... |
162 | | |
163 | | |
164 | | Our ideas for a GSOC project are the following: |
165 | | - unify representation of vector and matrices into a unique matrix class. Keep compatibility with previous code by providing a default vector<> representation that would inherit for matrix<>. Improve it too by adding more template parameters like size and orientation. |
166 | | - use this new architecture to propose implementation for the following: |
167 | | - fixed-sized vectors and matrices with optimization |
168 | | - a true * operator for vector/vector, vector/matrix and matrix/matrix multiplication |
169 | | - an architecture to choose at compile time the best algorithm to apply if several are available (very relevant to multiplication for example), |
170 | | - ideas and examples on how to implement SIMD and multicore operations. |
171 | | |
172 | | Inspiration from other libraries like Eigen, Armadillo, GotoBLAS, etc... is highly recommended (after all, that's one of the raison d'etre of Free Software). |
173 | | |
174 | | Mentor: David Bellot (david.bellot[at]gmail.com) |