#include #include #include int main(int argc, char** argv) { // Initialize the M
ID: 3914864 • Letter: #
Question
#include #include #include int main(int argc, char** argv) { // Initialize the MPI environment MPI_Init(NULL); // Find out rank int rank; MPI_Comm_rank (MPI_COMM WORLD, &rank;); void ring(int* token, int numtasks, int rank, double time1) if (rank !- 0) MPI Recv(&token;, 1, MPI INT, rank-1, 0. MP? COMM WORLD, MPI STATUS IGNORE); double time_end- MPI _Wtime(); double elapsed-time end-time start from printf("Process %d received token %d process %d ", rank, rank-1,elapsed); j else { for(int 1-0; i 250000000; i++) token[i]-1; MPI_Send(token, 1, MPI_INT, (rank 1)%numtasks, 0, MPI _COMMWORLD); if (rank-0) { MPI Recv(token, 1, MPI INT, numtasks-1, 0, MPI COMM WORLD, MPI STATUS IGNORE) double time2-MPI-Wtime(); double elapsed-time end-time start printf("Process 0 received token from process %d in %f seconds. End!", nuntasks-1, elapsed); MPI-Finalize();Explanation / Answer
#include<mpi.h>
#include<stlib.h>
#include<stdio.h>
#define MAX_RQNUM 1000
#define MAX_ALIGN 65536
#define MAX_MSG_SIZE(1<<22)
#define MYBUFFSIZE(MAX_MSG_SIZE +MAX_ALIGN)
#define LOOP_LARGE 20
#define WINDOW_SIZE_LARGE 64
#define SKIP_LARGE 2
#define LARGE_MSG_SIZE 8192
MPI_Request request[MAX_RQNUM];
MPI_Status reqstat[MAX_RQNUM];
char s_buf_original[MYBUFSIZE];
char r_buf_size_original[MYBUFSIZE];
#define HEADER "#" BENCHMARK " "
#define FIELD_WIDTH 20
#define FLOAT_PRECISION 2
int main( int argc, char *argv[])
{
/* Initilize the variables */
int id,numpc,i,j;
int size,al_size;
char *s_buf, *r_buf;
double a_start= 0.0, a_end=0.0, a=0.0;
int loop=100;
int win_size=64;
int skip=10;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &numpc);
MPI_Comm_rank(MPI_COMM_WORLD, &id);
if(numpc!=2)
{
if(id==0)
{
fprintf(stderr,"This test needs exactly two processes ");
}
MPI_Finalize();
return EXIT_FAILURE;
}
al__size=getpagesize();
assert(al_size<=MAX_ALIGN);
s_buf=(char *) (((unsigned long) s_buf_original+(al_size-1))/al_size*al_size);
r_buf=(char *) (((unsigned long) r_buf_original+(al_size-1))/al_size*al_size);
if(id==0)
{
fprintf(stdout, HEADER);
fprintf(stdout, "%-*s%*s ", 10, "#Size", FIELD_WIDTH, "Bandwidth (MB/s)");
fflush(STDOUT);
}
/* Bandwidth Test */
for(size=1;size<= MAX_MSG_SIZE;size*=2)
{
/* take the data */
for(i=0;i<size;i++)
{
s_buf[i]='a';
r_buf[i]='b';
}
if(size>LARGE_MSG_SIZE)
{
loop= LOOP_LARGE;
skip=SKIP_LARGE;
win_size=WINDOW_SIZE_LARGE;
}
if(id==0)
{
for(i=0;i<loop+skip;i++)
{
if(i==skip)
{
a_start= MPI_Wtime();
}
for(j=0;j<win_size;j++)
{
MPI_Isen(s_buf,size,MPI_CHAR,1,100,MPI_COMM_WORLD, request+j);
}
MPI_Waitall(win_size,request,reqstat);
MPI_Send(s_buf,4,MPI_CHAR,0,101,MPI_COMM_WORLD);
}
}
if(id==0)
{
double tmp=seze/1e6*loop*win_size;
fprintf(stdout,"%-*d%*.*f ", 10, size,FIELD_WIDTH,FLOAT_PRECISION,tmp/t);
fflush(stdout);
}
}
MPI_Finalize();
return EXIT_SUCCESS;
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.