In the world of high performance computing (HPC), performance portability is a goal pursued by many developers. However, with the diversification of computing platforms, this goal faces many challenges. Performance portability is not just about making an application run on different hardware platforms, but more importantly, how to maintain its compatibility without compromising performance. To date, there is no universal standard to quantify and evaluate performance portability, which makes it difficult for developers when designing software.
Performance portability represents the assumption that a developer's single code base will perform well on new architectures and maintain acceptable performance limits on a variety of current architectures that have not yet been tested.
The definition and measurement of performance portability is hotly debated. Some argue that it's primarily application portability, while others insist that source code portability is the key. Especially in the current situation where hardware is changing with each passing day, developers need to consider how to enable their products to continue to run on multiple platforms. The U.S. Department of Energy's Supercomputing Program (ECP) emphasizes this point as they need to create a compatible computing ecosystem for different hardware architectures.
It is generally believed that "one code can run well on multiple architectures, which is performance portability."
When evaluating performance portability, developers typically consider two factors: portability and performance. Portability can be measured by looking at the lines of code used on different architectures, while performance can be determined by comparing platform-optimized versions with portable versions. Despite these measurement methods, the industry still lacks transparent standards, which makes it difficult for developers to clearly understand how to achieve the best performance portability.
At the 2016 DOE (U.S. Department of Energy) Portability Conference, participants engaged in a heated debate on performance portability. Many well-known developers and scientists attended the meeting to share new insights and requirements for performance portability. It is worth noting that there is a view that the performance portability provided by future parallel programming models will be more significant than what the applications themselves can provide.
As mentioned in the meeting, "A code is portable when the application team considers it portable."
Faced with diverse hardware platforms, developers need to find a suitable framework to support their code. Well-known frameworks such as OpenCL, SYCL, and OpenMP claim to facilitate functionality portability. These frameworks support parallel programming on multiple platforms, allowing developers to program in multiple languages. However, in addition to frameworks, there are also non-framework solutions, such as self-tuning and domain-specific languages, which can also help improve performance portability.
In short, the issue of performance portability is becoming increasingly important in high-performance computing because it directly affects the developer's work efficiency and the sustainable development of applications. As computing needs change in the future and computing technology advances rapidly, how should developers adapt and face these challenges?