Question: Task 3 : Open MPI Helpful resources: Lab 7 , Discussion 1 0 , Homework 1 0 Up until this point, you've been using the
Task : Open MPI
Helpful resources: Lab Discussion Homework
Up until this point, you've been using the provided coordinatornaive.c as the coordinator with a small number of tasks. However, coordinatornaive.c does not have any PLP capabilities and we can optimize it for a workload that includes a larger number of tasks.
Implement an Open MPI coordinator in coordinatormpi.c
The structure of the code will be similar to the Open MPI coordinator you wrote in homework and discussion
Copy your existing compute functions in computeoptimized.c to computeoptimizedmpi.c and make any changes necessary to further improve the speedup.
"coordinatormpi.c
#include
#include "coordinator.h
#define READY
#define NEWTASK
#define TERMINATE
int mainint argc, char argv
if argc
printfError: not enough arguments
;
printfUsage: s pathtotasklist
argv;
return ;
TODO: implement Open MPI coordinator
#include "compute.h
Computes the convolution of two matrices
int convolvematrixt amatrix, matrixt bmatrix, matrixt outputmatrix
TODO: convolve matrix a and matrix b and store the resulting matrix in
outputmatrix
Flip Matrix B Horiztonally
for int i ; i bmatrixrows; i
int start i bmatrixcols;
int end start bmatrixcols ;
while start end
int temp bmatrixdatastart;
bmatrixdatastart bmatrixdataend;
bmatrixdataend temp;
start;
end;
Flip Matrix B Vertically
for int i ; i bmatrixrows ; i
int startRow i bmatrixcols;
int endRow bmatrixrows i bmatrixcols;
for int j ; j bmatrixcols; j
int temp bmatrixdatastartRow j;
bmatrixdatastartRow j bmatrixdataendRow j;
bmatrixdataendRow j temp;
Determine Output Matrix Dimensions
int outputrows amatrixrows bmatrixrows ;
int outputcols amatrixcols bmatrixcols ;
Allocate Output Matrix Memory
outputmatrix mallocsizeofmatrixt;
if outputmatrix NULL
return ;
outputmatrixrows outputrows;
outputmatrixcols outputcols;
outputmatrixdata mallocoutputrowsoutputcolssizeofint;
if outputmatrixdata NULL
freeoutputmatrix;
return ;
Perform Convultion
for int i ; i outputrows; i
for int j ; j outputcols; j
int sum ;
for int k ; k bmatrixrows; k
for int l ; l bmatrixcols; l
int ik i k;
int jl j l;
sum amatrixdataik amatrixcols jl bmatrixdatak bmatrixcols l;
outputmatrixdatai outputcols j sum;
return ;
Executes a task
int executetasktaskt task
matrixt amatrix, bmatrix, outputmatrix;
char amatrixpath getamatrixpathtask;
if readmatrixamatrixpath, &amatrix
printfError reading matrix from s
amatrixpath;
return ;
freeamatrixpath;
char bmatrixpath getbmatrixpathtask;
if readmatrixbmatrixpath, &bmatrix
printfError reading matrix from s
bmatrixpath;
return ;
freebmatrixpath;
if convolveamatrix, bmatrix, &outputmatrix
printfconvolve returned a nonzero integer
;
return ;
char outputmatrixpath getoutputmatrixpathtask;
if writematrixoutputmatrixpath, outputmatrix
printfError writing matrix to s
outputmatrixpath;
return ;
freeoutputmatrixpath;
freeamatrixdata;
freebmatrixdata;
freeoutputmatrixdata;
freeamatrix;
freebmatrix;
Step by Step Solution
There are 3 Steps involved in it
1 Expert Approved Answer
Step: 1 Unlock
Question Has Been Solved by an Expert!
Get step-by-step solutions from verified subject matter experts
Step: 2 Unlock
Step: 3 Unlock
