Architecture Research Project (Project 1)
CS 441, Dr. Lawlor
A substantial chunk of your course grade comes from the two semester
projects.
PROJ1: a paper and in-class
presentation on an architecture topic of your choice, due in
October.
Here's what's left of the semester, before the midterm on October 20:
September 2011
Su Mo Tu We Th Fr Sa
18 19 20 21 22 23 24
25 26 27 28 29 30 <- topic due
October 2011
Su Mo Tu We Th Fr Sa
2 3 4 5 6 7 8 <- rough draft due
9 10 11 12 13 14 15 <- presentations
16 17 18 19 20 21 22 <- final draft & midterm exam
23 24 25 26 27 28 29
30 31
Please have your project 1 topic (see list below) picked out by class on Tuesday,
September 27. You don't need to write anything up, but you should
be ready to give a useful two-minute synopsis of the topic.
Your rough draft is due Thursday, October 6. This should work, but need not have all the features you want, or be polished well.
We'll do the presentations
on Thursday October 13. There
are seven people in
class, and 90 minutes, so that's about 12 minutes per
person. You should prepare about 10 minutes of interesting,
informative content, which leaves 2 minutes for questions and to change
speakers. PowerPoint is NOT required, but you MUST have
a clear idea of what you will present AND some sort of
examples/illustrations/code/graphs.
Your final draft is due Thursday, October 20. Everything should work and be well polished: documentation also counts!
Possible Project 1 Topics
Or choose your own topic! Topics can be either research of the form "Learn and present what people have done about X", or applied
work of the form "Build a new X".
Research topics:
- 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 3, Xbox 360, or Wii.
- 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 novel data storage architectures, such as perpendicular bit recording, magnetoresistive memory, nanowire memory.
- Describe
a semiconductor or PCB fabrication process in detail,
such as the problems encountered during deep-submicron
photolithography, 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 VAX ("All the world's a VAX!" Or, er, it was...)
Applied topics:
- Build an interesting circuit: extend your HW1 CPU, build a superscalar dependency detection unit, etc.
- Define a new instruction set, with a software or circuit simulator.
- Write and benchmark some architecture-specific code to perform any interesting task:
- 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.
- Use CUDA or OpenCL to speed up some code with the power of the GPU.