Talk



Papers

Note: Copyrights to the following papers are held by the publishers. The HTML and Postscript versions provided here are preprints. Please treat this material in a way consistent with the "fair use" provisions of appropriate copyright law.
  • Active Libraries: Rethinking the roles of compilers and libraries, SIAM Workshop on Object Oriented Methods for Inter-operable Scientific and Engineering Computing, October 21-23, 1998 [PS] [HTML] [bibtex]
  • C++ Templates as Partial Evaluation, 1999 ACM SIGPLAN Workshop on Partial Evaluation and Semantics-Based Program Manipulation (PEPM'99). [PS] [HTML]
  • Arrays in Blitz++, Proceedings of the 2nd International Scientific Computing in Object Oriented Parallel Environments (ISCOPE'98). Overviews the Blitz++ implementation of dense arrays. [PS] [DVI] [bibtex] © 1998 Springer
  • Will C++ be faster than Fortran? Proceedings of the 1st International Scientific Computing in Object Oriented Parallel Environments (ISCOPE'97). Gives a quick overview of using template techniques to improve C++'s performance. [HTML] [PS] [bibtex] (ISCOPE'97) © 1997 Springer.
  • Scientific Computing: C++ vs. Fortran, Dr. Dobb's Journal (November 1997). Focuses on optimizations for small linear algebra objects. [HTML] [bibtex]
  • Linear algebra with C++ template metaprograms, Dr. Dobb's Journal (August 1996). Focuses on optimizations for small linear algebra objects. [HTML] [bibtex]
  • One of the major problems with linear algebra in C++ is the pairwise evaluation of overloaded operators, which results in grossly inefficient evaluation of matrix and vector expressions. This problem (and others) is solved by the expression templates technique. By transforming arithmetic expressions into C++ types, expression templates make it possible to create templates parameterized on expressions, and pass expressions as function arguments. An article from C++ Report (June 1995) entitled "Expression Templates" [HTML] [bibtex] explains the method behind the magic.
  • Compilers are limited in the types of optimizations which they can perform. An alternative to relying on the compiler to optimize numerical libraries is to create libraries which are not collections of code, but rather collections of "recipes" (metaprograms) for generating efficient code. This concept can be implemented in C++ by making use of template metaprograms. Another article from C++ Report (May 1995) entitled "Using C++ template metaprograms" [HTML] [bibtex] explains how this works.
  • Nathan Myers' Traits technique provides a way of mapping types onto other types, numbers onto types, types onto code, and so on. Trait classes provide a lot of the glue for the experimental Blitz++ Numerical Library. Nathan's article in the June 1995 issue of C++ Report provides a general introduction [HTML,11k]