Up: No Title
CS 347 presents the principles, characteristics, and trends of
computer systems design at a level appropriate for all computer
scientists and computer engineers. It expands on the role of a
traditional computer architecture course, focussing largely on the
hardware design, to include aspects of the complete system, comprising
the hardware, operating system, compilers, and application software.
Our intention is to present material that will benefit all computer
scientists, even those who are more concerned with software
development than with hardware design. By learning more about what is
inside ``the box,'' software developers can make more effective use of
computers, often achieving dramatic performance gains.
Students will also gain an understanding of the hardware
technology that has fueled the rapid progress of computer systems.
Since the technology will continue to change and improve, it is
important to see how these changes will affect the characteristics of
future computer systems.
After completing the course, students should have gained a firm
grounding in the following:
- Machine-level programming.
- With the advent of optimizing
compilers, there is seldom need to write large amounts of assembly
code. On the other hand, it is important to be able to understand
the code generated by these compilers, and to write small sections of
code. We will use the Digital Alpha instruction set as our main case study,
mostly using assembly code generated by the C compilers.
- Instruction Set Design.
- In addition to Alpha, we will study the
general characteristics of other instruction sets, including the
Intel x86 and the IBM PowerPC.
- Pipeline Processor Implementation.
processors are designed to execute instructions in a pipelined, and
possibly superscalar fashion. The characteristics of these
pipelines and the code scheduling capabilities of an optimizing
compiler can greatly affect the performance the processor achieves.
- Memory Subsystem.
- The combination of primary memory, caches,
and virtual memory are intended to provide the illusion of high
speed access to a large memory space. Understanding how this
subsystem operates is critical to efficiently implementing
applications with high memory requirements.
- Program Optimization.
- Understanding the characteristics of the
machine, as well as the capabilities and limitations of optimizing
compilers, application programmers can often tune their programs to
achieve much higher performance. Performing this tuning requires
mastery of techniques and tools to profile, measure, and benchmark
- I/O and Storage Subsystem.
- With the advent of multimedia
applications, we are seeing stringent, real-time requirements placed
on the various I/O and display devices, as well as the busses
connecting them to the CPU. Understanding the organization and
performance characteristics of this subsystem is therefore critical
to current and future software developers.
- Parallel Computing.
- Increasing application performance by
using resources operating in parallel has been attempted in a number of
different ways for nearly 50 years. Although the track record for
these efforts is mixed, there are many indications that parallelism
will play a increasingly critical role as the technology and the
techniques for exploiting it mature.
Up: No Title
Tue Jan 13 13:55:42 EST 1998