代写COMP 273, Fall 2024, Assignment 4 Tower of Hanoi Puzzle代做R语言

2024-11-25 代写COMP 273, Fall 2024, Assignment 4 Tower of Hanoi Puzzle代做R语言

Tower of Hanoi Puzzle

COMP 273, Fall 2024, Assignment 4

Introduction

This assignment will give you more practice with functions and recursion in MIPS. In addition, it gives you some experience of how to make your code efficient, both in terms of the number of instructions as well as with the use of the cache.

All the functions you write in this assignment  must  respect  register conventions. Your code must also include useful comments to make it readable. You will need to use two MARS tools in this assignment:

•  Data  Cache  Simulator:  This  tool  allows  you  to  set  different  cache  sizes  and  types,  and measures the number of memory accesses, and cache misses.

Instruction Counter: This tool counts the number of true MIPS assembly instructions that are executed during your program.

Each  tool  needs  to  be  connected  to  MARS,  and  you  will  want  to  use  a  combination  of breakpoints and the reset button on each tool to  make careful  measurements of your code performance. you should go over them in "MARs tutorial 3"

Assignment Objectives (40 marks total)

Provided code will help you get started with this assignment. The code lets you run 2 different tests by changing AlgorithmType in the .data section at the top of the code.

-      Algorithm Type 0 will help you test the first objective of this assignment (Tower of Hanoi -recursive method).

-    Algorithm Type  1  will  help  you test the  second  objective  of this  assignment  (Tower  of Hanoi -non-recursive method).

1-  Tower of  Hanoi -recursive method  (20  marks)

The tower of  Hanoi  is  a  puzzle  invented  by  French  mathematician  E(´)douard  Lucas.   The puzzle

consists of three rods: AB and C, and n disks (labeled with numbers 1..n) with different radii stacked on pod A. The disks are arranged from top to bottom in the order of decreasing radius. Figure 1shows an example with three disks. You can move the diskbetween rods, but smaller disks have to be on top of bigger disks, and you can only moveone disk at one time. The goal is to move all the disks from rod A to rod C with the minimal number of  moves.

 

Figure 1: An example of the tower of Hanoi with n = 3

Alice is trying to solve this puzzle (with 3 disks). She cannot solve it directly, so she asks Bob to  move disk  1 and 2 from  rod A to B, then she can simply  move disk 3 fromA to C, and ask Bob again to move two disks from B  to C, and solve the problem!  These two tasks  are  still  a  bit  difficult for  Bob,  so for the first task,  he  asks  Charlie to  move the smallest disk from A to C so that he can move the second disk from A to B, and then ask Charlie to move the smallest disk from C to B. Similar for the second task, he asks Charlie to move the smallest disk from B to A before he moves the second disk from B to C, and asks Charlie to  move the smallest disk from A to C. All the tasks for Charlie are simple enough so he doesn’t need help from others. By asking others to solve the sub-problems, Alice successfully solves the puzzle:

1.  Charlie  moves disk 1 from A to C;

2.  Bob moves disk 2 from A to B;

3.  Charlie  moves disk 1 from C to B;

4.  Alice moves disk 3 from A to C;

5.  Charlies moves disk 1 from B to A;

6.  Bob moves disk 2 from B to C

7.  Charlies  moves disk 1 from A to C.

This idea can be formalized using a recursive algorithm shown in Algorithm1, which gives the solution to move n disks from the source rod to the target rod, with the help of the auxiliary rod.

Algorithm  1  Recursive  algorithm  for  the tower  of  Hanoi

procedure  MOVE (nsourcetargetauxiliary)  : if  n=1 then

move disk 1 from source to target

else

MOVE(n   - 1, source,  auxiliary,  target) move disk n from source to target

MOVE(n   - 1,  auxiliary,  targetsource)

end if

end  procedure

Implement  the  recursive  algorithm  described  above  in  the  provided  hanoi.asm.  The  program should read an integer n (already implemented), i.e., the number of disks. The output should be the steps to solve the problem, one step per line, printed to the standard output.  Each line should

