Configuration de lancement des threads
Bonjour à tous,
Je connais le principe des threads mais ne les ayant jamais appliqués mes connaissances ne sont que théoriques.
J'ai admettons 10 unités (le 10 n'étant connu qu'à l'exécution, ça peut être 5 comme 15 ou 20) et des algorithmes permettent de travailler sur 2 unités en même temps pour les "mélanger" afin d'obtenir un résultat tendant vers un "idéal".
Actuellement les algorithmes tournent en séquentiels sur les unités :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
[1 - 2]
[1 - 3]
[1 - 4]
...
[1 - 10]
puis
[2 - 1]
[2 - 3]
[2 - 4]
...
[2 - 10]
puis à la fin
[10 - 1]
[10 - 2]
[10 - 3]
...
[10 - 9] |
L'ensemble est long à s'exécuter et en faisant un htop on voit qu'il n'y a qu'un processeur logique sur 8 qui est à 100%. Alors l'idée est d'exploiter les performances de la machine un peu mieux en admettant que l'on puisse exécuter les algorithmes [1 - 2], [3 - 4], [5 - 6], [7 - 8] ou [1 - 3], [2 - 4], [5 - 7], [6 - 8] etc. en même temps, mais avant d'exécuter par exemple l'algorithme sur [1 - 3] il faut attendre la fin des threads [1 - 2], [1 - 4], [1 - 5], [1 - 6], [1 - 7], [1 - 8], [2 - 1], [3 - 1], [4 - 1], [5 - 1], [6 - 1], [7 - 1], [8 - 1] car sinon ça va toucher à 1 et 3 qui sont en cours d'exécution. Je vous passe le nombre de combinaisons possibles, et encore plus celui des dépendances.
Le but est d'explorer tous les couples [X - Y] sans que jamais 2 threads travaillent sur X ou Y en même temps.
Donc je pense qu'il faut commencer générer tous les couples [X - Y] possibles, ça ne va pas être compliqué. Ensuite il faut générer les "incompatibilités d'exécution", donc que [X - Y] n'est pas exécutable en même temps que [X - Z], [Y - Z], [Z - X] et [Z - Y], et après je suis perdu pour savoir comment ça peut se traduire avec les threads, les mutex et surtout comment organiser l'ensemble pour que les "compatibles" se lancent en parallèles dont chacun va attendre la fin d'exécution des "non compatibles".
A mon avis il me faut faire une classe qui va fonctionner comme l'une de ces pieuvres que l'on voit dans Men In Black.
Première question : Est-ce que le raisonnement est bon, ou plutôt utopique ?
Deuxième question : Si ça n'est pas utopique, vous auriez une première approche technique en pseudo code ?
Merci à vous,
Bonne soirée et bon weekend,
Kin