{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## N Ways to GPU Programming - MD\n", "\n", "## Learning objectives\n", "With the release of CUDA in 2007, different approaches to programming GPUs have evolved. Each approach has its own advantages and disadvantages. By the end of this bootcamp session, students will have a broader perspective on GPU programming approaches to help them select a programming model that better fits their applications' needs and constraints. The bootcamp will teach how to accelerate a popular algorithm of Radial Distribution Function (RDF) using the following methods:\n", "* Standard: C++ stdpar, Fortran Do-Concurrent\n", "* Directives: OpenACC, OpenMP\n", "* Frameworks: Kokkos\n", "* Programming Language Extension: CUDA C, CUDA Fortran\n", "\n", "Let's start with testing the CUDA Driver and GPU you are running the code on in this lab:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "!nvidia-smi" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "### Bootcamp Outline\n", "\n", " We will be following the cycle of Analysis - Parallelization - Optimization cycle throughout. To start with let us understand the Nsight tool ecosystem: \n", "\n", "- [Nsight Systems](../../profiler/English/jupyter_notebook/nsight_systems.ipynb)\n", " - Overview of Nsight profiler tools\n", " - Introduction to Nsight Systems\n", " - How to view the report\n", " - How to use NVTX APIs\n", " - Optimization Steps to parallel programming \n", " \n", "- [Nsight Compute](../../profiler/English/jupyter_notebook/nsight_compute.ipynb)\n", " - Introduction to Nsight Compute\n", " - Overview of sections\n", " - Roofline Charts\n", " - Memory Charts\n", " - Profiling a kernel using CLI\n", " - How to view the report\n", " \n", "We will be working on porting a radial distribution function (RDF) to GPUs. Please choose one of the programming language to proceed working on RDF. Note: Learn about all terminologies used throught the notebooks in the [GPU Architecture Terminologies](C/jupyter_notebook/GPU_Architecture_Terminologies.ipynb) notebook.\n", "\n", "#### C Programming Language\n", " \n", "Please read the [RDF Overview](C/jupyter_notebook/serial/rdf_overview.ipynb) to get familiar with how this application works.\n", "\n", "Below is the list of GPU programming approaches we will be covering during this course, click on the link below to start exploring:\n", " \n", "1. [stdpar](C/jupyter_notebook/stdpar/nways_stdpar.ipynb)\n", "2. [OpenACC](C/jupyter_notebook/openacc/nways_openacc.ipynb)\n", "\n", "3. [OpenMP](C/jupyter_notebook/openmp/nways_openmp.ipynb) \n", "4. [CUDA C](C/jupyter_notebook/cudac/nways_cuda.ipynb) \n", "\n", "To finish the lab let us go through some final [remarks](C/jupyter_notebook/Final_Remarks.ipynb)\n", "\n", "#### Fortran Programming Language\n", "\n", "Please read the [RDF Overview](Fortran/jupyter_notebook/serial/rdf_overview.ipynb) to get familiar with how this application works.\n", "\n", "Below is the list of GPU programming approaches we will be covering during this course, click on the link below to start exploring:\n", "\n", "1. [do-concurrent](Fortran/jupyter_notebook/doconcurrent/nways_doconcurrent.ipynb)\n", "2. [OpenACC](Fortran/jupyter_notebook/openacc/nways_openacc.ipynb)\n", "\n", "3. [OpenMP](Fortran/jupyter_notebook/openmp/nways_openmp.ipynb) \n", "4. [CUDA Fortran](Fortran/jupyter_notebook/cudafortran/nways_cuda.ipynb) \n", "\n", "To finish the lab let us go through some final [remarks](Fortran/jupyter_notebook/Final_Remarks.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "### Bootcamp Duration\n", "The lab material will be presented in a 8hr session. Link to material is available for download at the end of the lab.\n", "\n", "### Content Level\n", "Beginner, Intermediate\n", "\n", "### Target Audience and Prerequisites\n", "The target audience for this lab is researchers/graduate students and developers who are interested in learning about programming various ways to programming GPUs to accelerate their scientific applications.\n", "\n", "Basic experience with C/C++ or Fortran programming is needed. No GPU programming knowledge is required.\n", "\n", "-----\n", "\n", "#
[HOME](../../nways_start.ipynb)
\n", "-----\n", "\n", "\n", "## Licensing \n", "\n", "This material is released by OpenACC-Standard.org, in collaboration with NVIDIA Corporation, under the Creative Commons Attribution 4.0 International (CC BY 4.0)." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5" } }, "nbformat": 4, "nbformat_minor": 4 }