From 8fb402c420e316ce77680d08949fa23937f1887f Mon Sep 17 00:00:00 2001 From: Caleb Fontenot Date: Mon, 19 Feb 2024 09:40:59 -0600 Subject: [PATCH] Markou moment --- .gitignore | 1 + .../edu/slcc/asdv/caleb/maxtask/MaxTask.java | 6 +- .../slcc/asdv/caleb/maxtask/ParallelMax.java | 94 +++++++++++++++++++ 3 files changed, 98 insertions(+), 3 deletions(-) create mode 100644 Semester 3/Assignments/MaxTask/src/main/java/edu/slcc/asdv/caleb/maxtask/ParallelMax.java diff --git a/.gitignore b/.gitignore index 5ec64fb..c7de9b3 100644 --- a/.gitignore +++ b/.gitignore @@ -90,3 +90,4 @@ /Semester 3/Assignments/Ajax6_getters_setters_CalebFontenot/target/ /Semester 3/Assignments/mavenproject1/target/ /Semester 3/Assignments/Templates01_CalebFontenot/target/ +/Semester 3/Assignments/MaxTask/target/ diff --git a/Semester 3/Assignments/MaxTask/src/main/java/edu/slcc/asdv/caleb/maxtask/MaxTask.java b/Semester 3/Assignments/MaxTask/src/main/java/edu/slcc/asdv/caleb/maxtask/MaxTask.java index 58d66f5..18cefb3 100644 --- a/Semester 3/Assignments/MaxTask/src/main/java/edu/slcc/asdv/caleb/maxtask/MaxTask.java +++ b/Semester 3/Assignments/MaxTask/src/main/java/edu/slcc/asdv/caleb/maxtask/MaxTask.java @@ -16,8 +16,8 @@ public class MaxTask { } public static int max(int[] list) { - RecursiveTask task = new MaxTask(list 0, list.length) { - + //RecursiveTask task = new MaxTask(list 0, list.length) { + return 0; } } -} + diff --git a/Semester 3/Assignments/MaxTask/src/main/java/edu/slcc/asdv/caleb/maxtask/ParallelMax.java b/Semester 3/Assignments/MaxTask/src/main/java/edu/slcc/asdv/caleb/maxtask/ParallelMax.java new file mode 100644 index 0000000..39b3027 --- /dev/null +++ b/Semester 3/Assignments/MaxTask/src/main/java/edu/slcc/asdv/caleb/maxtask/ParallelMax.java @@ -0,0 +1,94 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package edu.slcc.asdv.caleb.maxtask; + +/** + * + * @author caleb + */ +import java.util.concurrent.*; +public class ParallelMax +{ + public static void main(String[] args) + { + // Create a list + final int N = 200000000; + int[] list = new int[N]; + for (int i = 0; i < list.length; i++) + list[i] = i; + + + long startTime = System.currentTimeMillis(); + System.out.println("\nPaaraller\nThe maximal number is " + max(list)); + long endTime = System.currentTimeMillis(); + System.out.println("Time with " + (endTime - startTime) + + " milliseconds"); + System.out.println("Number of processors is " + + Runtime.getRuntime().availableProcessors()); + + System.out.println("-------------------------------"); + startTime = System.currentTimeMillis(); + int maximum = -1; + + for (int i = 0; i < list.length; i++) + if ( list[i] > maximum ) + maximum = list[i]; + endTime = System.currentTimeMillis(); + System.out.println("Sequential\nThe maximal number is " + maximum) ; + System.out.println("Time NOT in paraller " + (endTime - startTime) + + " milliseconds"); + } + public static int max( int[] list ) + { + RecursiveTask task = new MaxTask(list, 0, list.length); + ForkJoinPool pool = new ForkJoinPool(); + return pool.invoke( task ); + } + + private static class MaxTask + extends RecursiveTask + { + + private final static int THRESHOLD = 25000; + + + private int[] list; + private int low; + private int high; + + public MaxTask(int[] list, int low, int high) + { + this.list = list; + this.low = low; + this.high = high; + } + + + @Override + public Integer compute() + { + if ( high-low < THRESHOLD)//not parallel + { + int max = list[0]; + for (int i = low; i < high; i++) + if (list[i] > max) + max = list[i]; + return new Integer(max); + } + else + { + int mid = (low + high) / 2; + RecursiveTask left = new MaxTask(list, low, mid); + RecursiveTask right = new MaxTask(list, mid+1, high); + right.fork(); + left.fork(); + return new Integer(Math.max( left.join().intValue(), + right.join().intValue()) + ); + } + } + + } +}