This course prepares the programmer to tackle the massive data sets and huge problem size of modern scientific and enterprise computing. Google and IBM have commented that undergraduate CS majors are unable to ”break the single server mindset.” Students taking this course will abandon the comfort of serial algorithmic thinking and learn to harness the power of cutting-edge software and hardware technologies. The issue of parallelism spans many architectural levels. Even ``single server'' systems must parallelize computation in order to exploit the inherent parallelism of recent multi-core processors. The course will examine different forms of parallelism in four sections. These are: (1) massive data-parallel computations with Hadoop!; (2) programming compute clusters with MPI; (3) thread-level parallelism in Java; and, (4) GPGPU parallel programming with NVIDIA's Cuda. Each section will be approximately 3 weeks and each section will involve a programming project. The course is also suitable for second-year undergraduate CS majors and undergraduate and graduate students from other science and engineering disciplines that have prior programming experience. [Systems]
Prerequisite: EN 600.120 Intermediate Programming or equivalent
Students may receive credit for 600.320 or 600.420, but not both.
The guidelines of Hopkins’ academic ethics policy and student conduct policy apply to all activities associated with this course. Additionally, students are subject to the Computer Science Academic Integrity Code. Students are encouraged to collaborate on all coursework, but are required to turn in work that is solely their own. This means that preparation of assignments must be performed individually. Any questions regarding academic conduct should be directed to the course instructor.
Schedule: TTh 12:00 pm - 1:15 pm, 302 Shaffer Hall
Instructor: Randal Burns, randal(at)cs.jhu.edu, http://www.cs.jhu.edu/~randal/
Co-Instructor: Matthew Bolitho, bolitho(at)cs.jhu.edu, http://www.cs.jhu.edu/~bolitho/
Teaching Assistants: Kalin Kanov, kalin(at)cs.jhu.edu
Mailing List: cs419@hssl.cs.jhu.edu, http://hssl.cs.jhu.edu/cgi-bin/mailman/listinfo/cs420/
Required Text: Mattson, T. G., B. A. Sanders, and D. L. Massingill. Patterns for Parallel Programming. Addison-Wesley, 2004. The text is available at the Hopkins bookstore. It's also on sale at Amazon.
Difference between 320 and 420: The courses will have the same workload, assignments, and tests. They will be graded as two separate courses, i.e. all 320 students as one group and all 420 students as a group. Students in both 320 and 420 will execute a final project independently or in teams. The 320 project will be equivalent in size to other programming assignments. The 420 project will be substantially larger in scope.
Final Exam: Monday, December 15, 2pm-5pm