have the format of:                                                                                                                                                

Step i: move disk <disk label> from <rod label> to <rod label>.     Here is an example of the output for the problem with n = 3:

Step 1: move disk 1 from  A  to  C Step 2: move disk 2 from  A  to  B Step 3: move disk 1 from C to B    Step 4: move disk 3 from  A  to  C Step 5: move disk 1 from  B  to  A Step 6: move disk 2 from  B  to  C Step 7: move disk 1 from A to C

You can assume that the input nisa valid integer and 1 ≤  n   15.    Make sure you strictly follow the output format!

2-  Tower of  Hanoi - non-recursive method  (15  marks)

Write  a  non-recursive  algorithm  for  the  tower  of  Hanoi  which  replacing  the  above  recursion algorithm with a loop. You have the same input assumption and output requirements as indicated for the recursion algorithm in 1.

3- Measure cache performance (5 marks)

Complete and submit the provided .csv (comma-separated values) file with entries summarizing the cache performance (i.e., number of cache misses and hit rate) and the instruction count of

the recursive and non-recursive versions of the Tower of Hanoi algorithms implemented in 1 and 2, for an input n (number of disks) =15.

For both solutions, fix the cache size at 1024 bytes and examine performance by varying the block size and number of blocks (with a fixed cache size). Include results for at least two configurations of block size and number of blocks for each solution. Use LRU as a replacement policy for all the tested configurations.

Collect data only from the final version of your implementation, which you will submit for grading.

Ensure that you do not modify your code once data collection begins, as the TA will verify accuracy and may deduct marks if the data collected is inaccurate.

The filename must have the form <YOUR ID> .csv, that is, it should consist of your student number and have the file extension .csv, for instance, “260123456.csv” . To best ensure you respect the file format, rename and edit the provided csv file.  You may include comments in the file by starting a line with “#”, but otherwise complete the entries in the provided file with comma separated values, or fields, on each line.  These fields consist of your student number, the test name, the block size, number of blocks, the instruction count, the number of memory accesses, the number of cache misses, and the hit rate.

The file should only contain ASCII. You can use the MARS text editor to load and edit the provided csv file.  Take care to write your student ID on each line of the provided csv file.

Follow the following steps to measure the required performance of your Tower of Hanoi solutions:

1.    Set two breakpoints at the locations specified in the comments within the provided .asm file for each implemented algorithm.

2.    Ensure the cache simulator is configured correctly, then connect it to MIPS.

3.    Ensure the instruction counter is connected to MIPS.

4.     Run your code up to the first breakpoint.

5.    Press thereset button on the cache simulator.

6.    Press thereset button on the instruction counter.

7.     Press the run button to continue execution.

8.    Once the simulation stops at the second breakpoint just before exiting the program, make note of the instruction count, and the cache performance.

9.    Repeat step 1 to 8 for each algorithm and chosen cache configuration (i.e., block size and number of blocks).

To evaluate cache performance, you must record the memory access count, the number of cache misses, and the hit rate. The file contains four entries to demonstrate these measurements for the two algorithms of the Tower of Hanoi puzzle, with at least two different configurations for  the block size for each.

Submission  Instructions

Submit exactly two files that includes your “ hanoi.asm” and “<ID>.csv” file containing the measurements. Do not use a zip file or any other kind of archive.  Include your name and student number in all files submitted as instructed above.  Add to comments at the top of the provided hanoi.asm file anything you would want the TAs to know (i.e., treat the comments at the top of the asm file as a README, that also should  include a request to apply the one-time penalty waiver for this submission if it has not been used before).

All work must be your own and must be submitted by MyCourses. Double check that you have correctly submitted the correct version of your assignment as you will NOT receive marks for    work incorrectly submitted.

HOWIT WILL BE GRADED

•     Your program must execute to be graded.

•    The grader should test your code against different values of n input for both implemented algorithms and compare the output with the expected one (partial marks will be given).

•     Not following the submission instruction will result in losing 3 marks.

•     Not following MIPs register convention will result in losing 5 marks.