Junior — Middle
Quelles méthodes peuvent être utilisées pour réaliser le calcul parallèle de la somme des éléments d'un tableau en utilisant ForkJoinPool?
sobes.tech IA
Réponse de l'IA
Pour effectuer un calcul parallèle de la somme des éléments d’un tableau à l’aide de ForkJoinPool, on peut implémenter une tâche récursive qui divise le tableau en parties et les somme en parallèle.
Idée principale :
- Si la taille du sous-tableau est petite, on calcule la somme directement.
- Sinon, on divise le sous-tableau en deux parties, on crée deux sous-tâches, on les exécute en parallèle et on combine les résultats.
Exemple en Java avec RecursiveTask<Integer> :
import java.util.concurrent.*;
public class SumTask extends RecursiveTask<Integer> {
private static final int THRESHOLD = 1000;
private int[] array;
private int start, end;
public SumTask(int[] array, int start, int end) {
this.array = array;
this.start = start;
this.end = end;
}
@Override
protected Integer compute() {
int length = end - start;
if (length <= THRESHOLD) {
int sum = 0;
for (int i = start; i < end; i++) {
sum += array[i];
}
return sum;
} else {
int mid = start + length / 2;
SumTask leftTask = new SumTask(array, start, mid);
SumTask rightTask = new SumTask(array, mid, end);
leftTask.fork(); // lance la tâche gauche de manière asynchrone
int rightResult = rightTask.compute(); // calcule la tâche droite dans le thread actuel
int leftResult = leftTask.join(); // attend le résultat de la tâche gauche
return leftResult + rightResult;
}
}
}
// Utilisation :
// ForkJoinPool pool = new ForkJoinPool();
// int[] data = ...;
// int totalSum = pool.invoke(new SumTask(data, 0, data.length));
Cette approche utilise efficacement le multithreading pour accélérer le calcul de la somme d’un grand tableau.