|
@@ -9,15 +9,16 @@ int main(int argc, char ** argv)
|
|
|
{
|
|
|
// init MPI
|
|
|
MPI_Init(&argc, &argv);
|
|
|
- int nbNodes;
|
|
|
- MPI_Comm_size(MPI_COMM_WORLD, &nbNodes);
|
|
|
- int iNode;
|
|
|
- MPI_Comm_rank(MPI_COMM_WORLD, &iNode);
|
|
|
+ int worldSize;
|
|
|
+ MPI_Comm_size(MPI_COMM_WORLD, &worldSize);
|
|
|
+ int worldRank;
|
|
|
+ MPI_Comm_rank(MPI_COMM_WORLD, &worldRank);
|
|
|
+ double t0 = MPI_Wtime();
|
|
|
|
|
|
// read image (master node)
|
|
|
image_t data0;
|
|
|
int width, height;
|
|
|
- if (iNode == 0)
|
|
|
+ if (worldRank == 0)
|
|
|
{
|
|
|
std::string readError = readPgm("backloop.pgm", width, height, data0);
|
|
|
if (readError != "")
|
|
@@ -31,14 +32,14 @@ int main(int argc, char ** argv)
|
|
|
MPI_Bcast(&width, 1, MPI_INT, 0, MPI_COMM_WORLD);
|
|
|
MPI_Bcast(&height, 1, MPI_INT, 0, MPI_COMM_WORLD);
|
|
|
|
|
|
- int heightN = (height+nbNodes-1) / nbNodes;
|
|
|
+ int heightN = (height+worldSize-1) / worldSize;
|
|
|
int sizeN = heightN * width;
|
|
|
- int height2 = heightN * nbNodes;
|
|
|
+ int height2 = heightN * worldSize;
|
|
|
int size2 = height2 * width;
|
|
|
|
|
|
- // ensure height of data is a multiple of nbNodes (master node)
|
|
|
+ // ensure height of data is a multiple of worldSize (master node)
|
|
|
image_t data1(size2);
|
|
|
- if (iNode == 0)
|
|
|
+ if (worldRank == 0)
|
|
|
{
|
|
|
std::copy_n(data0.begin(), width*height, data1.begin());
|
|
|
}
|
|
@@ -59,10 +60,11 @@ int main(int argc, char ** argv)
|
|
|
0, MPI_COMM_WORLD);
|
|
|
|
|
|
// write output image (master node)
|
|
|
- if (iNode == 0)
|
|
|
+ if (worldRank == 0)
|
|
|
{
|
|
|
writePgm("output_1.pgm", width, height, data2);
|
|
|
- std::cout << "walltime = " << MPI_Wtime() << std::endl;
|
|
|
+ double t1 = MPI_Wtime();
|
|
|
+ std::cout << "walltime = " << t1 - t0 << std::endl;
|
|
|
}
|
|
|
|
|
|
MPI_Finalize();
|