Would you like to learn the basics of high-throughput and parallel computing? Do you want hands-on high performance training that you can apply to your research? If so, then we invite you to attend one or more sessions in ARCS' Summer Education Series. The sessions are free for all UVA faculty, staff, and students. Topics include how to program in Python, scientific visualization, modern Fortran, data analytics, MPI for distributed systems, OpenMP for multicore systems, and more! Lectures on relevant topics will be delivered during the morning sessions; afternoon sessions offer hands-on practice. Continental breakfast and snacks will be provided. Attendees are responsible for their own lunches.
May 30-June 1: Programming in Python--Topics include fundamental data types; simple expressions; lists and list operators; input and output to the console; conditionals and looping; writing functions to perform specific tasks; understanding the scope of variables; creating modules and namespaces; reading from and writing to files; tuples and dictionaries; NumPy, SciPy, and Matplotlib.
June 4: Intermediate Python--Topics include derived types and classes; constructors and methods; data hiding; inheritance; polymorphism.
June 5: Software Design and Testing Principles--An overview of how to manage software projects. Topics include development processes for software; modularizing and organizing code; methodologies of code testing; using version control, specifically git.
June 6: Scientific Visualization--An introduction to tools for rendering images. Topics include advanced visualization techniques in Python; ParaView; VAPOR.
June 7-8: Compiled Languages (C++ and Fortran 2003)--An introduction to the basics of programming in a compiled language. Topics include use of a compiler; differences between compiled languages and interpreted languages; data types and typing; arrays and array operations input and output; conditionals and loops. Prerequisite: Some programming experience
June 11: Introduction to High-Performance Computing--An overview of how to use a High-Performance Computing (HPC) cluster. Topics include Unix and BASH; resource managers; optimization of serial codes; submitting serial jobs to the cluster.
June 12: High-Performance Data Analytics--An overview of data analytics using an HPC Cluster. Topics include data transfer and storage; introduction to machine learning, including tensorflow.
June 13-14: Parallel Programming Using MPI--An introduction to parallel computing using the message passing interface (MPI). Includes details of how MPI works and how to use MPI for global communications and point-to-point communications.
June 15: Parallel Programming Using OpenMP and Accelerators--An introduction to parallel programming using multi-core (i.e., shared memory) models. A brief introduction to accelerators, such as general purpose GPUs.