Tutorial: Performance-Portable C++ Programming with RAJA
With the rapid change of computing architectures, and variety of programming models, the ability to develop performance portable applications has become of great importance. This is particularly true in large production codes where developing and maintaining hardware specific versions is untenable.
To simplify the development of performance portable code, we describe RAJA, a C++ library that allows developers to write single-source applications that can target multiple hardware and programming model back-ends. RAJA decouples loop bodies and execution via programming model-specific implementations using standard C++11 features. This approach enables developers to tune loop patterns, rather than individual loops, and enables applications to be tailored at compile time to specific compute architectures. In addition, RAJA provides abstractions for a wide range of loop structures found in numerical algorithms, reductions, data layouts and views, iteration spaces, atomic operations, scans, etc. In this talk, we discuss the motivation behind RAJA and goals through application inspired examples which will allow attendees to understand how RAJA may be used in their own applications.