ECEN/CSCI 4593 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,
focusing largely on the hardware design, to include aspects of the
complete system, comprising the hardware, operating system, compilers,
and application software.
The 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
MIPS instruction set as our main case study, mostly using assembly
code generated by the C compilers.
- Instruction Set Design.
- We will study the general characteristics of several
instruction sets, including the MIPS and Intel x86.
- Processor Implementation.
The design of the internal components of a processor's
datapath and control will be covered.
An non-pipelined implementation of a processor using the MIPS
instruction set will be used as basis for this discussion.
- Pipelined Processor Implementation.
- Modern 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
- 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
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.