Changes between Version 2 and Version 3 of SoC2013


Ignore:
Timestamp:
Feb 19, 2013, 12:16:34 PM (10 years ago)
Author:
David Bellot
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SoC2013

    v2 v3  
    2828First 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.
    2929
    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.
     30Boost.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.
    3131
    3232Said 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...
     
    3535Our ideas for a GSOC project are the following:
    3636- 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...),
    3739- use this new architecture to propose implementation for the following:
    3840   - fixed-sized vectors and matrices with optimization
    3941   - a true * operator for vector/vector, vector/matrix and matrix/matrix multiplication
    4042   - 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
     46The last feature is highly desirable in Machine Learning, Big Data, Computer Vision, Data mining, etc...
    4247
    4348Inspiration from other libraries like Eigen, Armadillo, GotoBLAS, etc... is highly recommended (after all, that's one of the raison d'etre of Free Software).