The Research Computing User's Guide

October 16, 2023

Jason W. Bacon

Instructor
University of Wisconsin -- Milwaukee
Department of Computer Science

Table of Contents

I. Research Computing
1. Computational Science
2. Where do I get the Software?
3. Using Unix
4. Unix Shell Scripting
5. Data Management
II. Parallel Computing
6. Parallel Computing
7. Job Scheduling
8. Job Scheduling with SLURM
9. Job Scheduling with HTCondor
10. Job Scheduling with PBS (TORQUE)
11. Job Scheduling with LSF
III. High Performance Programming
12. Computer Hardware
13. Software Development
14. Data Representation
15. Introduction to High-Performance Programming
16. Data Types
17. Basic Terminal Input/Output (I/O)
18. Conditional Execution
19. Loops (Iterative Execution)
20. Subprograms
21. Building with Make
22. Memory Addresses and Pointers
23. Arrays
24. Strings
25. File I/O
26. Matrices
27. Software Performance
28. Structures
29. Object Oriented Programming
30. The Preprocessor
31. Software Project Management
IV. Parallel Programming
32. Parallel Programming
33. Programming for HTC
34. Programming for HPC
V. Systems Management
35. Systems Management
36. Popular Unix Platforms in Science
37. Platform Selection
38. System Security
39. Software Management
40. Running Multiple Operating Systems

List of Figures

2.1. FreeBSD Ports Build Options
2.2. Visualizing Gene Neighborhoods with Matplotlib
3.1. Hot Keys
3.2. Sample of a Unix File system
3.3. File streams
3.4. Standard streams
3.5. Redirecting standard output
3.6. Colorized grep output
4.1. Editing a script in APE
14.1. Monte Carlo Dart Board
15.1. Compilation
18.1. Flowchart for a simple conditional
31.1. Getting the Gitlab Clone URL
36.1. FreeBSD Installer Disk Partition Screen
36.2. FreeBSD Installer ZFS Options
36.3. FreeBSD Installer ZFS RAID Level Selection
36.4. FreeBSD Installer ZFS Disk Selection
36.5. FreeBSD Installer ZFS Commit
36.6. FreeBSD ZFS Status
40.1. Windows as a Guest under VirtualBox on a Mac Host
40.2. CentOS 7 with Gnome Desktop as a Guest under VirtualBox
40.3. FreeBSD with Lumina Dekstop as a Guest under VirtualBox

List of Tables

1.1. Computation Time Line
3.1. Partial List of Unix Operating Systems
3.2. Pkgsrc Build Times
3.3. Default Key Bindings in some Shells
3.4. Globbing Symbols
3.5. Special Directory Symbols
3.6. Common hot keys in more
3.7. Unix Commands
3.8. Common Extensions
3.9. Standard Streams
3.10. Redirection Operators
3.11. Run times of pipes with cat
3.12. RE Patterns
3.13. Column headers of top command
3.14. Reserved Environment Variables
4.1. Conventional script file name extensions
4.2. Shell Start Up Scripts
4.3. Printf Format Specifiers
4.4. Special Character Sequences
4.5. Test Command Relational Operators
4.6. Test command file operations
4.7. C Shell Relational Operators
4.8. Shell Conditional Operators
4.9. Compression tool for each filename extension
12.1. Example Memory Map
12.2. The Memory Hierarchy
13.1. Example MIPS Instruction
13.2. Selection Sort of 200,000 Integers
14.1. Basic Binary Units
14.2. Prefixes for larger quantities
14.3.
14.4. Highest power of each base <= 439
14.5. Binary/Octal Conversion
14.6. Binary/Hex Conversion
14.7. Unsigned Binary Integer Ranges
14.8. Powers of 2
14.9. Powers of 2
14.10. 8-bit sign-magnitude format
14.11. Two's Complement Integer Ranges
14.12. IEEE 32-bit Format
14.13. IEEE 64-bit Format
16.1. C Data Types
16.2. Fortran 90 Data Types
16.3. Memory Map
16.4. C Constants and Types
16.5. C Escape Sequences
16.6. Fortran 90 Constants and Types
16.7. Basic Math Operators in C
16.8. Bitwise Operators in C
16.9. Basic Math Operators in Fortran
16.10. Explicit Conversion Functions
17.1. Standard Stream Names
17.2. Format specifiers for printf()
17.3. Format specifiers for scanf()
17.4. Standard Stream Names
17.5. Common Format Descriptors
18.1. Relational Expressions
18.2. Relational Operators
18.3. Boolean Operators
20.1. Program Sizes
20.2. Pass by Value
20.3. Pass by Reference
21.1. Standard Make Variables
23.1. Memory Map of an Array
23.2. Memory Map of list and i
26.1. Time Table
26.2. Temperature
26.3. Generic 2D Matrix
27.1. Common Orders of Operation
39.1. Computation Time Line
39.2. Package Manager Comparison

List of Examples

2.1. A Typical Caveman Install
3.1. Practice Break
3.2. Practice Break
3.3. Practice Break
3.4. White space in an Argument
3.5. Practice Break
3.6. Practice Break
3.7. Practice Break
3.8. Practice Break
3.9. Practice Break
3.10. Practice Break
3.11. Practice Break
3.12. Practice Break
3.13. Practice Break
3.14. Practice Break
3.15. Practice Break
3.16. Practice Break
3.17. Simple Pipe
3.18. Filters
3.19. Practice Break
3.20. Practice Break
3.21. Practice Break
3.22. Practice Break
3.23. Practice Break
3.24. Practice Break
3.25. Practice Break
3.26. Practice Break
3.27. Practice Break
3.28. Practice Break
3.29. Practice Break
3.30. Practice Break
3.31. Practice Break
3.32. Practice Break
3.33. Pushing data with rsync
3.34. Pulling data with rsync
3.35. Practice Break
3.36. Practice Break
3.37. Practice Break
4.1. A Simple Bourne Shell Script
4.2. A Simple C-shell Script
4.3. Multiple File Downloads
11.1. Simple LSF Batch Script
11.2. Batch Interactive Script
11.3. Batch Parallel Script
11.4. LSF and OpenMPI
14.1. A fixed-point system
14.2. A modulo-100 System
14.3. Conversion from Decimal
14.4. 3710 to binary
14.5. 13510 to octal
14.6. 13510 to hex
14.7. A 4-bit unsigned binary number system
14.8. Improving Speed with Integers
15.1. A Simple C Program
15.2. A Simple Fortran Program
16.1. Precedence and Order of Evaluation
19.1. While Loop
19.2. A More Flexible Sine Printer
19.3. Unstructured Fortran Loop
19.4. Unstructured C Loop
19.5. Infinite Loop
20.1. Ordering Pizza
20.2. Sorting
20.3. Sample C Code Passing by Value
26.1. Comparison of Row-major and Col-major Access
27.1. Selection Sort
27.2. Binary Search

1. Acknowledgments

Many thanks to (in alphabetical order) Aishwarya Shrestha, Anisha Tasnim, and Shamar Rhadre Webster, for extensive feedback and corrections.