Computer simulations have emerged as a cost efficient complement to laboratory experiments, as computers have become increasingly powerful. The aim of the present work is to explore the ideas of some state of the art software development practices, and ways in which these can be useful for developing high performance research codes. The introduction of these practices, and the modular designs that they give rise to, raises issues regarding a potential conflict between runtime efficiency on one hand and development efficiency on the other. Flexible software modules, based on mathematical abstractions, will provide support for convenient implementation and modification of numerical operators. Questions still remain about whether such modules will provide the efficiency which is required for high performance applications. To answer these questions, investigations were performed within two different problem domains. The first domain consisted of modular frameworks for the numerical solution of Partial Differential Equations. Such frameworks proved a suitable setting, since several of my research questions revolved around the issue of modularity. The second problem domain was that of symmetry exploiting algorithms. These algorithms are based on group theory, and make ample use of mathematical abstractions from that field. The domain of symmetry exploiting algorithms gave us opportunities to investigate difficulties in combining modularity based on high level abstractions with low level optimizations using data layout and parallelization. In conclusion, my investigation of software development practices for the area of high performance computing has proved very fruitful indeed. I have found that none of the concerns that were raised should lead us to refrain from the use of the practices that I have considered. On the contrary, in the two case studies presented here, these practices lead to designs that perform well in terms of usability as well as runtime efficiency.
[1]
Malin Ljungberg.
High performance generative programming with a Fortran 95 application
,
2005
.
[2]
Krister Åhlander,et al.
Software design for finite difference schemes based on index notation
,
2006,
Future Gener. Comput. Syst..
[3]
Michael Thuné,et al.
Mixed C++/Fortran 90 implementation of parallel flow solvers
,
2001
.
[4]
Ronald F. Boisvert,et al.
Families of High Order Accurate Discretizations of Some Elliptic Problems
,
1981
.
[5]
John F. Karpovich,et al.
A parallel object-oriented framework for stencil algorithms
,
1993,
[1993] Proceedings The 2nd International Symposium on High Performance Distributed Computing.
[6]
Magne Haveraaen,et al.
Coordinate free programming of computational fluid dynamics problems
,
2000,
Sci. Program..
[7]
Bjarne Stroustrup,et al.
Concepts: linguistic support for generic programming in C++
,
2006,
OOPSLA '06.
[8]
Douglas Gregor,et al.
C++ Templates: The Complete Guide
,
2002
.
[9]
D. Quinlan,et al.
Overture: an objectoriented framework for solving partial differential equations on overlapping grids
,
1998
.
[10]
Magne Haveraaen,et al.
On the Role of Mathematical Abstractions for Scientific Computing
,
2000,
The Architecture of Scientific Software.
[11]
Michael Thuné,et al.
Design and usability of a PDE solver framework for curvilinear coordinates
,
2006,
Adv. Eng. Softw..
[12]
Magne Haveraaen,et al.
CodeBoost : a framework for transforming C++ programs
,
2001
.
[13]
L. Collatz.
The numerical treatment of differential equations
,
1961
.
[14]
Kurt Otto,et al.
A unifying framework for preconditioners based on fast transforms
,
1999
.