Mike Heroux Sandia National Laboratories

Professional Organizations and Committees

  • SIAM - Member, Society for Industrial and Applied Mathematics.

  • ACM - Member, Association of Computing Machinery.


  • Trilinos - Trilinos is an effort to develop parallel algorithms and libraries within an object-oriented software framework for the solution of large-scale, complex multi-physics engineering and scientific applications.

  • HPCG - A benchmark code intended to eventually serve as an alterative ranking of the TOP 500 systems.

  • Mantevo - A project focused on HPC application performance analysis, prediction and improvement with a special interest in the development of tools and portable software for computer systems analysts and designers who are developing next-generation computer systems and related software. An additional focus is establishing a feedback loop to application developers so that their applications can improve in design and implementation.

High Performance Computing

  • Unstructured Parallel Sparse Matrix Computations - The most common theme of my professional career has been this area. I have a strong interest in all aspects of this topic, especially parallel preconditioned iterative methods, floating point issues for large-scale computations, parallel partitioning tools, application programmer interfaces and object-oriented techniques. My efforts on the BLAS Technical Forum, the Equation Solver Interface Forum, the Cray SITRSOL library, Aztec and now the Trilinos Project are all focused in this area.

  • Extreme-scale Computer Architecture Design - Future computing systems are always pushing architecture limits, but this push must be informed by algorithms and application design concerns. Furthermore, as architectures evolve, algorithms, libraries and applications must anticipate how to respond to these changes. The dialogue between system architects and algorithms/applications developers has always been a strong interest for me.

  • Programming for emerging manycore and accelerator architectures - Related to emerging architectures is the issue of how to program them. I have always been interested in practical solutions in compilers, libraries and languages that can improve the programmability of high end computers.

Software Engineering for Scientific Computing

  • Object-Oriented Programming - An important feature of most Trilinos packages is their object-oriented design. Most of the package are written in C++ and make use of the OO features of the language, including class structures and abstract interfaces. Trilinos packages under current development also make extensive use of templates and the Standard Template Library. Beyond the general merits of OO programming, to date the most important benefit of using OO techniques has been the ability keep user interfaces relatively stable while continuing to improve the implementation of our software. Many of the interfaces for Epetra, one of the most mature Trilinos packages, have not change since the early days of the project, even though very substantial improvements have been made to the implementation.

  • Trilinos Package Design - One of most important features of Trilinos is its two-level design, built around integral packages. Each Trilinos package is an independent collection of software with its own self-contained directory structure, build process, documentation, web site, etc. At the Trilinos level, those things that are common to all packages are provided, but in a way that does not force a package to be dependent on Trilinos. Each package can be extracted from Trilinos at a single directory point (Trilinos/packages/package_name) and then built independently from the rest of Trilinos as long as explicit package dependencies (if any) are satisfied.

  • Software Quality Assurance and Engineering (SQA/SQE) - Advanced Scientific Computing (ASC) efforts, a major funding source for the development of Trilinos, has strong SQA/SQE requirements. Historically, in my opinion, mathematical software developers have not had a strong emphasis on software engineering practices. This does not mean that code was poorly written. On the contrary, there are numerous well-written packages, but most do not have rigourous, documented, repeatable processes for producing software. Many do not even have a repository or issue tracking software for maintaining the integrity of the software base. One of the main contributions that Trilinos provides to packages is a ready-made infrastructure for support SQA/SQE processes. Much of my work has focused on establishing these practices and developing tools and policies that are practical and attractive to developers of mathematical software.