Extra Credit Research Projects

In case you feel you need some extra points to help offset exam grades you are not happy with, here are some research projects you can work on to earn some extra credit. The points available can be up to a full letter grade, but only if you do a really good job putting together a project report. One or two pages of notes will earn some points, but not that many. Treat this like a professional research project and write a professional report to get full points.

You may be asked to make a short presentation on your project on the last day of class, when we have the final group project presentations.

Project Requirements

Each project will need to be documented using Microsoft Word or reStructuredText is you want to try that. You should include figures you snarf from the internet (properly, you should note where you got them). The report should have the following sections:

  • Introduction - explain what the project is seeking to do
  • Research - where did you find the information needed to complete the project
  • Experiments - what experiments did you conduct. What were you trying to find out? If you produce code for this project, include the code and explain how you set it up and ran it.
  • Results - what were your findings
  • Conclusions - why would any of this material be of interest to a person studying computer architecture assembly language?

Of course, you should make the report presentable, and run it through the spell checker at least! You can use your document to make your presentation, or set up a PowerPoint presentation. All material should end up checked in to your GitHub homework repository, under “ExtraCredit” to get the extra credit.

Note

this is an individual effort, not a team effort. do your own research and come up with your own results.

Here are the research projects:

how does multi-core work

When your processor has multiple cores, you might wonder how it boots up and how each core gets assigned something to do. This project seeks to explore that issue.

Basically, you need to research what really happens when a multi-core processor first powers up, and find out how we can set up individual programs for each core to process. You should focus on the pentium processor, although you can look into the Arm for this if you choose.

Here is an Intel document on multi-core architecture that explains things pretty well. It is a bit dated, but still good reading.

You can find similar documentation for doing this on the ARM, which has four cores on the chip.

You should build some example code that shows how we can get the processor to run a program on a specific core in your machine. This can be done in C/C++ and these is code on the Internet showing how to do this. Demonstrate your code in the Linux VM for the Pentium, or on the Raspberry Pi for the ARM.

Note

You will need to configure your VM to use at least two processors for this to work with Pentium. code Those settings can be made while the machine is powered down.)

Booting your PC

Without worrying about all the cores in your machine, it is possible to build an assembly language boot loader for your system that does nothing but fire up the machine and say something on the system console (like “hello, world”? Nah, that is too obvious!). All of this must be done in 512 bytes.

This project involves getting a boot loader installed in a virtual machine disk image, then booting that virtual machine to see our message. There are many example projects that do this, and several of them use the Nasm assembler.

Exploring Intel Micro-Ops

Intel is pretty quiet about what actually goes on inside the chip, especially when it comes to the micro-operations used to actually do the work inside the machine. Lately, though, a number of researchers have constructed “cycle-accurate” simulators for the Pentium family of chips, and these simulators set up what they think is a good approximation of the micro-operations actually at work in the chip. One such simulator is MARSSx86, which is hosted on Github.

This project will explore those micro-ops and describe how they work. You can get the needed information from the PTLsim manual:

Of course, the code itself is a good source for information, although it is a very complex C++ program. The code you need to examine is in the core/ooo-core subdirectory, and in x86/uopimpl.cpp.

You do not need to study all the micro-operations listed here, just those that we have studied in this class. Specifically, those needed to implement the standard structures and do some simple math and logic operations on data.

Exploring Assembly Language on the ARM

Using the techniques we used to identify the most important AVR instructions needed to let us set up our standard structures, perform a similar experiment using the ARM processor on the Raspberry PI. If you need one of these systems to do this work, I will lend one out.

This project should show assembly language similar to that presented in the C Program Tear-Down lecture, only this code needs to be in ARM assenbly language, not Pentium code as we used in that lecture.

Other Topics

I am willing to let you do research on project of your own choosing. In this case, you need to write up a short proposal and submit it for approval. Remember it should be related to the material we have been studying.