Spring 2016 Course List (Archive)

If you would like to get email notifications of any CACDS events, please send an email from your UH email address to LISTSERV@LISTSERV.UH.EDU, leave the subject field blank, and in the body of the message type: SUBSCRIBE CACDS-WORKSHOPS.

National cyberinfrastructure

This training seminar will introduce users to the XSEDE national cyberinfrastructure and the process of writing an XSEDE allocation proposal. Special focus would be given to elements that make an allocation request/proposal successful. This seminar is recommended for users making the jump from local HPC resources to national cyber infrastructure for research allocation, and is highly recommended for faculty and research staff interested in applying for an XSEDE allocation.

Debugging

During development of any program you will undoubtedly need to remove errors, and this will involve debugging. And when that code is running in parallel, debugging becomes a cumbersome exercise. There are many ways to go about debugging, from printing out messages to the screen, using a debugger, or just thinking about what the program is doing and making an educated guess as to what the problem is. This hands-on tutorial will help you get started with debugging and using the gdb and idb debuggers.

Introduction to High Performance Numerical Libraries

More often than not a major part of the computational effort in scientific and engineering applications goes into solving dense & sparse linear algebra, spectral transforms, and statistical sub problems. In this course, participants will be taught how to use state-of-the-art numerical libraries for improving performance for codes featuring such compute-intensive patterns.

Performance Tuning

The focus of High Performance Computing (HPC) is to reduce the time to solution of computational problems by an efficient implementation of a suitable algorithm in a suitable programming language leading to an executable program which exploits the suitable machinery efficiently. This usually results in a cache friendly parallel program written in C, C++ or Fortran. In an ideal case, parallelization would lead to a speed-up which scales linearly with the number of processors used compared to the original serial program running on a single processor. What if a program’s performance does not meet these expectations? Indeed, there are good reasons why these expectations most likely will not be met and we will explore those reasons and their remedies in this hands-on tutorial.

Software Development and Management

This tutorial describes several of the most commonly used tools in software development and management, especially within an HPC cluster or Linux desktop environment. We will introduce participants to “make” & “cmake” for efficient software building, and git curation of software code. Upon completion of the tutorial, participants would be use helpful commands within MAKE, CMAKE and GIT frameworks for there development projects.

Introduction to OpenMP Part 2

This tutorial will provide a follow up on the “Intro to Parallel Programming with OpenMP Part I” tutorial. In this training session, participants will learn more about shared-memory parallel programming using the OpenMP parallel application-programing interface. The tutorial will cover OpenMP optimizations for NUMA architectures, SIMD and accelerator programming. Additional materials covered would include scheduling, single & sections directives for work sharing, SIMD constructs, device constructs, tasks, thread affinity, and many other new features now available in the OpenMP 4.0 specification. Upon completion of this course, users should be able to write parallel applications using the OpenMP directives.

Introduction to OpenMP Part 1

In today’s multicore world, one-socket single-core systems are almost extinct. Reasonable performance gains could be extracted from this new many-core systems by employing shared-memory parallel programming methods like OpenMP. This tutorial introduces shared-memory parallel programming using the OpenMP parallel application-programing interface. It includes a quick tutorial on writing parallel code by implementing OpenMP directives. Topics covered included the fork & join execution model, data scoping, work-sharing, reductions, synchronization, OpenMP functions etc. Several examples of modifying serial code to run in parallel will be presented. Participants with basic programming experience are welcome. Upon completion of this course, users should be able to write parallel applications using the OpenMP directives.

Cuda Programming Part 2

This tutorial will provide a follow up on the “GPGPU Parallel Programming with CUDA I” tutorial. This session will focus on using shared memory, Streams and Concurrency, and Multi-GPU programming using CUDA.

Introduction to Parallel Programming MPI Part 2

This tutorial will provide a follow up on the “Introduction to Parallel Programming with MPI Part I” tutorial. In this training session, participants will learn more about distributed-memory parallel programming using the Message Passing Interface Standard (MPI). Topics covered will include MPI derived datatypes, nonblocking collective communication, topology mapping and neighborhood collective communication, and one-sided communication.

Cuda Programming Part 1

This tutorial will provide an introduction to the programming language CUDA that is used to fast numeric algorithms for NVIDIA graphics processors (GPUs). This session will introduce CUDA, exploiting the most important features of the GPU device such as massive parallel computation, texture and shared memory, and educate on the techniques to efficiently use the hardware for obtaining maximum performance. An overview of the advanced features of the language will also be given.

Introduction to Parallel Programming MPI Part 1

The Message Passing Interface Standard (MPI) is a message passing library standard based on the consensus of the MPI Forum. Well-written MPI-based applications can take advantage of the scalable processing power offered by distributed computing clusters such as UH’s Opuntia cluster. The goal of this tutorial is to teach those unfamiliar with MPI how to develop and run parallel programs according to the MPI standard. Topics covered will include MPI routines such as MPI environment management, point-to-point communications, and collective communications routines, and MPI data types for message passing.

