代做EECE7352 Computer Architecture Homework 2帮做Python语言程序
- 首页 >> Java编程Computer Architecture
EECE7352
Homework 2:
For part A of this homework, you will need to use the BRISC-V simulator. The simulator is located online at:
https://ascslab.org/research/briscv/simulator/simulator.html
For this lab we will only be using the 32-bit base RISC-V ISA (RV32I). This base ISA supports simple integer operations, including load, store, branch and jump instructions. Instructions for floating point and integer multiply may not be included in RV32I. Read the RISC-V specification on Canvas to see which instructions are available in the RV32I base instruction set. Note that the instruction sheet and RISC- V specification both include instructions for extensions, in addition to the base RV32I instructions. Do not use instructions from any extensions, they may not be supported by the simulator we are using.
There are two example programs on Canvas (the assembly code is already provided with the simulator). We provide source code (gcd.c and fibonacci.c) and assembly code (gcd.s and fibonacci.s) in order to show you example programs in RISC-V assembly. These programs also provide you with examples of the calling convention used by RISC-V. These programs are provided here for your reference.
Pay attention to three things in the assembly code:
• How is the stack pointer managed?
• How is the frame pointer (s0) managed?
• How are function arguments and return values passed?
To test your assembly code, load it in the BRISC-V simulator. A manual with directions for the simulator can be found here:
https://ascslab.org/research/briscv/simulator/manual.html
Part A: (40 points)
1) Write a RISC-V assembly program to return the largest of three integer
values. The two input values should be initialized in main(). The main() function should call the largest(int x, int y, int z) function, passing three integer values as arguments. The largest function should return the largest of the three integer values. If there are two equal-valued inputs that are largest, then return a value of zero. If all three values are equal, then return the input value squared.
a. Write a RISC-V assembly program to implement and test the
largest(int x, int y, int z) function. Submit your assembly code on Canvas.
b. What is the largest number that the largest program can accept as input and still produce an accurate answer?
2) Write a recursive RISC-V assembly program to convert a base8 octal number to binary. Assume that you initialize the octal number in main(). We provide a recursive dectobin program as a C program example on Canvas, that converts a decimal number to a binary number.
a. Submit your assembly code on Canvas.
b. Modify your assembly code to convert a base 8 octal number to base10. Submit your assembly code on Canvas.
Part B: (30 points)
For this problem you will use the bfs.c (bfs) program provided, and you need to produce a dynamic instruction mix table (similar to Figure A.29 in your textbook) to characterize the execution of the quicksort program. You can perform this study on any architecture of your choice. There are a number of approaches you can take to produce this data.
1) You could instrument the code to capture the execution frequency of each basic block, and then, using an assembly listing of the program, provide instruction counts (this is slightly imprecise, but very acceptable for this assignment).
2) You could find a tracing program that can capture an instruction trace. You would then have to write a program to count individual instructions (challenging, but not impossible).
3) You could find a tool out on the Internet that provides this capability already for you. While this sounds easy, it may be a bit of work to learn the particular tool you have chosen to use.
4) Try compiling bfs.c with and without optimization and report on how this changes your instruction mix.
You should compile and run bfs.c on the COE x86-64 system (gateway machines). You will need to run the program using the provided graph dataset that is in RMAT format. To run the program, you need to issue: cat sample.txt | ./bfs 1
Please make sure to explain how you produced the data in your table and provide details of the tools that you used.
Part C. (15 points)
For this part ofthe assignment, write two different benchmark programs on your own that contain significant floating-point content. Compile the programs on X86 and generate an assembly listing of the benchmarks. Then identify 4 different floating-point instructions used in each program (a total of 8) and explain both the operands used by each instruction and the operation performed on the operands by the instruction.
Part D. (15 points)
For this problem you will need to read through Appendix K in your text, covering a number of instructions sets, and then answer the following questions:
1) Name 2 CISC instruction set architectures and 2 RISC instruction set architectures.
2) Describe 3 characteristics of the DEC Alpha instruction set.
3) Discuss the differences/similarities between MIPS and PowerPC in terms of how they handle conditional branches.
4) Provide an example of how register windows work on the SPARC ISA.
5) In your opinion, which generation of the Intel x86 architecture provided the most significant advances as compared to the previous generations ofthe ISA.
Part E. (20 points of Extra Credit to your quiz grade)
Read the Amdahl, Blaauw and Brooks 1964 paper on the IBM 360 Architecture.
Given the timeframe. of the paper, what do you find the most impressive feature of the architecture as described by the authors? Justify why you feel this is such a great feature. Also, discuss the representation of the various data types supported on this important ISA, and contrast it with the RISC-V.