This document discusses multicore and shared multiprocessor systems. It describes shared memory multiprocessors (SMP) which provide a single shared physical address space across multiple processors. SMPs allow processors to communicate through shared memory and access any memory location. SMPs can be uniform memory access (UMA) where memory latency is equal, or non-uniform memory access (NUMA) where latency depends on processor-memory location. Synchronization is needed when sharing data, and locks are used to allow only one processor access at a time. OpenMP is an API that makes it easy to parallelize loops across processors in SMP systems.