General Multicore & Many-core
- What’s the Difference Between a CPU and a GPU?
- What Makes Parallel Programming Hard?
- The Free Lunch Is Over: A Fundamental Turn Toward Concurrency in Software
C Programming
OpenMP
- OpenMP.org
- OpenMP Application Programming Interface and Examples
- A “Hands-on” Introduction to OpenMP
- OpenMP Tutorial
- A Guide into OpenMP: Easy multithreading programming for C++
- OpenMP: Barrier
- Recommended textbook: Using OpenMP: Portable Shared Memory Parallel Programming by Barbara Chapman, Gabriele Jost and Ruud van der Pas
POSIX Threads
OpenCL
- OpenCL: The Open Standard for Parallel Programming of Heterogeneous Systems
- OpenCL Reference Pages
- OpenCL Reference Card
- The OpenCL C Specification
- OpenCL Programming Guide
- Comparing Syntax for CUDA, OpenCL and HiP
- Hands On OpenCL
- OpenCL University Programs & Resources (from AMD)
- Recommended textbook: Heterogeneous Computing with OpenCL: Revised OpenCL 1.2 Edition by Benedict Gaster, Lee Howes, David R. Kaeli, Perhaad Mistry, Dana Schaa [Note a newer version of this book for OpenCL 2.0 is available but we will be covering OpenCL 1.2 in this course]
Java Concurrency
- The Java Tutorials – Concurrency
- java.lang.thread – Java thread objects with run, start, sleep, wait, notify, notifyAll, join methods and more. Also discussed synchronized method/blocks and implicit monitor locks.
- java.util.concurrent – Semaphore, CountDownLatch, CyclicBarrier, thread pools (e.g., ForkJoinPool), Java data structures (e.g., BlockingQueue, ConcurrentMap) and more
- java.util.concurrent.atomic – Java atomic variables including AtomicBoolean, AtomicInteger, AtomicIntegerArray, AtomicLong and more.
- java.util.concurrent.locks – Java locks