Sommaire

Solutions des exercices

1. Exercice 1.3.1 : Paralléliser la recherche exhaustive de collisions

Une solution est proposée dans le dossier « examples/chap06/collisions01mt », et des tests unitaires dans la classe ExhaustiveColliderMTTest dans le dossier « examples/chap06/collisions » des packages de test. La classe ExhaustiveColliderMT implante l’interface Collider définie dans le dossier « examples/chap06/collisions ». Elle contient une liste de boîtes, boxes, à utiliser pour la recherche de collisions.

Pour paralléliser la recherche, la liste des boîtes englobantes est découpée en plusieurs morceaux, chaque morceau étant traité par un thread :

public List<AABB> collides(AABB aabb) {

La variable chunkSize définit la taille d’un morceau de la liste. Elle est divisée par 16 pour obtenir un nombre un peu plus grand que le nombre de threads sur les machines les plus puissantes :

   int chunkSize = boxes.size() / 16;

Cette valeur de division ne signifie pas que 16 threads sont utilisés : cela dépend du pool de threads utilisé.

La variable chunkIndex contient l’indice de la première boîte pour le prochain morceau :

   int chunkIndex = 0;

Une liste de futurs est définie pour suivre le résultat des tâches parallèles qui sont soumises :

   ArrayList<Future<List<AABB>>> ...