Stanford CS348K, Spring 2024
Tues/Thurs 10:30-11:50pm
Location: Lathrop 282
Instructor: Kayvon Fatahalian
Course Description

Visual computing tasks such as computational imaging, image/video understanding, and real-time 3D graphics are key responsibilities of modern computer systems ranging from sensor-rich smart phones, autonomous robots, and large datacenters. These workloads demand exceptional system efficiency and this course examines the key ideas, techniques, and challenges associated with the design of parallel, heterogeneous systems that accelerate visual computing applications. This course is intended for systems students interested in architecting efficient graphics, image processing, and computer vision platforms (both new hardware architectures and domain-optimized programming frameworks for these platforms) and for graphics, vision, and machine learning students that wish to understand throughput computing principles so they can design new algorithms that map efficiently to these machines.

Course Staff
Office hours:
Tues 3-4pm, in Gates 366
Your helpful CAs:
Office hours:
Zander Majekcik
Office hours:
Announcements via Ed Discussion

All class announcements will be made via our Ed Discussion forum. Everyone enrolled in the course via Canvas should be able to access this site.

Grading / What You Will Do

All students will be expected to:

  • (50%) Perform academic paper readings approximately every class (and be prepared to summarize aspects of the paper and participate in the paper discussions we have in class). The implication of this participation requirement is that all students are expected to come to class.
  • (50%) Complete a self-selected term project. Students may work in teams of three for the final project (four students per team may be allowed in certain circumstances). Since projects are significant portion of the grade, there are high expectations for student effort on projects. MS and PhD students are expected to perform projects that either implements state-of-the-art research results or performs an investigation that might be the beginnings of publishable work. Undergraduate and MS students that do not have their own research interests should work with the course staff to design an appropriately scoped project. We want to help you design a project that you'll find challenging and fun!
Prerequisites and How to Prepare

Hello there. I'm glad you are interested in CS348K. This course focuses on the design of computing systems that efficiently meet the aggressive performance demands of visual computing applications. Specifically we'll be concerned with digital camera image processing, image/video understanding (largely deep learning based methods), and real-time 3D graphics. Since designing highly efficient systems requires in-depth knowledge of the workloads to execute, we will cover key algorithms used in each of these domains. That is, you will certainly learn some advanced graphics/vision. Conversely, to execute with high performance, algorithms must be mapped efficiently to hardware resources, and to do so, we will talk extensively about the characteristics of modern parallel architecture, and how that impacts the choice of algorithms used. That is, we will also be discussing parallel computer architecture is this class. A key theme of this course is that, to achieve the most efficient solutions, modern systems architects should simultaneously consider opportunities for innovation in the design of algorithms, the programming frameworks used to express them, and the capabilities of the underlying hardware architecture. Regardless of whether you are an application developer, systems software programmer, or hardware architect, I want to you leave this course with a better understanding of how to think end-to-end.

It is likely that you may have a strong background in parallel architecture or in algorithms for either computer graphics/computer vision, but not in both. Do not panic, but please read the tips below.

This is a graduate-level course but advanced undergraduates are certainly welcome. (You are responsible for determining whether you can keep up with the course).

On the parallel systems side, I recommend having some background in modern parallel computing at the level of CS149, or a computer architecture course such as EE282.

On the graphics, computer vision, and deep learning side of the fence, I recommend you have some background implementing algorithms in at least one of these areas. For 3D computer graphics, that would be at the level of CS248A (or CS248B), for computer vision it is CS231A or CS231N (CS231N is very relevant to our discussions), and for image processing: CS232/EE368. Graduate-level systems and computer architecture students without substantial graphics/computer vision experience are welcome in CS348K (in fact the course is designed for you!), but you must be willing to familiarize yourselves with key graphics/visual computing concepts during the course. You can't design good systems unless you really understand the workloads.

If you are still unsure if you're prepared to take the course, just come talk to a your friendly instructor before the start of the course.