Migrating High Performance Applications to the Armv8-A Architecture Sponsored Content by Arm
In recent months, the HPC market has been waiting to see how Arm will drive innovation for High Performance Computing. Arm and its partners have been working hard to enable a greater variety of competitive hardware solutions, providing the innovation and technology choice that’s so desperately needed to solve next generation scientific problems and workloads. With Arm-based infrastructure hardware emerging from key partners such as Cavium and Qualcomm, the final step is making sure that the journey to the Arm architecture has a viable and straightforward porting path for users' applications.
By acquiring Allinea and announcing support for openHPC in 2016, Arm demonstrated a firm commitment to putting resources into nurturing an ecosystem of commercial and open-source software support for those migrating to Arm. Now, with the addition of the Allinea tools and the launch of a new Fortran Compiler, suddenly Arm has a very strong offering for HPC. The cross-platform interoperability of the Allinea debugger and profiler (fully supported on most HPC systems and architectures) is essential for making a transition to Arm as smooth as possible. As an HPC developer, you can keep using the tools you have come to know, trust and rely on for years, regardless of the vendor or system you choose. It’s all part of a plan to make porting your applications to Arm totally effortless and (dare we say)…boring!
To prove the point, we tasked some of our HPC applications consultants with devising a quick guide to migrating to Armv8-A. They concluded that the main hurdle users are likely to face is related to compilation scripts: most HPC applications were never compiled for Arm, and Makefiles need to be tweaked to call the right compiler and options if AArch64 is the underlying architecture. In all other areas, you should actually expect application porting to be seamless.
Consequently, the quick guide was adapted to become more about what to do to optimize the performance of applications running for the first time on Arm. The advice covers a similar route if you were to change to any other architecture: a few basic steps to help you ensure your application still does the right thing and performs well.
- Find out whether the community has done this already. Refer to the shared repository of available applications (https://gitlab.com/arm-hpc/).
- Find a few representative test cases that you know and understand well
- Analyze your application performance and scalability with Performance Reports, on these test cases
- Note the compiler flags you use
Once these first steps are completed, it’s time to start the “performance porting” work. Relying on the Arm Compiler for HPC and Forge (the combined debugger and profiler), you’ll need to:
- Ensure the application correctness, by:
- Tweaking optimization options
- Debugging the program with the DDT debugger, checking for memory errors
- Identify and address bottlenecks with the MAP profiler
As Forge is a fully scalable product, you can (and should) test your applications at various scale. When you’re satisfied with the performance and the scalability of your application on Arm, use Performance Reports to illustrate the performance gains and advertise your success stories around you!
With the Arm architecture and tools easily accessible, you’re ready to deploy and the next stage in the journey is much more exciting. We look forward to hearing from users in all areas of HPC who’ll be experimenting with things that have never been tried before - and finding totally new outcomes. To support those users, we’re planning a program of work to port key applications and optimize the most important workloads. Meanwhile, our HPC domain experts, an ever-growing ecosystem, and our own strengthening range of commercial tools, training and support, means we’re ready to walk alongside the HPC community, making the transition to Arm both smooth and successful.
Join us on our collaborative journey here: https://gitlab.com/arm-hpc/packages/wikis/home