Changes between Version 2 and Version 3 of SoC2013
- Timestamp:
- Feb 19, 2013, 12:16:34 PM (10 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
SoC2013
v2 v3 28 28 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. 29 29 30 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.30 Boost.uBLAS [http://www.boost.org/doc/libs/1_53_0/libs/numeric/ublas/doc/index.htm] 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. 31 31 32 32 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... … … 35 35 Our ideas for a GSOC project are the following: 36 36 - 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. 37 - add a framework for automatic algorithm selection at compile-time (that's more academic), 38 - add a framework for automatic algorithm selection at run-time (that's very academic, I'm thinking of matrix inversion etc...), 37 39 - use this new architecture to propose implementation for the following: 38 40 - fixed-sized vectors and matrices with optimization 39 41 - a true * operator for vector/vector, vector/matrix and matrix/matrix multiplication 40 42 - an architecture to choose at compile time the best algorithm to apply if several are available (very relevant to multiplication for example), 41 - ideas and examples on how to implement SIMD and multicore operations. 43 - ideas and examples on how to implement SIMD and multicore operations, 44 - use this new framework to implement particular matrices like Toeplitz, Hadamard, block matrix (see a taxonomy and possible applications here: [http://en.wikipedia.org/wiki/List_of_matrices]) and select algorithms that are more specific to each type in order to optimize code even further. 45 46 The last feature is highly desirable in Machine Learning, Big Data, Computer Vision, Data mining, etc... 42 47 43 48 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).