| 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) |