Matlab on GPUs

This tutorial will provide a follow up on the MATLAB introduction. This training session introduces students on how to use MATLAB on GPUs.

Introduction to C Programming Part 2

This is a follow up, hands-on tutorial of Introduction to C Programming Part I. This tutorial will provide skills to understand and write C programs with some applications to STEM fields. You will learn about some differences between C and C++, user defined functions, type double and floating-point numbers, pointers, dynamic memory allocation, and data structures. Some problems will be presented and their solutions will be followed. Upon completing the tutorial, attendees will be competent to write, compile and debug C programs comfortably.

OpenACC Part 2

This tutorial will provide a follow up on the “GPGPU Parallel Programming with OpenACC I” tutorial. This session will focus on performance optimization, and advanced topics such as Atomic Operation, Async and multiple accelerators using OpenACC.

Introduction to C Programming Part 1

The programming language C is one of the most widely used programming languages, particularly in the STEM fields. Various C compilers are available for the majority of computer architectures and operating systems. Many younger languages have borrowed directly from C, including C++, Java, and Python. This hands-on tutorial will provide skills to understand and write C code starting with the basics. You will learn about the main function, compiling and running C code, declaring variables and basic IO, Math and simple arrays, LOOPS, IFs and conditional/logical operators. Some relevant STEM application problems will be presented and their solutions will be followed. Upon completing the tutorial, attendees will be competent to write, compile and debug some C code comfortably.

OpenACC Part 1

Many of the current supercomputers are equipped with accelerators. The most prominent type of accelerators existing today is GPGPU. In this tutorial, we will introduce OpenACC, an accepted standard that uses high-level directives to allow easy programming of GPGPUs. The session will focus on writing and optimizing parallel programs to run on high performance clusters equipped with GPU device using OpenACC.

Introduction to Fortran 90 Programming Part 2

This is a follow up, hands-on tutorial of Introduction to Fortran 90 Programming Part I. Fortran 90 is employed in many STEM applications due to its powerful way of doing mathematical array algorithms. This tutorial will provide modern skills to understand and write Fortran 90 code. You will learn about variable attributes, program units (functions, subroutines & modules), dynamic memory allocation and pointers. Some interesting STEM application problems will be presented and their solutions will be followed. Upon completing the tutorial, attendees will be competent to write Fortran 90 code aimed to solve STEM computations.

Xeon Phi Programming Part 2

This tutorial will provide a follow up on the “Introduction to Intel Xeon Phi Programming I” tutorial. This session will introduce the offload and symmetric execution on the Intel Xeon Phi, and focus on writing and optimizing parallel programs to run on high performance clusters that are equipped with the Intel coprocessor.

Introduction to Fortran 90 Programming Part 1

Fortran 90 is an evolved programming language used by many national labs and research institutes in the US and abroad. Its unique array syntax makes it a very powerful and popular tool for STEM array computation applications. Though it is not fully an object-oriented programming (OOP) language, Fortran 90 supports abstract data types, classes, and is able to emulate other useful features of OOP. This hands-on tutorial will provide skills to understand and write Fortran 90 code starting with the basics. You will learn some advantages, disadvantages and parallels between Fortran 90 and C++. This tutorial also covers code syntax, data types, Math, IO, logical and control statements (do loops, ifs, CASE), arrays, array syntax, and some Fortran 90 intrinsic functions. Some relevant STEM application problems will be presented and their solutions will be followed. Upon completing the tutorial, attendees will be competent to write, compile and debug Fortran 90 code comfortably.

Xeon Phi Programming Part 1

This tutorial introduces the Intel Xeon Phi parallel computing device. This session will focus on the architecture of the Xeon Phi and brief comparison with GPU architecture, and introduce the native execution on Xeon Phi.

Parallel MATLAB

This tutorial will provide a follow up on the “Introduction to Matlab Part I tutorial. This training session introduces students on how to use MATLAB within an HPC environment. Topics covered in this follow up session would include, job submission, compiling M code, parallel computing with MATLAB.

MATLAB Introduction

MATLAB is a high-level computer language for scientific computing and data visualization built around an interactive programming environment. This training session provides a hands-on introduction to Matlab. Topics covered includes: variables, arrays, matrices, indexing, subarrays & subscripting, operators, flow control, scripts & functions, file i/o, profiling, and plotting with matlab.

Visualization with Paraview Part 2

This is the 4th of a 4-session tutorial will provide a hands-on introduction to the use of the data visualization and analysis platforms Visit and Paraview which are very powerful and popular in the HPC scientific and engineering research communities. Each session is designed for attendees to explore the tools using some data samples, solve specific problems, and learn about direct research applications.

Visualization with Paraview Part 2: More about ParaView. The calculator tool, datasets & time, animations & their controls, time interpolation, camera animations, static vector field animations, and Python scripting.

