Answered step by step
Verified Expert Solution
Question
1 Approved Answer
Provided skeleton file below. conv 2 d . asm You must follow the MIPS calling convention. Be sure to actually follow the calling convention; solutions
Provided skeleton file below.
convdasm
You must follow the MIPS calling convention. Be sure to actually follow the calling convention; solutions which do not follow the MIPS calling convention are not correct!
d convol
Last week you implemented a simple D convolution function prompt and skeleton code below with some basic assumptions about how that convolution operates such as filter size, stride and padding. This week you're going to create a function that performs D convolution by calling that original function, using many of the same assumptions a fixed x filter, with a stride of and no padding However, this time youre going to need to write the output array on the stack and print the entire array within the function. Your D convolution function will accept parameters, input height, input width, a pointer to the start of the input array and a pointer to the filter array. You can assume the input and output matrices will be no larger than by See below for the C code that implements the equivalent function.
Representing a D array
Multidimensional arrays in memory do not actually have multiple dimensions, but are instead flattened. The way these arrays are flattened are determined by the programmer or the language, and fall into two general categories, row major and column major. Row major indicates that elements in the same row are physically next to each other in memory, while column major has elements in the same column next to each other. In order to index the array you need to know the length of the major axis. For example, a column major system indexed by arrayrowcolumn the memory location of arrayij becomes array i columnlength j For this lab assume all arrays the filter, input, and output are all row major the c code is already written in row major, so just follow that
Function call notes:
Theres a lot of iteration variables that youll need to keep track of across calls to the original conv function. This is a great time to use the $s registers, but in order to ensure correctness you need to make sure to save and restore those registers in the conv function using the stack. Also, we expect the convD function to properly handle the $s registers, so your function will be tested in a way that ensures those registers are unaffected.
Skeleton code information:
The skeleton code has a main that accepts input height and width from the command line in that order then uses that to calculate the size of the input. Then it accepts all of the values in the input array from the command line as well. You can either input these manually, or prepare the inputs in a text file, then use the command:
spim f convdasm inp.txt
An example input file is provided in the drive.
Equivalent C code
void convint inp int filt int result int resultl
int filtwidth ;
forint i ; i resultl; i
forint j ; j filtwidth; j
resulti inpi j filtj;
The a registers match the order of the arguments
$a inpheight, $a inpwidth, $a inp, $a filt
void convDint inpheight, int inpwidth, int inp int filt
int filterheight ;
int filterwidth ;
int outheight inpheight filterheight ;
int outwidth inpwidth filterwidth ;
ifoutheight outwidth
return;
int outputoutheight outwidth;
forint i; i
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started