The MolSSI’s full education mission statement can be found here.
Previous knowledge of High-performance Computing (HPC) basic concepts are helpful but not required for starting this course.
Nevertheless, we encourage students to take a glance at our Parallel Programming
tutorial, specifically, Chapters 1, 2 and 5 for a brief overview of some of the fundamental concepts in HPC.
Basic familiarity with Bash, C and C++ programming languages is required.
The following NVIDIA CUDA-enabled GPU devices have been used throughout this tutorial:
What is heterogeneous parallel programming? Where did it come from and how did it evolve?
What are the main differences between CPU and GPU architectures and their relation to parallel programming paradigms?
What is CUDA? Why do I need to know about it?
What is thread hierarchy in CUDA?
How can threads be organized within blocks and grids?
How can the data be transferred between host and device memory?
How can we measure the wall-time of an operation in a program?
What is NVCC compiler and why do we need it?
Can multiple GPU and CPU source code files be simultaneously compiled with NVCC?
How does NVCC distinguish between the host and device code domains and handle the compilation process?
How can runtime errors be handled during a CUDA program execution?
What is CUDA execution model?
How insights from GPU architecture helps CUDA programmers to write more efficient software?
What are streaming multiprocessors and thread warps?
What is profiling and why is it important to a programmer?
How many profiling tools for CUDA programming are available and which one(s) should I choose?
The actual schedule may vary slightly depending on the topics and exercises chosen by the instructor.