CS 441/641 Project 1
- Topics due in class September 25.
- Rough draft product (paper or code or soldered globs of hardware!) due Tuesday, October 14.
- Lecture notes for your presentation due by midnight Tuesday, October 21.
- Presentations in class October 28 & 30. You should prepare about 15 minutes of material.
- Learn about the rationale, history, and advantages/disadvantages of any current hardware topic, such as:
- Pipelining, especially the very deep piplines of the Pentium 4
- Out-of-order execution
- Register renaming
- Branch prediction, branch history, and execution speculation
- Cache prefetching and out-of-order loads and stores
- Multi-core, SMP, SMT, or SIMD parallelism (pick one!)
- Describe how the design limitations and goals of nonstandard computing platforms differ from conventional computing, such as:
- High-performance computing systems, such as Blue Gene or anything on the Top500 list.
- Consumer game consoles, such as the PlayStation 4 or Xbox One.
- Embedded systems, such as cell phones or microwave ovens.
- Pick a hardware-related article from Ars Technica. Explain what they're talking about in detail.
- Pick a CPU architecture from sandpile.org. Compare this architecture's hardware design, in terms of achievable performance, with competing architectures.
- Describe performance counters, which are useful for understanding code performance and pipelining (see PCL)
- Describe a strange fabrication substrate or nonstandard computing scheme, such as Biological Computing, Quantum Computing, self-organizing polymer nanofabrication, etc.
- Describe a new or novel data storage architectures, such as perpendicular bit recording, MLC flash, magnetoresistive memory, or nanowire memory.
- Describe a semiconductor or PCB fabrication process in detail, such as the problems encountered during as we approach nanometer photolithography, solutions such as extreme UV lithography, or the interelationship between planarization and metal layers in CMOS fabrication.
- Describe the historical evolution of some computer architecture, such as SPARC or Motorola's 68000.
- Explore the decline and fall of some popular computer architecture, such as the 1960's Burroughs B5000 or the early 1980's VAX ("All the world's a VAX!" Or, er, it was...)
- Build an interesting circuit: extend your HW1 CPU, build a superscalar dependency detection unit, etc.
- Hardware performance analysis: benchmark some test programs that demonstrates some aspect of modern hardware, such as:
- Out-of-order execution (e.g., reorder instructions manually, compare to automatic reordering)
- Branch prediction and execution speculation (e.g., reverse-engineer x86 branch hardware, like compare always-taken branch performance with even-odd branch performance)
- Dependency tracking (e.g., benchmark performance benefit from decreasing dependency tree depth)
- Cache prefetching and out-of-order loads and stores (e.g., compare cached loads with cached loads matching a previous store)
- Define a new instruction set, with a software or circuit simulator.
- Write and benchmark some code to perform any interesting task quickly on a particular architecture:
- Use bitwise operations to do something simple faster, or do something simple in a fiendishly complex way.
- Use assembly language or your knowledge of branch prediction, caching, etc to improve the performance of some program.
- Write a dynamic binary translator for any architecture.
- Use SSE or AVX instructions to speed up some code with the power of SIMD.
- Use OpenMP or pthreads to speed up some code with the power of multicore. (But you must get the right answer!)
- Using MPI or sockets to speed up code with the power of clustering.
- Use CUDA or OpenCL to speed up some code with the power of the GPU.
Your starting code can be something completely new, something you found on the net (with a citation), an extension of any homework, example from the lecture notes, etc.