Skip to content

Commit 1c089a3

Browse files
committed
Filled the sorter spawning.
1 parent 06ee856 commit 1c089a3

File tree

1 file changed

+67
-5
lines changed

1 file changed

+67
-5
lines changed

src/main/java/com/github/coderodde/util/ParallelRadixSort.java

Lines changed: 67 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.github.coderodde.util;
22

3+
import java.util.List;
34
import java.util.Random;
45

56
/**
@@ -369,8 +370,7 @@ private static void parallelRadixSortImpl(
369370
}
370371
}
371372

372-
Random random = new Random();
373-
nonEmptyBucketIndices.shuffle(random);
373+
nonEmptyBucketIndices.shuffle(new Random());
374374

375375
int f = 0;
376376
int j = 0;
@@ -401,13 +401,21 @@ private static void parallelRadixSortImpl(
401401
}
402402
}
403403

404-
ListOfBucketKeyLists listOfTaskArrays =
405-
new ListOfBucketKeyLists(spawnDegree);
404+
SorterThread[] sorterThreads = new SorterThread[spawnDegree - 1];
406405

407406
for (int i = 0; i != spawnDegree; i++) {
408407
BucketKeyList bucketKeyList = new BucketKeyList(BUCKETS);
408+
BucketKeyList bucketKeyList2 =
409+
listOfBucketKeyLists.getBucketKeyList(i);
410+
411+
int size = bucketKeyList2.size();
409412

413+
for (int idx = 0; idx != size; idx++) {
414+
int bucketKey = bucketKeyList2.getBucketKey(idx);
415+
SorterThread sorterThread = new SorterThread();
416+
}
410417

418+
listOfBucketKeyLists.addBucketKeyList(bucketKeyList);
411419
}
412420
}
413421

@@ -761,7 +769,61 @@ public void run() {
761769

762770
private static final class SorterThread extends Thread {
763771

764-
772+
private final List<SorterTask> sorterTasks;
773+
774+
SorterThread(List<SorterTask> sorterTasks) {
775+
this.sorterTasks = sorterTasks;
776+
}
777+
778+
@Override
779+
public void run() {
780+
for (SorterTask sorterTask : sorterTasks) {
781+
if (sorterTask.threads > 1) {
782+
parallelRadixSortImpl(sorterTask.source,
783+
sorterTask.target,
784+
sorterTask.sourceStartOffset,
785+
sorterTask.targetStartOffset,
786+
sorterTask.rangeLength,
787+
sorterTask.recursionDepth,
788+
sorterTask.threads);
789+
} else {
790+
radixSortImpl(sorterTask.source,
791+
sorterTask.target,
792+
sorterTask.sourceStartOffset,
793+
sorterTask.targetStartOffset,
794+
sorterTask.rangeLength,
795+
sorterTask.recursionDepth);
796+
}
797+
}
798+
}
799+
}
800+
801+
private static final class SorterTask{
802+
803+
final int[] source;
804+
final int[] target;
805+
final int sourceStartOffset;
806+
final int targetStartOffset;
807+
final int rangeLength;
808+
final int recursionDepth;
809+
final int threads;
810+
811+
SorterTask(int[] source,
812+
int[] target,
813+
int sourceStartOffset,
814+
int targetStartOffset,
815+
int rangeLength,
816+
int recursionDepth,
817+
int threads) {
818+
819+
this.source = source;
820+
this.target = target;
821+
this.sourceStartOffset = sourceStartOffset;
822+
this.targetStartOffset = targetStartOffset;
823+
this.rangeLength = rangeLength;
824+
this.recursionDepth = recursionDepth;
825+
this.threads = threads;
826+
}
765827
}
766828

767829
private static final class BucketKeyList {

0 commit comments

Comments
 (0)