Each problem was worth 40 points, with parts of problem #3 (multi-part) worth 10, 10, and 20 points.

Overall average was 74.2% (st. dev. 14.2%). Average scores by problem were 34.7, 16.1, and 34.3 points respectively.

Obviously, problem #2 was the most difficult. The most important part of solving this problem was to determine the branch penalties for each case. After that, the steps toward the solution were purely mechanical.

Partial solutions:

Q1. Will a 1-bit branch predictor always out-perform a 2-bit predictor (both have 1024 entries)? Your answer should have started with “No”, with explanation following. Your explanation should have stated explicitly a scenario in which a 2-bit predictor does a better job of predicting than a 1-bit predictor. See C-28, for discussion and helpful diagram.

Example: In biased branches, 1-bit predictor will mispredict more often than a 2-bit predictor. A 1-bit predictor has only two states and will guess whether a branch will be taken solely on what happened in the previous instance. A 2-bit predictor bases its prediction on the previous two states. So, for example, for a sequence of branches TTTNTTTTNTTT, a 2-bit predictor will predict TTTTTTTTTTTT with only two mistakes. A one bit predictor presented with the same sequence would make four mistakes by predicting TTTTNTTTTNTT (mispredictions in red).

Q2. Referring to the example in page C-25. Rework the question assuming it takes 5 cycles for the processor to compute and branch target address, but only takes 3 cycles for the processor to compute the branch condition. Find the effective addition to the CPI. Assume the frequency is the same as the example.

Branch scheme              
Flush pipeline 4   2   4    
Predicted taken 4   2   4    
Predicted untaken 4   0   4    
Frequency 0.04   0.06   0.10    
Effective change in CPI                Total
Flush pipeline 0.16   0.12   0.40   0.68
Predicted taken 0.16   0.12   0.40   0.68
Predicted untaken 0.16   0   0.40   0.56

From here, wrapping up should be straightforward.

Q3. 1.11 (p. 66) Availability is the most important consideration for designing servers, followed closely by scalability and throughput. a. [10] We have a single processor with failures in time (FIT) of 100. What is the mean time to failure (MTTF) for this system? b. [10] If it takes 1 day to get the system running again, what is the availability of the system? c. [20] Imagine that the government, to cut costs, is going to build a supercomputer out of inexpensive computers rather than expensive, reliable computers. What is the MTTF for a system with 1000 processors? Assume that if one fails, they all fail.

Most everyone got parts a and c. If there were errors, they were –most often–minor errors in handling exponents.

Part b, however was a different matter. Keep in mind that any reasonable measure of availability will round to 1. The rounded value is quite beside the point. What should be reported is the number of nines. We even speak of availability in these terms: “four nines”, “five nines”, etc. If you truncated your answer, e.g., 0.99, points were deducted. If you only reported the rounded value (which is always 1), points were deducted.