|
|
|
Teaching/Courses
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.
|