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.
All students will be expected to:
- 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). (40%)
- Complete two programming assignments that are designed to give a brief, but first-hand experience with course topics in the first section of the course. (20%)
- Complete a self-selected term project. Students may work in teams of two for the final project. (40%)
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). For undergraduates CS110 (or equivalent) is a strict prerequisite. Although the programming assignments in this class are short, you need to have a strong systems programming background to do the assignments, as well has have enough systems programming experience to understand the papers we read. The more prior implementation experience the better.
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. You may wish to review some of the lectures in my own prior course on parallel computing at CMU, from which you can find public online lectures here (2017) and here (2016) (newer content in 2017, better videos in 2016).
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 CS248, 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 your friendly instructor before the start of the course.