Markou moment

master
Caleb Fontenot 2024-02-19 09:40:59 +07:00
parent b96b2eeb8c
commit 8fb402c420
3 changed files with 98 additions and 3 deletions

1
.gitignore vendored

@ -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/

@ -16,8 +16,8 @@ public class MaxTask {
}
public static int max(int[] list) {
RecursiveTask<Integer> task = new MaxTask(list 0, list.length) {
//RecursiveTask<Integer> task = new MaxTask(list 0, list.length) {
return 0;
}
}
}

@ -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<Integer> task = new MaxTask(list, 0, list.length);
ForkJoinPool pool = new ForkJoinPool();
return pool.invoke( task );
}
private static class MaxTask
extends RecursiveTask<Integer>
{
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<Integer> left = new MaxTask(list, low, mid);
RecursiveTask<Integer> right = new MaxTask(list, mid+1, high);
right.fork();
left.fork();
return new Integer(Math.max( left.join().intValue(),
right.join().intValue())
);
}
}
}
}