Introduction


  • The HPC User lesson will help to understand basic concepts affecting performance in programming.

Profiling Code for Performance


  • The time function can always be used externally to measure performance but has limitted accuracy of around 1 millisecond.
  • Internally there are precise clock routines that can be used to measure the performance of each part of a code. These are different for each programming language, but the use is always the same.
  • Scaling studies can help determine how many cores or nodes we can efficiently use for a parallel job of a given problem size.
  • Measuring memory use can be done from outside a program, but you may also be able to calculate total memory for simple programs.

Performance Concepts


  • A computer’s view of code is more complex than a user’s view.
  • It’s important to understand a little about what goes on when code actually runs, but you don’t need to be able to program at that level.
  • Whenever possible, use code written and optimized by experts instead of writing your own version.

Parallel Computing Concepts


  • What techniques can be used to speed up scalar code?
  • How to improve input and output?
  • Learn about the difference between multi-core and multi-node programs.
  • Understand the fundamentals of locks, barriers, and forks.
  • Practice doing a scaling study.

Multi-Threaded Programs


  • Multi-threaded computing is powerful and fairly easy to use but only works on one compute node.
  • Understand key factors that can limit the efficient scaling of multi-threaded programs.

Message-Passing Programs


  • Distributed-memory computing is very flexible, extremely scalable, but more difficult to program.
  • Understand key factors that can limit the efficient scaling of message-passing programs.

Language Survey


  • Performance is just one criteria we need to understand when choosing the best language for a given project.

C and C++ Languages


  • Learn about the characteristics of C/C++

The Fortran Language


  • Learn about the characteristics of modern Fortran

The Python Language


  • Learn about the characteristics of the Python language.
  • When performance is important always use optimized libraries!!!

The R Language


  • Learn about the characteristics of the R language.

The Matlab Language


  • Learn about the characteristics of the Matlab language.

Array Jobs


  • Array jobs provide an easy way submit and manage large numbers of similar jobs.
  • Array jobs are another way to do parallel computing, but by running lots of small jobs individually.
  • Test your script carefully on a few array IDs before submitting the full job.

Accelerating Scientific Computing with GPUs


  • Start to become comfortable with using GPUs on an HPC system.

High-Throughput Computing


  • Explore the basics of HTC computing.

HPC Resources


  • There are many HPC resources that are totally free for the asking.