ARC in the Classroom

ARC in the Classroom
Classroom Presentations on High Performance Computing

The computational scientists at Advanced Research Computing are
available as guest presenters for classes with a computational component.
Some presentations are available as lectures, while others involve
hands-on workshops in which students work through some programming tasks.

While presentations have been prepared in advance, a guest lecturer can usually make reasonable adjustments to the material to better fit the background and needs of a particular class. Generally,
the presentation will include slides and a number of sample programs, which can be inspected by the class instructor, and made available to the students.

Most lectures can fit into one class period, that is, either a 50 minute
or 75 minute time slot. Thus, they are fairly easy to schedule as a
regular class session in the usual classroom. Hands-on workshops usually require more time (perhaps a 2 or 4 hour slot), perhaps a different meeting place, and often two ARC staff members, to deal with the inevitable individual problems and questions. For workshops, students should have their laptop computers available; if ARC systems are to be accessed, temporary computer accounts will be made available.

The following lectures and workshops are offered, subject to the availability of lecturers. To inquire about arranging a classroom lecture or workshop, contact Alana Romanella at

If your class has a substantial visualization component, then you might be interested in the related Visualize This! program, in which the ARC Visualization group, in cooperation with the instructor, presents a customized workshop on visualization, tailored to the level, interests, and needs of the class.