Visualization with Paraview Part 1

This is the 3rd of a 4-session tutorial will provide a hands-on introduction to the use of the data visualization and analysis platforms Visit and Paraview which are very powerful and popular in the HPC scientific and engineering research communities. Each session is designed for attendees to explore the tools using some data samples, solve specific problems, and learn about direct research applications.

Visualization with Paraview Part 1: ParaView basics. Supported data files, data loading and representations, color-scales and their controls, data filters -slice, contour- pipeline, multi-view & camera links, streamline plots, plot-over-line analysis, and histograms.

Visualization with VisIt Part 2

This is the 2nd of a 4-session tutorial will provide a hands-on introduction to the use of the data visualization and analysis platforms Visit and Paraview which are very powerful and popular in the HPC scientific and engineering research communities. Each session is designed for attendees to explore the tools using some data samples, solve specific problems, and learn about direct research applications.

Visualization with VisIt Part 2: More about visIt. Create animations, comparing data, creating/computing variables, vector & streamline plots, python scripting, and remote parallel visualization.

Visualization with VisIt Part 1

This 4-session tutorial will provide a hands-on introduction to the use of the data visualization and analysis platforms Visit and Paraview which are very powerful and popular in the HPC scientific and engineering research communities. Each session is designed for attendees to explore the tools using some data samples, solve specific problems, and learn about direct research applications.

Visualization with VisIt part 1: VisIt basics. Supported data files, producing and manipulating pseudo-color plots, color scales controls, line-out (2D dispersion) plots, plot operators -transform, slice, selection- and the pipeline, saving & restarting sessions, annotating plots, 3D surface contours & their properties.

Introduction to Linux

This tutorial introduces participants to the Linux operating environment usually found in desktops and High Performance Computing (HPC) clusters. Participants will not only learn about the UNIX environment, but also techniques for performing higher level tasks in HPC environments. Topics covered include user accounts, file permissions, file system navigation, the Command Line Interface (CLI), command line utility programs, file & folder manipulation, and common text editors. Upon completion of this module, users will be able to comfortably work within a Linux computing environment from the command line.

Introduction to Shell Programming

A working knowledge of shell scripting is essential for anyone who works in a Linux/Unix environment, as it can boost his or her efficiency and productivity tremendously. This workshop introduces participants to the BASH shell-programming environment found on most UNIX-based systems. Topics covered include built-in commands, control structures, file descriptors, functions, parameters & variables, and shell scripting. Upon completion, users should be able to comfortably write shell programs for automating their computing workflow within the Linux OS environment.

Introduction to Cluster Computing

This tutorial introduces participants to the computing environment found in UH high performance computing clusters such as Maxwell and Opuntia, including how to prepare workflows, submit jobs to the queuing systems, and retrieve results. Other topics covered includes general HPC concepts, Maxwell’s system architecture, system access, customizing your user environment, compiling and linking codes for CPUs or GPUs, the PBS batch queuing system, job scripts, matlab jobs, submission of serial or interactive or parallel (gpu/cpu) jobs to the batch system. Upon completion of this workshop, users should be able to comfortably work within Maxwell HPC computing environment and other similar HPC environments within the national computing grid (i.e., XSEDE).

Introduction to Python Programming Part 1

This 5-session tutorial will provide a hands-on introduction to the use of the data visualization and analysis platforms Visit and Paraview which are very powerful and popular in the HPC scientific and engineering research communities. Each session is designed for attendees to explore the tools using some data samples, solve specific problems, and learn about direct research applications.

SVIZ 1: VisIt basics. Supported data files, producing and manipulating pseudo-color plots, color scales controls, line-out (2D dispersion) plots, plot operators -transform, slice, selection- and the pipeline, saving & restarting sessions, annotating plots, 3D surface contours & their properties.

Introduction to Python Programming Part 2

This tutorial will provide a follow up on the “Introduction to Python Programming I” tutorial. This training session introduces participants to scientific computing extensions of python like scipy and sickout for use in high performance computing. Topics covered in this follow up session would include using advanced python libraries like regular expressions, numpy, scipy, sympy, mpi4py, etc for every day scientific computing. Upon completion of this tutorial series, participants should be able to understand existing scientific python codes as well as write their own python applications for solving numerical problems.

Introduction to R Programming Part 1

This course will teach you a basic understanding of how to program in R. You will learn how to use the R Studio software necessary for a statistical programming environment. The course covers reading data into R, accessing R packages, writing R functions, debugging, and commenting R code. You will also learn how to run R code on the CACDS HPC clusters.

Introduction to R Programming Part 2

This course will provide a hands-on introduction to the use of R as a data visualization and analysis platforms. We will cover topics on how to clean data in R and introduce the widely used R visualization library ggplot2. The course is designed for attendees to explore the tools using some data samples, solve specific problems, and learn about direct research applications.