After working through these videos, you can design and implement a complete solution to Assignment 3.
Video: C11 Thread Main Function. Code: thread_main_void.c, makefile.
Video: C11 Thread Main Function Array Arguments Code: thread_main_array.c, makefile.
Video: C11 Thread Main Function Arbitrary Arguments. Code: thread_main_struct.c, makefile.
Videos: Naive Synchronization via C11 Threads in the section on Basic parallel programming III.
Video: Synchronization via Conditional Variables. Code: condvar.c, makefile.
Video: Multi-stage Processing. Code: multi_stage.c, and this makefile.
Optional Video: Synchronization via Spin Locks. Code: spin.c, makefile.
Optional Video: Synchronization via Semaphores. Code: semaphore.c, makefile.
Video: Naive Synchronization via C11 Threads. Code: none_c11.c, mutex_c11.c, atomic_c11.c, reduction_c11.c, makefile.
Video: Deadlock. Code: deadlock_simple.c, deadlock_dependent.c, makefile.
Video: GDB for Parallel Debugging. Code: thread_debug.c, makefile.
Optional Video: Data Partitioning in C11 Threads I, Data Partitioning in C11 Threads II. Code: horz_c11.c, vert_c11.c, makefile.
Video: What is OpenCL? Code: dotprod.c, makefile.
Video: Initialization. Code: dotprod.c, dotprod.cl, makefile.
Video: Memory. Code: dotprod.c, dotprod.cl, makefile.
Video: Kernels. Code: dotprod.c, dotprod.cl, makefile.
Video: Matrix Multiplication. Code: matmul.c, matmul.cl, makefile.
Video: Vectorization. Code: dotprod_float4.c, dotprod_float4.cl, makefile.
Video: Reduction. Code: dotprod_reduction.c, dotprod_reduction.cl, makefile.