An Introduction to Linux
This tutorial is for the beginning Linux user, intended to get the user acquainted with some of the basic principals of the Linux operating system.
An Introduction to C Programming
This module is for the beginning programmer who wants to learn the effective use of the C language. If you have never programmed before you can also use this document to learn the basic concepts of programming; however, you may want to have other references to guide you.
An Introduction to Fortran Programming
This module is for the beginning programmer who is interested in learning the effective use of the Fortran language. If you have never programmed before you can also use this document to learn the basic concepts of programming; however, you may want to have other references to guide you.
An Introduction to Python
Python is a programming language designed with ease of programming and readable code as its foremost goals.
Python has risen to prominence in scientific computing as the ideal tool for doing data conversions, scripting parameter studies, and in facilitating the scientific workflow.
In this online course, a quick overview of the language is presented, along with a few tricks to maximize the utility of Python for engineering and science modeling.
Python for High Performance
While Python is a scripting language, it has plenty of facilities for high performance computing. This article covers some of its features and libraries that are particularly helpful when moving scientific code to a large cluster resource. It also includes specific recipes for compilation and execution on the TACC clusters.
Balancing Scripts and Compiled Code in Scientific Applications
This module works through examples of scientific application code written in a mix of scripting languages and C++ or Fortran code in order to evaluate where, within an application, scripting is a good choice.
MATLAB provides matrix manipulation, plotting, and general purpose scientific programming capability, as well as functionality through specialized "toolboxes" such as the Optimization toolbox, the Statistics toolbox, the Signal Processing toolbox, the Image Processing Toolbox, etc.
Introduction to GPGPU and CUDA Programming
This module briefly covers general GPU topics such as hardware architecture and application speedup, followed by an introductory section of CUDA programming and performance optimization topics.
Applications of Parallel Computing
This set of lectures is an online rendition of Applications of Parallel Computers taught by Jim Demmel at U.C. Berkeley in Spring 2012.
This online course is sponsored by the Extreme Science and Engineering Discovery Environment (XSEDE), and is only available through the XSEDE User Portal.
Parallel Programming Concepts and High-Performance Computing
Concepts concerning parallel processing and its efficient realization within different hardware and software environments.
Ranger Environment (decommissioned)
This module provides the information you need to start working on Ranger and includes sections on logging on to Ranger, setting up your environment, moving files to Ranger, compiling, and using the SGE batch system.
Message Passing Interface (MPI)
MPI is a de facto standard specifying the interface and functionality of a message-passing library, a collection of routines for facilitating communication (exchange of data and synchronization) among the tasks in a distributed memory parallel program. MPI is the first standard and portable message passing library that offers good performance.
MPI Point-to-Point Communication
This module details and differentiates the various types of point-to-point communication available in MPI. Point-to-point communication involves transmission of a message between a pair of processes, as opposed to collective communication, which involves a group of processes.
MPI Collective Communications
The purpose of collective communication is to manipulate a shared piece or set of information. In this module, we introduce these routines in three categories: synchronization, data movement, and global computation.
MPI One-Sided Communication
One-sided communication provides natural access to Remote Memory Access (RMA) functionality that is provided by low-latency interconnect fabrics such as InfiniBand. In this module, we will introduce the various components of MPI RMA and how to use them.
MPI Advanced Topics
This module will introduce you to some of the advanced capabilities of MPI beyond ordinary message passing, including how to customize your environment in the following areas: derived datatypes; groups of processes and their associated communicators; virtual topologies among processes; and parallel I/O using MPI-IO. Application to specific architectures such as Stampede will be discussed.
This module presents basic concepts and techniques that will allow your application to take advantage of parallel I/O to increase throughput and improve scalability. Emphasis is placed on the Lustre parallel file system, and on MPI-IO as a fundamental API.
In the shared-memory, heterogeneous environment that Stampede has on each node, it is much easier to introduce parallelism into your code with OpenMP than to do pthread programming from scratch or to use MPI. This module introduces OpenMP and describes how to use it.
Hybrid Programming with OpenMP and MPI
In hybrid programming, the goal is to combine techniques from OpenMP and
MPI to create a high-performance parallel code that is better tailored for
the non-uniform and heterogeneous memory access characteristics of Stampede. To meet this
goal, it is necessary to understand the effects of processor affinity and
memory allocation policy, and to exert some control over them.
Profiling and Debugging
This module describes how to obtain detailed performance data for jobs on Stampede. It also discusses tools and techniques for online parallel application debugging.
Optimization and Scalability Series
Part 1: Planning for Parallel
Part 2: Data Locality [coming soon]
Part 3: Single-Core Coding [coming soon]
This set of three modules describes how to analyze and optimize the performance of an application on Stampede. It covers multiple scales, from collective MPI communication on thousands of nodes, down to individual threads on the AMD Barcelona processors.
PerfExpert is an easy to use profiling tool developed at TACC. This module shows how to use PerfExpert to
obtain a concise assessment of a program's utilization of CPU resources by providing statistics on cache hits and misses,
mis-predicted branches, FPU instructions, and more.
In addition, PerfExpert is able to provide specific recommendations to improve an application's performance based upon its assessment.
This module provides an introduction to what computational steering is, the potential benefits from using it, and examples on how you can integrate steering into your existing application.
Vectorization is a process by which mathematical operations found in tight loops in scientific code are executed in parallel on special vector hardware found in CPUs and coprocessors. This module describes the vectorization process as it relates to computing hardware, compilers, and coding practices.
Large Data Visualization
This module gives an introduction to some concepts of visualization with a focus on the parallel computing techniques used to handle large datasets.
Paraview is a visualization application highly capable for computational fluid dynamics and other subjects. It is open source and can run in parallel on Stampede. This module includes a lab which covers visualization of a sample dataset both on a local computer and on TACC resources.
VisIt is a visualization application highly capable for computational fluid dynamics and other subjects. It is open source and can run in parallel on Stampede. This module includes a lab which covers visualization of a sample dataset both on a local computer and on TACC resources. VisIt is a free visualization application that runs on Windows and Linux, as well as TACC's Stampede. This module will walk through logging into Stampede and running a sample visualization.
There are a number of utilities available to accomplish the essential task of transferring data and/or code between the file system on your workstation and a larger computing resource.
The one you choose depends on the size and number of files to be transferred as well as the ease of invoking the utility, and the ability to use a script.
This module presents the various options and the pros and cons of each of them as well as ways to make these transfers faster.
This module provides an introduction to relational databases, the most common type of database and what you are most likely to find available at an XSEDE site.
This module describes the basic MapReduce paradigm, the Hadoop MapReduce framework, and techniques for running MapReduce frameworks on HPC resources such as Longhorn at TACC.