-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Welcome to the Modern CPU-GPU Wiki Page, an effort to delineate contemporary high-performance computing (HPC) practices on heterogeneous system architectures. The goal of this project is to analyze the performance and portability of 4 programs written using C++ and Kokkos, while also creating a useful code base that demonstrates how to write single-source, parallel programs that are able to compile for the CPU or the GPU without the need to rewrite the code.
For Intermediate Users: I have included fundamental explanations of necessary topics, short and sweet example programs, technical discussions of certain implementations, and performance analysis of my results on different machine architectures. After reading though this page start here.
For Advanced Users: that do not need an exposition, you can view the program source code here, the performance analysis here, or you can jump to the build section here to reproduce this analysis on a cluster of your own. Lastly, please do not hesitate to let me know how your results compare!
As modern HPC systems, namely supercomputers, increase in scale and heterogeneity, so does the difficulty of efficiently leveraging a broader range of diversified compute resources. Thus, the increase in the number of heterogenous system architectures (meaning those that contain at least one accelerator such as a GPU), along with the variance in the manufacturer of the GPU chip itself (e.g., NVIDIA, AMD, Intel, etc.) have created new obstacles for large-scale scientific applications. These obstacles are primarily regarding the applications' development, maintenance, and capability to effectively exploit diverse system architectures in order to achieve theoretical performance in a hardware agnostic way.
High performance computing applications currently have a large demand for solutions that can perform parallel execution on CPUs and/or GPUs, without having to rewrite thousands of lines of code to cope with the architecture of the system its running on.
Create a unified programming model to simplify modern HPC codes by expressing generic parallelism via single-source implementations that are capable of leveraging any of the current and future heterogenous systems at compile-time.
By utilizing Kokkos (a C/C++ Performance Portability Programming Model) designed by Sandia National Laboratories, we can address the problem of increasing heterogeneity seen in modern systems by abstracting diverse CPU and GPU targets without losing performance.
Wiki
Fundamental Concepts
- What is HPC?
- How Do Computers Solve Problems?
- Serial to Parallel speedup example
- Shared Memory Architecture
- Heterogenous Architectures
Getting Started with Kokkos