ACM’S Computer Science Curriculum 2008: An Interim Revision of CS 2001 Appendix B Detailed Body of Knowledge Computational Science (CN) CN/ParallelComputation [elective] Topics: • Overview of topics • Models of computation • Kinds of computation • Task parallelism • Data parallelism • Event parallelism • Properties of computation • Bandwidth • Latency • Scalability • Granularity • Parallel architectures • Processor architectures including multi-core • Memory systems for high performance • Caching and coherence • Clusters • Parallel programming paradigms • Threading • Message passing • Event driven techniques • Parallel software architectures o MapReduce • Grid computing • Open community distributed computing (BOINC, SETI, …) Learning Objectives: 1. Compare and contrast architectures for parallel computing, recognizing the strengths and weaknesses of each 2. Compare and contrast parallel programming paradigms recognizing the strengths and weaknesses of each 3. Identify the basic properties of bandwidth, latency, scalability and granularity 4. Design, code, test and debug programs for parallel computation APPENDIX C.2 Course on Parallelism The class is a suitable prerequisite to a capstone project class focusing on creating a complex parallel system. It cuts across several advance courses of CS2001, repackaging the material to eliminate more specialized information and emphasizing content that is most applicable to current students: CS314 Parallel Algorithms, Parallel Architectures, CS326 Concurrent and Distributed Systems, CS333 Cluster Computing, CS343 Programming Paradigms, CS344 Functional Programming, CS372 Transaction Processing, CS390 Advanced Software Development. CS3xx Parallel Computation A survey of parallel computation across hardware, software, programming languages, algorithms and applications areas. The emphasis is on learning enough context in each topic area to support effective parallel programming. Prerequisites: CS112A Programming Methodology, CS210 Algorithm Design and Analysis, CS221 Architecture and Operating Systems Syllabus: • Context for present day parallel computing, including everyday parallelism, parallelism in processor architecture, parallel computer structures from multicore to huge clusters, etc. • Basic concepts: models of parallel computers, differences (and similarities) between parallel and distributed computation, data and task parallelism, threads and processes, latency and bandwidth, locality, concurrent and exclusive reads and writes, dependences, MIMD/SIMD, Amdahl’s Law, performance measurements, true speed-up, relative speed-up, efficiency, super-linear speed-up • Shared memory parallel machine architecture concepts, multi-threading, multi-core, SMP, snooping and directory-based coherency protocols, sequential consistency, private and shared memory • Distributed memory parallel machine architecture concepts, disjoint address spaces, globalization of address spaces, message passing, synchronous and asynchronous communication • Interconnection networks, common topologies, bisection bandwidth, bus and cross-bar connectivity • Basics of threaded parallel computation, including problem partitioning, hazards of concurrency, locking, lock contention, thrashing, privatization, false sharing, serialization • Algorithmic issues including problem decomposition, memory reference costs, techniques for improving locality, parallel prefix, controlling granularity and dependences, block and cyclic storage organization, tree decompositions, static and dynamic task assignment • Languages and libraries for threaded parallel programming, POSIX threads, Java threads and memory model, automatic threading systems (OpenMP) • Languages and libraries for distributed memory parallel programming, PVM and MPI, partitioned global address space languages (PGAS) • Higher-level approaches including array-based, functional, domain-specific • Transaction approach to memory consistency, hardware techniques, software techniques, rollback • Emerging languages including high-productivity parallel languages • Co-processor techniques including GPU, Cell, FPGA, characteristics of co-processor programming methodologies • Experimental techniques, measuring performance, computing speed-up, experimental precautions, controlling variation, experimental dangers, reporting performance