Many large-scale HPC applications are written by scientists who are experts in their specific research fields but have limited knowledge of software engineering techniques. Software is often developed in an ad-hoc manner, with little attention given to software engineering aspects such as software architecture, extensibility and maintainability. As a result, software developments take more time than necessary and further developments or reuse of existing software become very difficult tasks.

This tutorial is aimed at researchers who have practical experience with some high-level programming language, such as C, C++, Java or Python, and want to develop HPC software in a team environment. Learn how you can use modern software development tools to increase your work efficiency and to produce software which is more reliable and can be maintained and extended more easily later on.

After a short introduction of the basics, the tutorial takes a large-scale HPC software development at the German Aerospace Center (DLR) as an example to explain the software development process, starting with the requirements analysis and going all the way to a first software release. You will see online demos of an open-source integrated development environment, using Eclipse as the framework and tool plugins for various software engineering tasks. For example, you will learn how you can keep track of bugs and development issues with Mantis, and how Subversion helps you to organize code versions and to co-operate with your team colleagues.

Level of tutorial

Introductory: 20%
Intermediate: 50%Advanced: 30%

PrerequisitesTutorial attendees should have a programming background and should be interested in mid- to large-scale HPC software development in a team environment. They are expected to be familiar with a high-level programming language, such as C, C++, Java or Python. The source code examples are all written in Python. Experience with specific software development tools, such as integrated development environments, version control systems, or bug tracking systems would be useful but not mandatory.