2. Tree-reduction: Each thread will receive an segment of array of numbers, it will fork/spawn two new slaves each perform summing on different half of the received array segment, and the parent aggregate and return the total from its two slaves to its parent thread. Start with 7 nodes thread tree, when you are comfortable, you can extend it to a full thread tree . Test your code on different size of data What to submit: 1. Your python code 2. a screen (or video) capture of your code execution

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

/**
 Iluustration of RecursiveTask
*/
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveTask;

public class SumWithPool{
   
   public static void main(String[] args) throws InterruptedException, 
      ExecutionException {

      //get the number of avaialbe CPUs
      int nThreads = Runtime.getRuntime().availableProcessors();
      System.out.println("Available CPUs: " + nThreads);
      
     //create an array of data
     int n = 10; //initital data size
    
     if(args.length > 0) // use the user given data size
       n = Integer.parseInt(args[0]);
     int[] numbers = new int[n]; 

     for(int i = 0; i < numbers.length; i++) {
        numbers[i] = i;
     }


      ForkJoinPool forkJoinPool = new ForkJoinPool(nThreads);
      Sum s = new Sum(numbers,0,numbers.length);

      long startTime = System.currentTimeMillis(); //start timer
      Long result = forkJoinPool.invoke(s);
      long endTime = System.currentTimeMillis();
      long timeElapsed = endTime - startTime;
      System.out.println("Concurrent executing time: " + timeElapsed + "ms");

      System.out.println("The conccurent sum: " + result);

     //redo the task sequentially
      startTime = System.currentTimeMillis(); //start timer
      result = sum(numbers);
      endTime = System.currentTimeMillis();
      timeElapsed = endTime - startTime;
      System.out.println("\nSequential executing time: " + timeElapsed + "ms");
      System.out.println("The sequential sum: " + result);

   }  
 
   /** sequential sum */
   private static long sum(int[] arr){
    long sum = 0;
    for(int i = 0; i < arr.length; i++)
      sum += arr[i];
    return sum;
  }
  
}

 /** create a class that handle a task */
class Sum extends RecursiveTask<Long> {
  private int low;
  private int high;
  private int[] array; //only reference to the given data

  /** map the attribute to the given data */
  public Sum(int[] array, int low, int high) {
    this.array = array;
    this.low   = low;
    this.high  = high;
  }
 
  /** overriding tehe comput method */
  protected Long compute() {       
    if(high - low <= 10) { //do the sum if the block of data is managable
      long sum = 0;         
      for(int i = low; i < high; ++i) 
        sum += array[i];
      return sum;
    } else {            
      int mid = low + (high - low) / 2;
      Sum left  = new Sum(array, low, mid);
      Sum right = new Sum(array, mid, high);
      left.fork();
      long rightResult = right.compute();
      long leftResult  = left.join();
      return leftResult + rightResult;
    }
  }
}

Utilize Python Multiprocessing module to perform non-locking parallel array
summing on different paradigms.
1. One master thread aggregating and sum the result of n slave-threads that each
process sums a different range of values in a given array of 1000 random integers.
2. Tree-reduction: Each thread will receive an segment of array of numbers, it will
fork/spawn two new slaves each perform summing on different half of the received
array segment, and the parent aggregate and return the total from its two slaves to its
parent thread. Start with 7 nodes thread tree, when you are comfortable, you can
extend it to a full thread tree.
Test your code on different size of data
What to submit:
1. Your python code
2. a screen (or video) capture of your code execution
Transcribed Image Text:Utilize Python Multiprocessing module to perform non-locking parallel array summing on different paradigms. 1. One master thread aggregating and sum the result of n slave-threads that each process sums a different range of values in a given array of 1000 random integers. 2. Tree-reduction: Each thread will receive an segment of array of numbers, it will fork/spawn two new slaves each perform summing on different half of the received array segment, and the parent aggregate and return the total from its two slaves to its parent thread. Start with 7 nodes thread tree, when you are comfortable, you can extend it to a full thread tree. Test your code on different size of data What to submit: 1. Your python code 2. a screen (or video) capture of your code execution
Expert Solution
trending now

Trending now

This is a popular solution!

steps

Step by step

Solved in 5 steps with 6 images

Blurred answer
Knowledge Booster
Avoiding deadlock
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