#include    int *Random_Num_Generator(int Num_Elements); int Compute_Product(int *array, int num_elements); int main(int argc, char* argv[])  {        int comm_sz, my_rank; int i, Result;    int Num_Per_Proc = atoi(argv[1]);    // Seed the random number generator to get different results each time     srand(time(NULL));     MPI_Init(&argc, &argv);   MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);    MPI_Comm_size(MPI_COMM_WORLD, &comm_sz);    // Generate a random array of elements on process 0 int *Random_Nums = NULL; if (my_rank == 0) {  Random_Nums = Random_Num_Generator(Num_Per_Proc * comm_sz);  printf("The random numbers generated: \n");  for (i = 0; i < Num_Per_Proc * comm_sz; i++)   printf("%d; ", Random_Nums[i]);  printf("\n"); }    // Generate a buffer for holding a subset of the entire array  int *Sub_Random_Nums = (int *)malloc(sizeof(int) * Num_Per_Proc);    // Scatter the random integer numbers from process 0 to all processes  MPI_Scatter(Random_Nums, Num_Per_Proc, MPI_INT, Sub_Random_Nums, Num_Per_Proc, MPI_INT, 0, MPI_COMM_WORLD);    // Compute the product value of a subset array on each process int Sub_Product = Compute_Product(Sub_Random_Nums, Num_Per_Proc); // Reduce the total product value of all elements to process 0 MPI_Reduce(&Sub_Product,        , 1, MPI_INT,       , 0, MPI_COMM_WORLD); if (my_rank == 0)  printf("Total product of all elements is %d\n", Result);    // Clean up  if (my_rank == 0)    free(Random_Nums);     free(Sub_Random_Nums);       MPI_Finalize();    return 0; } // Create an array of random integer numbers ranging from 1 to 10  int *Random_Num_Generator(int Num_Elements) {  int *Rand_Nums = (int *)malloc(sizeof(int) * Num_Elements);  int i;  for (i = 0; i < Num_Elements; i++)   Rand_Nums[i] = (rand() % 10) + 1;  return Rand_Nums; } // Computes the product of an array of numbers  int Compute_Product(int *array, int num_elements) {  int product = 1;  int i;  for (i = 0; i < num_elements; i++)    product *= array[i];    return product; }

Database System Concepts
7th Edition
ISBN:9780078022159
Author:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Chapter1: Introduction
Section: Chapter Questions
Problem 1PE
icon
Related questions
Question


#include <mpi.h>

  
int *Random_Num_Generator(int Num_Elements);

int Compute_Product(int *array, int num_elements);

int main(int argc, char* argv[]) 

  
   int comm_sz, my_rank;
int i, Result;
   int Num_Per_Proc = atoi(argv[1]);

   // Seed the random number generator to get different results each time 
   srand(time(NULL)); 

   MPI_Init(&argc, &argv);  

MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);   
MPI_Comm_size(MPI_COMM_WORLD, &comm_sz);


   // Generate a random array of elements on process 0
int *Random_Nums = NULL;

if (my_rank == 0)
{
 Random_Nums = Random_Num_Generator(Num_Per_Proc * comm_sz);

 printf("The random numbers generated: \n");

 for (i = 0; i < Num_Per_Proc * comm_sz; i++)

  printf("%d; ", Random_Nums[i]);

 printf("\n");
}


   // Generate a buffer for holding a subset of the entire array 
int *Sub_Random_Nums = (int *)malloc(sizeof(int) * Num_Per_Proc);

   // Scatter the random integer numbers from process 0 to all processes 
MPI_Scatter(Random_Nums, Num_Per_Proc, MPI_INT, Sub_Random_Nums, Num_Per_Proc, MPI_INT, 0, MPI_COMM_WORLD);

   // Compute the product value of a subset array on each process
int Sub_Product = Compute_Product(Sub_Random_Nums, Num_Per_Proc);

// Reduce the total product value of all elements to process 0
MPI_Reduce(&Sub_Product,        , 1, MPI_INT,       , 0, MPI_COMM_WORLD);


if (my_rank == 0)

 printf("Total product of all elements is %d\n", Result);

   // Clean up 
if (my_rank == 0) 

  free(Random_Nums);
   
free(Sub_Random_Nums);
  
   MPI_Finalize(); 
 
return 0;

}


// Create an array of random integer numbers ranging from 1 to 10 
int *Random_Num_Generator(int Num_Elements)
{
 int *Rand_Nums = (int *)malloc(sizeof(int) * Num_Elements);
 int i;

 for (i = 0; i < Num_Elements; i++)
  Rand_Nums[i] = (rand() % 10) + 1;

 return Rand_Nums;
}

// Computes the product of an array of numbers 
int Compute_Product(int *array, int num_elements)
{
 int product = 1;
 int i;

 for (i = 0; i < num_elements; i++) 
  product *= array[i];
 
 return product;
}

Expert Solution
steps

Step by step

Solved in 3 steps with 1 images

Blurred answer
Knowledge Booster
Array
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Similar questions
  • SEE MORE QUESTIONS
Recommended textbooks for you
Database System Concepts
Database System Concepts
Computer Science
ISBN:
9780078022159
Author:
Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:
McGraw-Hill Education
Starting Out with Python (4th Edition)
Starting Out with Python (4th Edition)
Computer Science
ISBN:
9780134444321
Author:
Tony Gaddis
Publisher:
PEARSON
Digital Fundamentals (11th Edition)
Digital Fundamentals (11th Edition)
Computer Science
ISBN:
9780132737968
Author:
Thomas L. Floyd
Publisher:
PEARSON
C How to Program (8th Edition)
C How to Program (8th Edition)
Computer Science
ISBN:
9780133976892
Author:
Paul J. Deitel, Harvey Deitel
Publisher:
PEARSON
Database Systems: Design, Implementation, & Manag…
Database Systems: Design, Implementation, & Manag…
Computer Science
ISBN:
9781337627900
Author:
Carlos Coronel, Steven Morris
Publisher:
Cengage Learning
Programmable Logic Controllers
Programmable Logic Controllers
Computer Science
ISBN:
9780073373843
Author:
Frank D. Petruzella
Publisher:
McGraw-Hill Education