Visual computing tasks such as 2D/3D graphics, image processing, and image understanding are important responsibilities of modern computer systems ranging from sensor-rich smart phones to large data-centers. These workloads demand exceptional system efficiency and this course examines the key ideas, techniques, and challenges associated with the design of parallel (and heterogeneous) systems that serve to accelerate visual computing applications. This course is intended for graduate and advanced undergraduate-level students interested in architecting efficient future graphics, image processing, and computer vision platforms and for students seeking to develop scalable algorithms for these platforms. Topics covered include the implementation of the camera RAW pipeline, optimizing compilers for image processing, image processing hardware, design of frameworks for DNN evaluation and training, hardware architectures for DNN acceleration, large-scale 3D reconstruction techniques, the design and implementation of real-time 3D graphics pipelines, hardware accelerated ray tracing, and the design of domain-specific languages and compilers for visual computing.
This is a graduate-level star course with no official prerequisites for Ph.D. students. Advanced undergraduates and master students are welcome with instructor permission. Undergraduate and masters student must have taken 15-418/618 (Parallel Computer Architecture and Programming) or a commensurate computer architecture course such as 18-447 (but preferably 18-740 or 18-742). Students will read academic papers each week, perform a number of short programming assignments, and conduct a substantial seven-week final project. In addition to 15-418/618, I recommend some graphics experience at the level of 15-462. The more implementation experience you have the better.
We will be using Piazza for general class announcements. The 15-769 Piazza signup page is located here.
Students in 15-769 are absolutely encouraged to talk to each other, to the TAs, to the instructors, or to anyone else about course assignments. Any assistance, though, must be limited to discussion of the problems and sketching general approaches to a solution. Each programming project team must write their own code and produce their own writeup. Consulting another student's or team's solution, or solutions from the internet, is prohibited. These and any other form of collaboration on assignments constitute cheating. If you have any question about whether some activity would constitute cheating, just be cautious and ask the instructors before proceeding!
You may not supply code, assignment writeups, or exams you complete during 15-769 to other students in future instances of this course or make these items available (e.g., on the web) for use in future instances of this course (just as you may not use work completed by students who've taken the course previously). Make sure to make repositories private if you use public source control hosts like github.