Building an HPC Cluster using Raspberry Pi's,
one class period.
Think you need several thousand dollars to build a computing cluster?
Think again! With low-cost Raspberry Pi's, you can construct your own personal system on a budget. Learn the fundamentals of HPC such as networking, schedulers, and MPI in a hands-on environment.
Presenter: Nathan Liles.
CUDA Test Drive,
one class period.
CUDA is an extension of C that allows programmers to take advantage of the enormous parallel potential of graphics processing units (GPU's). In this lecture, several simple programming tasks are presented as C programs. Each program is then transformed into a CUDA program and executed on an ARC cluster computer. Explanations are provided for the code transformations and the necessary batch files. Some suggestions are made about the underlying complexity of the CUDA thread and block model. Students should be familiar with C.
Presenter: John Burkardt.
Data Science with Python,
roughly 4 hour workshop.
This class will cover the basics of using Python Pandas for your
Data Science problems. You will also learn how to parallelize Python
code using the 'multiprocessing' module. We will use Jupyter
notebooks for the hands-on examples. Python version 2.7.12 for
Anaconda (version 2.3.0) is recommended as an installation to
follow along in class. Topics include file reads; creating,
accessing and modifying dataframes; formatting and dealing with
missing data; Filter/Apply/Map, Group and Query for data selection
and manipulation; the statistical functions in Pandas.
Presenter: Srijith Rajamohan.
Data Visualization,
roughly 2 hour workshop.
This session will begin with a presentation of visualization concepts, followed by a hands-on session using the Plotly library for
interactive visualization. A basic knowledge of python is essential for this class. This class is an instance of the Visualize This! program.
Presenter: Srijith Rajamohan.
Debugging and Profiling with GDB and GPROF,
one class period.
A programmer constantly struggles to ensure that a program is correct and efficient. When a program misbehaves, a programmer's simplest tools involve inserting print statements and modifying bits of the code. But often, the cause or location of the problem eludes such an approach. The GNU compiler family includes GDB, a powerful tool that allows the user to diagnose run-time errors, to step through program execution and inspect or modify data, and GPROF, a program that can monitor the execution of a program and identify hot spots (frequently executed areas of code) and the amount of time spent in various functions. Demonstrations will be made of how these utilities work and what they tell the programmer.
Presenter: Nathan Liles.
Faster Code for Free: Accelerated Linear Algebra Libraries,
one class period.
Many programs rely on linear algebra operations such as matrix multiplication or factorization. Modern libraries such as MKL and ATLAS are optimized for given CPU architectures, enabling user programs that are faster to write and execute. This class gives an overview of these libraries, and a demonstration of them in action. Students should be familiar with C, and with common
linear algebra procedures.
Presenter: Justin Krometis.
Introduction to CUDA Programming,
one class period.
GPUs have become a powerful and popular accelerator in large scale computing. Nvidia’s CUDA programming language allows developers to take advantage of this massively parallel computing hardware. Topics covered include a general discussion of SIMD (Single Instruciton Multiple Data) devices, overview of CUDA architecture and capabilities, a basic CUDA program example, review of other higher level libraries and languages that use CUDA. GPU's are available on the Virginia Tech clusters Cascades and NewRiver.
Presenter: James McClure
Hands-on GPU-R,
2 hour workshop.
This workshop introduces the ways in which graphics processing units (GPUs) can accelerate computations in familiar progamming languages such as R. We will explain the basic ideas behind a GPU, show how a programming language can, with a few extensions, transfer work to a GPU and pull results back, and then run some demonstration programs. A natural followup to this class would be the classes on CUDA programming, for optimal use of the GPU.
Presenter: Bob Settlage.
Introduction to ARC,
one class period.
This lecture outlines the services offered by Virginia Tech's Advanced Research Computing facility, and gives a nice overview for those who are just starting to work on ARC systems, or
who are considering getting an account. Topics include the application process, the Unix environment, file transfer, module commands, batch processing, parallel processing options, the problem reporting system, and differences between the various
Presenter: John Burkardt, Justin Krometis, Bob Settlage.
MPI Programming: an Introduction,
one class period.
MPI is introduced as a way to carry out parallel computations in a distributed memory environment. We present the most basic MPI functions: init, size, rank, broadcastsend, recv, finalize, and show how useful programs can be constructed with just these tools. We show how MPI programs can be timed, and analyzed for scalability. Students should be familiar with C, since all programming examples will be in that language.
Presenter: James McClure
MPI Test Drive,
one class period.
In many cases, the advantages of MPI's parallel processing capabilities are built in to a standalone research program, such as ABAQUS, ANSYS, LAMMPS or VASP. This means that instead of worrying about writing MPI code, a user can concentrate on the more routine issues of getting the input data set up, writing an appropriate batch file, and doing timings to analyze performance. This lecture goes through the steps of running a LAMMPS problem on an ARC cluster machine.
Possible presenters: John Burkardt.
Numerical Computing in Julia,
one class period.
Julia is a high-level, high-performance dynamic programming language for technical computing, with a familiar syntax. It provides a sophisticated compiler, distributed parallel execution, numerical
accuracy, and an extensive mathematical function library. Julia's
just-in-time compiler combined with the language's design allow it
to approach and often match the performance of C. This short course will provide an overview of the language, including comparisons with
Matlab, R, and Python.
Presenter: Justin Krometis.
OpenMP Programming: an Introduction,
one class period.
OpenMP is introduced as a way to carry out some kinds of loop operations in parallel in a shared memory system; rules for parallelizable loops is discussed; the syntax for marking up parallel loops are shown; saxpy, jacobi, image processing, and quadrature examples are presented. Students should be familiar with C, since all
programming examples will be in that language.
Presenter: John Burkardt, James McClure.
Parallel MATLAB: an Introduction,
one class period.
The Mathworks has added a number of parallel features to MATLAB. The most accessible is the "parfor" statement, which replaces the sequential execution of a for loop by a parallel procedure. This class provides examples of how to use parfor, how to evaluate the resulting speedup, and issues that may impede or forbid the use of parfor on certain loops. Students should be familiar with MATLAB.
Presenter: John Burkardt, Justin Krometis.
Parallel MATLAB: Intermediate Level,
one class period.
To escape the limitations of the parfor command, the Mathworks has added the SPMD (single processor multiple data) and task computing options, for distributed computing and embarrassingly parallel computing. This presentation shows simple examples of both kinds of computations, and how they can be implemented using MATLAB's Parallel Computing Toolbox. Students should have seen the Introductory class on Parallel MATLAB.
Presenter: John Burkardt, Justin Krometis.
Parallel MATLAB: Advanced Level,
one class period.
MATLAB's Parallel Computing Toolbox is installed on the ARC
clusters. This gives a MATLAB program the possibility of
executing on a large number of processors ... if the program
correctly takes advantage of MATLAB's parallel capabilities.
Moreover, there is a way to connect the user's computer to the
ARC cluster, so that it is possible to smoothly manage the
processes of job submission, job monitoring, and output analysis
entirely from the desktop. This class will show some examples
of the execution of highly efficient parallel MATLAB codes,
and how they can be controlled without having to log in directly
to the ARC system.
Presenter: Justin Krometis.
Parallel R,
one class period.
R is a statistical programming language that has become increasingly
popular in data analysis and statistical applications. This tutorial
will describe how an R user can leverage the parallel computing
capabilities of modern supercomputers to speed up large computations or run large numbers of similar operations, such as Monte Carlo simulations, at the same time. Packages covered will include snow, Rmpi, and pbdR ("Programming with Big Data in R").
Presenter: Justin Krometis.
R Programming: an Introduction,
one class period.
The R programming language is widely used for statistical programming and data analysis in social sciences, bioinformatics, and data analytics. Because of its powerful ability to READ and manipulate data, it has become a common tool for machine learning and big data applications. This lecture will outline how to read data into R, how to write R functions, how to access the many specialized R packages, and some tips for improving efficiency. A natural followup to this class is the "Parallel R" class.
Presenter: James McClure
Remote Computing,
one class period.
A scientific program can run on a cluster as easily as on a desktop;
it's the user who has the harder transition. This class is a step
by step discussion of the new ways of thinking that make remote
computing natural and productive, including: how a cluster is
different from a desktop; why clusters are necessary, and how
they are organized and administered; the linux commands necessary
to get basic tasks done; how to login remotely, and to transfer files;
how computations are organized into a batch file, submitted
to a queue, and managed by the job scheduler.
Presenter: Robert Settlage
Scientific Python,
Roughly 4 hour workshop.
The Python language has exploded in popularity, and the scientific
community has been developed numerous utilities and libraries,
particulary in areas such as big data and machine learning.
This workshop will show why Python is both easy to learn and
powerful to use. We explain the basic syntax and simple commands.
We then explore the libraries NumPy and SciPy for numerics, and
Matplotlib for graphics. We show how a Python program can access
functions written in C.
Presenter: Srijith Rajamohan.
Tensorflow for Machine Learning,
Roughly 2 hour workshop.
TensorFlow is a scalable framework for distributed Machine Learning
applications. In this class, we will cover some of the basics of
Machine Learning and use a Jupyter notebook to perform classification
in TensorFlow. Knowledge of Python is essential for this class.
Presenter: Srijith Rajamohan.
Version Control with GitHub,
one class period
Every computer user has faced the problem of keeping track of multiple versions of a document, program, or project. This problem becomes serious when a team of users must share, edit and test information cooperatively. Version control is a way to manage the orderly evolution of projects, so that information is not lost, multiple versions can be maintained and smoothly integrated, and older versions can be retrieved if an updated version turns out unsatisfactory. This lecture will introduce git, a popular and powerful version control system for managing software projects. We will see how to set up a project, enter, edit, merge and recover information, and how to organize collaborative software projects.
Presenter: James McClure.