The University of Southern California’s Viterbi School of Engineering is collaborating with Intel to integrate Parallel Computing (a.k.a. “Parallelism”) into Computer Science, CS Gaming, Computer Engineering and Electrical Engineering curricula at both the undergraduate and master’s degree levels.
CSCI 100 – Introduction to Computer Science | Syllabus
This course is an introduction to the computer science major and profession, as well as a first programming course for engineering students. Parallel computing topics specifically addressed include parallelism topics of “thinking parallel” and task and domain decomposition, parallel programming models, Introduction to Open MP and Native Threads, and basic synchronization and locking.
CSCI 201 – Principles of Software Development | Syllabus
The course is about developing large software systems that are multithreaded using an agent-based architecture. Also covered is unit testing, working on teams, and an introduction to processes/threads/address-spaces. The course specifically addresses parallel computing by introducing agent architecture, messaging, semaphores, monitors and data sharing. A large team project with CSCI 200 is a major aspect of the course.
CSCI 522 - Game Engine Development Course | Syllabus
The purpose of this course is to familiarize the student with the principles of developing game engines targeted at modern PC and game console hardware. This course will provide basic and advanced techniques for designing and developing a game engine suitable for use on a wide variety of next-generation gaming hardware. Through implementing the essential systems of a high-performance, multi-threaded, cross-platform, real-time 3D game engine, the student will gain familiarity with the characteristics of such engines.
EE 352 - Computer Organization and Architecture | Syllabus
This course covers the computer organization and architecture of the important components of computing systems, and how those components are interrelated. Starting with examination of instruction set architecture and progressing towards the internal organization of modern processors and memory hierarchies, students will gain an appreciation of how high level program code is mapped, scheduled and executed on the hardware. Emphasis will also be placed on the performance impact that the HW architecture imposes on both sequential and parallel programs.
EE 451 – Computer Architecture and Performance Programming | Syllabus
This is an advanced course dealing with computer architectural concepts as well as abstractions, software and optimizations necessary in parallel computing. Architectural concepts include computer organization, fixed and floating point representation, pipeline processor implementation, data level parallelism / SIMD, ILP and out of order execution, cache coherence and consistency, shared variables, atomic operations, locks and barriers, pipeline and data hazards, speculative execution, benchmarks, and multicore processors. Coverage of abstractions, software and optimizations includes expressing parallelism using PRAM, parallel programming and paradigms, Pthreads programming models, data layout and prefetch, simple performance models, optimizing cache performance, multicore implementations, and minimizing communication time.
EE 452 - Game Hardware Architectures Course | Syllabus
The purpose of this course is to familiarize the student with the architectural principles underlying modern game console and PC hardware design. This course provides an introduction to the programming techniques, optimization strategies, and hardware insights needed to create games that exploit the power inherent in these systems. Students will learn about concurrency and parallelism and how these two can help gain performance on the execution of typical, highly computational expensive game programming primitives. Topics covered on parallel programming will include hardware threading, shared vs. private memory, race conditions and deadlocks concepts. Further, the students will learn about domain, functional and pipeline decomposition techniques needed to achieve correct parallelism.
EE / CSCI 653 – Advanced Topics in Microarchitecture | Syllabus
Annavaram uses his many years of industrial experience at Intel and Nokia to teach students what it really means to be a computer architect. His courses use a mix of topics related to fundamental advances in computer system design and industry relevant issues of immediate concern. Using highly interactive lecture sessions and hands-on design labs he avoids having to face students who use class time to catch up on sleep.