#include #include #include #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

Complete the program 'Scatter-Reduce.c' to compute the product of all elements in a given array. 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#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 2 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.
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