Greg Steffan

Associate Professor &
Jeffrey Skoll Chair in
Software Engineering
ECE, U of Toronto

It is with deep sadness that we
announce Professor Greg Steffan's passing on July 24, 2014.

Research Team
Pubs (by type)
Pubs (by date)
Reading Group


Currently Teaching for 2013/14:

  • APS105: Computer Fundamentals This course provides an introduction to computer programming using the language C. Students learn about basic data and control structures, and algorithms, via programming assignments.

  • ECE1755: Parallel Computer Architecture and Programming This course explores the evolution of modern parallel architectures and programming models We investigate in detail the design and operation of modern parallel architectures, with a brief look at how they are programmed. We also study current research and development of emerging parallel architectures. The course is centered on a large project where students implement and evaluate new/recent research ideas.

Past Courses:

  • ECE243: Computer Organization This course teaches low-level computer programming and basic computer design, with a focus on embedded systems. Students learn basic software mechanisms and assembly programming, I/O and device interaction, and basic processor and memory system architecture. The course is centered around a series of hands-on assignments in our DESL laboratory where students build real systems with peripherals. The course culminates in a project, often involving LEGO robotics (photos of past projects).

  • ECE454: Computer Systems Programming This course goes beyond prior programming courses to teach students to better understand computer hardware, operating systems, and compilers from a programmer's perspective. In particular this course leverages this improved understanding to allow students to program for good performance. Students learn how to measure and understand program execution and behavior, how to get the most out of an optimizing compiler, how memory is allocated and managed, and how to exploit caches and the memory hierarchy. Furthermore, students learn about current trends in multicore, multithreaded, and data parallel hardware, how to exploit parallelism in their programs, and the fundamentals of parallel architectures and synchronization techniques---these latter topics are relatively new to undergraduate curricula and in increasing demand in industry. Students get hands-on experience with most topics through programming assignments.

  • ECE540: Optimizing Compilers This course teaches theoretical and practical aspects of building modern optimizing compilers. Topics covered include intermediate representations, basic blocks and flow graphs, data flow analysis, partial evaluation and redundancy elimination, loop optimizations, register allocation, instruction scheduling, and interprocedural memory hierarchy optimizations. Students implement and evaluate significant optimizations within the framework of a research compiler.

  • ECE1718: Special Topics in Computer Hardware Design: Modern and Emerging Architectures The focus of this course is on computer architecture, with an emphasis on real life modern and emerging microprocessor architectures. The course is divided into two phases. The first phase provides a thorough (but speedy) background in modern microprocessor architecture, covering instruction-sets, pipelining, multiple and out-of-order instruction issue, the memory system and caching, and parallel architectures; this phase includes several homeworks which provide hands-on experience with architectural simulation of the mechanisms described in class, as well as preparation for the project. The second phase of the course switches gears: we study current research and development of emerging architectures including simultaneous multithreading, reconfigurable/programmable hybrids, grid processors, network processors, thread-level speculation, and architectures for nanotechnology; in this phase we read research papers, and through the class project implement and evaluate new ideas. Students are welcome to suggest topics for class discussion and/or projects.