Getting Started in High Performance Computing
UNIX, Shell Scripting, and Programming Review
1) UNIX and Shell Scripting Resources
The book UNIX for Programmers and Users by Glass and Ables is an excellent resource:
https://www.pearson.com/us/higher-education/program/Glass-UNIX-for-Programmers-and-Users-3rd-Edition/PGM124458.html
The GNU Bash reference manual:
https://www.gnu.org/software/bash/manual/bash.html
A really practical shell scripting tutorial by Steve Parker:
https://www.shellscript.sh/
The GNU Awk User's Guide:
https://www.gnu.org/software/gawk/manual/gawk.html
2) Getting Started with the C Programming Language
The book Problem Solving and Program Design in C by Hanley and Koffman is a great resource for learning C:
https://www.pearson.com/us/higher-education/program/Hanly-Problem-Solving-and-Program-Design-in-C-Plus-My-Lab-Programming-with-Pearson-e-Text-Access-Card-Package-8th-Edition/PGM9844.html
The online version of The C Book by Banahan, Brady, and Doran is also a great resource:
https://publications.gbdirect.co.uk/c_book/
Here is an online C tutorial through tutorialspoint:
https://www.tutorialspoint.com/cprogramming/index.htm
Writing and Maintaining Code
1) Common Text Editors on UNIX and Linux Systems
While interfacing with the UNIX operating system from a terminal,
you will need some kind of text editor to write and edit code. Commonly used text editors are:
vi, vim, emacs, Nano, and gedit
The Glass and Ables book above has a great review with examples of vi and emacs.
2) Version Control
Keeping track of code can become quite cumbersome as programs evolve through time and in complexity.
In addition, for codes that are shared projects, some kind of organization and formal tracking is needed to maintain the
changes.
Here are several great resources for using the git version control program:
Online git documentation and reference manual: https://git-scm.com/doc
Interactive git tutorial: https://learngitbranching.js.org/
Makefiles and Linking to Commonly Used Software Libraries
1) Makefiles are a convenient way to compile and link a program and dependencies
Documentation for using GNU Make:
https://www.gnu.org/software/make/manual/make.html#Simple-Makefile
2) Commonly used libraries in engineering and scientific applications
The BLAS (Basic Linear Algebra Subprograms) Library:
https://www.netlib.org/blas/
Developer information for the Intel Math Kernel Library (MKL):
https://software.intel.com/content/www/us/en/develop/documentation/onemkl-developer-reference-c/top.html
Homepage for the Portable, Extensible Toolkit for Scientific Computation (PETSc):
https://www.mcs.anl.gov/petsc/index.html
Resources for Parallel Programming with MPI and OpenMP
1) Using the Message Passing Interface (MPI) for Parallelization
MPI documentation from the MPI Forum:
https://www.mpi-forum.org/docs/
MPICH downloads and documentation site:
https://www.mpich.org/
MPI Man pages:
https://www.mpich.org/static/docs/v3.2/
2) Using OpenMP for Parallelization
OpenMP Architecture Review Board:
https://www.openmp.org/
OpenMP Reference Guides:
https://www.openmp.org/resources/refguides/
Intel Developer Guide with information for using OpenMP:
https://software.intel.com/content/www/us/en/develop/documentation/cpp-compiler-developer-guide-and-reference/top/optimization-and-programming-guide/openmp-support/openmp-library-support/thread-affinity-interface-linux-and-windows.html
Using External High Performance Computing Systems
1) Tools for Remote Login to Access HPC Resources
The Secure Shell protocal (SSH) is a common tool for accessing a remote host (for example a supercomputing resource headnode) from the command line environment:
https://www.ssh.com/ssh/
2) Supercomputer Centers and Statistics
The TOP500 project provides a benchmark-based ranking of supercomputing systems worldwide, with downloadable statistics:
https://www.top500.org/project/
The NSF supported Extreme Science and Engineering Discovery Environment (XSEDE) supercomputing consortium:
https://www.xsede.org/
How to apply for time on the XSEDE supercomputing resources:
https://portal.xsede.org/allocations/announcements
Submitting and Running Jobs at UB's Center for Computational Research (CCR)
1) Creating an Account on CCR
To access the CCR resources, you will first need to make an account with CCR.
Follow the steps outlined in the link below to set up your CCR account:
https://ubccr.freshdesk.com/en/support/solutions/articles/13000054633-creating-a-ccr-account
(Remember to first start the Virtual Private Network (VPN) before accessing CCR from an off campus location.)
2) Submitting a job on CCR using a SLURM script
To submit a job on the CCR computing resources using SLURM, see the steps in the link below
(including an example SLURM script):
https://ubccr.freshdesk.com/support/solutions/articles/5000688140-submitting-a-slurm-job-script
3) Running an interactive job on CCR
To submit an interactive job on the CCR computing resources, see the steps outlined in the link below:
https://ubccr.freshdesk.com/support/solutions/articles/5000688697-how-to-submit-an-interactive-job
For example, after you are logged into to vortex, you can start an interactive session to
use a single compute node with exclusive use for one hour by typing:
fisbatch --partition=debug --qos=debug --nodes=1 --ntasks-per-node=1 --time=1:00:00 --exclusive
4) Tutorials from CCR
https://ubccr.freshdesk.com/support/solutions/articles/13000026245
5) CCR Academic compute cluster head node(s) processor information
vortex1 and vortex2 have Intel Xeon Gold 6130 CPUs.
To see details on the processor information, view the cpuinfo file:
cat /proc/cpuinfo
You can also find information on the Intel Xeon Gold 6130s from Intel here:
https://ark.intel.com/products/120492/Intel-Xeon-Gold-6130-Processor-22M-Cache-2-10-GHz-
*This page is supported in part by NSF CAREER Award EAR-1945513 awarded to M. Jadamec.