||In-depth study of the design, engineering, and evaluation of modern parallel computers. Fundamental design: naming, synchronization, latency, and bandwidth. Architectural evolution and technological driving forces. Parallel programming models, communication primitives, programming and compilation techniques, multiprogramming workloads and methodology for quantitative evaluation. Latency avoidance through replication in small-scale and large-scale shared memory designs; cache-coherency, protocols, directories, and memory consistency models. Message passing: protocols, storage management, and deadlock. Efficient network interface, protection, events, active messages, and coprocessors in large-scale designs. Latency tolerance through prefetching, multithreading, dynamic instruction scheduling, and software techniques. Network design: topology, packaging, k-ary n-cubes, performance under contention. Synchronization: global operations, mutual exclusion, and events. Alternative architectures: dataflow, SIMD, systoltic arrays.