Computations in Lattice Field Theory are frequently very expensive, and require significant computing resources to perform in a reasonable time. As such, it is important that you are able to use these resources efficiently and effectively.
In this unit you will learn how to efficiently run existing software on high-performance computing (HPC) resources, what aspects of modern hardware design affect the performance of our lattice software, and how to write new software that is both efficient and performant on latest- and next-generation HPC facilities.
Beyond the Essentials, this unit assumes you have a computer (running Windows, Linux, or macOS) that you control and know how to use. Later sections assume some knowledge of a compiled programming language like C, C++, or Fortran.
SSH, keys*
Unix shell, shell scripts*
Job schedulers and scripts*
Modules, compilers*
Sockets, cores, threads*
Memory capacity and connectivity*
Memory latencies, CPU caches, the TLB
Memory bandwidth, arithmetic intensity, roofline models
Vectorisation/SIMD
Pipelining, branch prediction
Specific vendor quirks (Intel, AMD, Arm)
GPU strengths and weaknesses*
GPU–host and GPU–GPU connectivity*
GPU abstract structure: SMs, warps, threads
GPU memory hierarchy
Pipelining
Specific vendor quirks (NVIDIA, AMD, Intel)
Strong and weak scaling studies*
On-node vs. off-node scaling*
Interconnect topologies*
Infiniband specifics (SHARP, etc.)
Interaction between interconnects and GPUs
Types of storage (NFS, high-speed networked, node-local, RAM disk, archival)*
File striping*
Parallel I/O
Topics marked with a * are recommended for anyone who will be running software for LFT. Other topics are relevant to those who will be writing simulation or measurement code for LFT.
Some details of connecting to and using a HPC machine will be specific to the facility you’re using; your HPC centre should provide documentation on these aspects.