DescriptionOpenMP 1.0 was released in 1997 when the primary concern was symmetric multiprocessors. Over time, hardware has evolved with more complex memory hierarchies forcing us to embrace NUMA machines and work to understand how OpenMP fits in with distributed memory systems.
Current trends in hardware bring co-processors such as GPUs into the fold. A modern platform is often a heterogeneous system with CPU cores, GPU cores, and other specialized accelerators. OpenMP has responded by adding directives that map code and data onto a device. We refer to this family of directives as the target directives.
In this hands-on tutorial, we will explore these directives as they apply to programming GPUs. We assume people know the fundamentals of OpenMP (perhaps by taking the OpenMP Common Core tutorial at SC19 the day before) so we can focus on deeply understanding the target directives and their use in complex application programs. We expect students to use their own laptops (with Windows, Linux, or OS/X) to connect to remote servers with GPUs. You may also want to load an OpenMP compiler onto their laptops before the tutorial. Information about OpenMP compilers is available at www.openmp.org.