A Flexible Dynamic Data Structure for Scientific Computing

  • Josef Weinbub
  • Karl Rupp
  • Siegfried Selberherr
Part of the Lecture Notes in Electrical Engineering book series (LNEE, volume 229)


We present an approach for a generic, multi-dimensional run-time data structure suitable for high-performance scientific computing in C++. Our concept for associating meta-information with the data structure as well as different underlying datatypes is depicted. High-performance, multi-dimensional data access is realized by utilizing a heterogenous compile-time container generation function. The generalized data structure implementation is discussed and performance results are given with respect to reference implementations. We show that our approach is not only highly flexible but also offers high-performance data access by simultaneously relying on a small code base.


C++ Data structure Dynamic Generic programming Meta programming Multi-Dimensional 



This work has been supported by the European Research Council through the grant #247056 MOSILSPIN. Karl Rupp acknowledges support by the Austrian Science Fund (FWF), grant P23598.


  1. 1.
    Meyer Carl D (2001) Matrix analysis and applied linear algebra. Society for Industrial and Applied Mathematics (SIAM), Philadelphia, USAGoogle Scholar
  2. 2.
    Nemat-Nasser S (2004) Plasticity. Cambridge University PressGoogle Scholar
  3. 3.
    Alexandrescu A (2001) Modern C++ Design. Addison-Wesley Professional, Boston, USAGoogle Scholar
  4. 4.
    Stroustrup B (2012) Software development for infrastructure. Computer 45(1):47–58Google Scholar
  5. 5.
    Weinbub J, Rupp K, Selberherr S (2012) A generic multi-dimensional run-time data structure for high-performance scientific computing. In lecture notes in engineering and computer science: proceedings of the world congress on engineering (2012) WCE 2012 U.K , London, pp 1076–1081Google Scholar
  6. 6.
    Reis GD et al (2005) What is Generic Programming? In: Proceedings of the first international workshop on library-centric software design (LCSD), OOPSLA 2005, San Diego, CA, USA, pp 1–10Google Scholar
  7. 7.
    Abrahams D, Gurtovoy A (2004) C++ Template Metaprogramming. Addison-Wesley Professional, Boston, USAGoogle Scholar
  8. 8.
    Boost (2012) The Boost C++ Libraries.
  9. 9.
    Andres B, Köthe U, Kröger T, Hamprecht FA (2010) Runtime-Flexible Multi-dimensional Arrays and Views for C++98 and C++0x. ArXiv e-prints, Technical Report.
  10. 10.
    Gregor D, Järvi J, Maurer J, Merrill J (2007) Proposed wording for variadic templates. Technical Report N2152=07-0012, ANSI/ISO C++ Standard CommitteeGoogle Scholar
  11. 11.
    Garcia R, Lumsdaine A (2005) MultiArray: A C++ library for generic programming with arrays. Softw Pract Exper 35(2):159–188CrossRefGoogle Scholar
  12. 12.
    Veldhuizen TL (1998) Arrays in Blitz++. In: Proceedings of the second international symposium on computing in object-oriented parallel environments (ISCOPE), Santa Fe, NM, USA, pp 223–230Google Scholar
  13. 13.
    Friedmann E, Maman I (2012) The boost variant library.
  14. 14.
    Gurtovoy A (2012) The boost metaprogramming library.
  15. 15.
    Guzman J, Marsden D, Schwinger T (2012) The boost fusion library.
  16. 16.
    GNU (2012) GNU Multiple precision arithmetic library (GMP).
  17. 17.
    Stroustrup B (2000) The C++ programming language. Addison-Wesley, Boston, USAGoogle Scholar
  18. 18.
    Banahan M, Brady D, Doran M (1991) The C book. Addison Wesley, Boston, USAGoogle Scholar
  19. 19.
    Gregor D, Troyer M (2012) The boost MPI library.
  20. 20.
    Ramey R (2012) The boost serialization library.
  21. 21.
    Drepper U (2007) What every programmer should know about memory. Linux Weekly NewsGoogle Scholar

Copyright information

© Springer Science+Business Media Dordrecht 2013

Authors and Affiliations

  • Josef Weinbub
    • 1
  • Karl Rupp
    • 1
  • Siegfried Selberherr
    • 1
  1. 1.Institute for MicroelectronicsTechnische Universität Wien WienAustria

Personalised recommendations