Current Courses


High Performance Programming with Multicore and GPUs. Prereq: EC 413. Considers theory and practice of hardware-aware programming.  Key theme is obtaining a significant fraction of potential performance through knowledge of the underlying computing platform and how the platform interacts with programs.  Studies architecture of, and programming methods for, contemporary high-performance processors.  These include complex processor cores, multicore processors, and graphics processors.  Laboratory component includes use and evaluation of programming methods on these processors through applications from Linear Algebra and the Fast Fourier Transform.



Computer Architecture. Prereq: EC 413. Principles of computer architecture and design. Topics include computer arithmetic and ALU design, performance evaluation, instruction sets, CPU design (esp. dynamic scheduling, superscalar processing, speculative execution, and branch prediction), memory hierarchies (advanced cache design techniques, virtual memory, and memory systems), and I/O systems (esp. basic performance evaluation).  Case studies.
Text: Computer Architecture: A Quantitative Approach by John L. Hennessy and David A. Patterson.



Computer Organization. Prereq: EC 311. Introduction to the fundamentals and design of computer systems.  The starting point is a basic knowledge of logic design and high-level language programming.  Topics covered include computer instruction sets, assembly language programming, logic design of arithmetic operations, design of sequential logic with registers and buses, CPU design (data path, control, integrating datapath and control, pipelining), performance evaluation, memory devices, memory systems (including caching and virtual memory), and I/O.  In parallel there is a lab where the focus is on in-depth understanding of comp org topics, HDL design, and system design methods. 
Text: Computer Organization and Design: The Hardware/Software Interface by David A. Patterson and John L. Hennessy