ACM Curriculum Suggestions for Parallel Computing

advertisement
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
Download