Portable, Scalable, and Reproducible Scientific Computing: from Cloud to HPC

Instructors: Anagha Jamthe, Steve Black, Joon Yee Chuah, Joe Stubbs

This tutorial will focus on providing attendees exposure to cutting-edge technologies for building reproducible, portable and scalable scientific computing workloads, which can be easily run across Cloud and HPC machines. This tutorial will explain how to effectively leverage state-of-the-art open source technologies such as Jupyter, Docker and Singularity within the NSF-funded Tapis v3 platform, an Application Program Interface (API) for distributed computation. A brief introduction to each of these technologies will be covered in the tutorial, making it easy for audiences with little or no prior experiences to understand the concepts. We will include several hands-on exercises, which will enable the attendees to build a complete scientific workflow that can be seamlessly moved to different execution environments, including a small virtual machine and a national-scale supercomputer. Using techniques covered in the tutorial, attendees will be able to easily share their results and analyses with one or more additional users. This tutorial will make use of a specific machine learning image classifier analysis to illustrate the concepts, but the techniques introduced can be applied to a broad class of analyses in virtually any domain of science or engineering.


Containers at TACC

Instructors: Erik Ferlanti, John Fonner, Ernesto Lima

Software containers are an important common currency for portable and reproducible computing. Learn best practices on building, using, and sharing Docker and Singularity containers in this hands-on workshop. Also learn how to run those containers on TACC HPC systems, including MPI and GPU aware containers. Topics will include: Docker and Singularity basics, containerizing your own code, running containers at TACC (including MPI parallelism and GPU enabled containers), integration with BioContainers and the module system


CUDA Programming: The basics concepts in C and Fortran

Instructor: Lars Koesterke

Effective CUDA code differs from conventional code as it has to reflect and accommodate architectural features of GPUs. In this tutorial I will discuss several key elements of the hardware and the software, i.e. how the execution of a loop matches the grid and block structure of the hardware, how user-managed cache memory is leveraged for speed, and how data is transferred asynchronously from host to device. The tutorial is intended for intermediate-level C/C++ and Fortran programmers who are interested in making the first steps towards CUDA programming for GPUs.