Supercomputing and Computation
Engineering of Scientific Software
Contact David Bernholdt
The development and use of modern computational science and engineering software offers complex challenges, especially on high-end massively parallel computers. Within increasingly multidisciplinary research teams, computer scientists help address issues related to the programmability, performance, resilience, usability, and other aspects of scientific software. While each application has many distinctive aspects, there are also many commonalities. Computer scientists interested in the engineering of scientific software, therefore, operate at multiple levels. "Embedding" in project teams allows us to work deeply with a given application, addressing issues which may be specific to that application, or may be more general. By working across multiple applications, often over time, we have the opportunity to transfer ideas and solutions from one domain to another, and we develop the breadth of experience to identify the abstractions that are common to many disciplines, and points where specialization is required. In this way. over time, we can continually improve our approaches and tools for engineering software.
Because the challenges to engineering scientific software are widely varied, so too are the associated computer science research results. A few recent examples in the Computer Science and Mathematics Division include:
The development of software architecture principles and related software infrastructure to facilitate the flexible assembly of complex modeling and simulation codes from smaller modules using component and service-oriented architecture (SOA) approaches.
Simplifying the use of complex software by developing tools that help automate scientific workflows, and graphical front-end environments for the creation, execution, monitoring, and post-analysis of simulations.
Developing software frameworks and new algorithms which allow applications to expose and utilize greater levels of concurrency in order to scale better and make better use of modern massively parallel computers.
Developing techniques for intelligent restart of failed tasks in coupled multiphysics simulations to provide better resource utilization and reduced turnaround time.
Tools and techniques to increase the portability and performance, of applications across a variety of computational platforms, often with very different architectures and performance characteristics.
Tools and techniques to simplify the programming of complex applications on diverse hardware platforms.
Our interactions with scientific applications also often help to motivate and validate many of our research thrusts, such as resilience, program translation, and performance engineering.