Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Ant et machine multiprocesseur: optimisation

6 réponses
Avatar
Yannick Patois
Bonjour,

Avec un Makefile, on peut utiliser l'option "-j<n>" pour lancer <n>
taches en parallèle afin d'accelerer la compilation sur une machine
multiprocesseur en tirant partit de toutes les ressources disponibles.
Existe-t'il un équivalent pour ant ? Je pense que c'est inutile car ant
est une application java qui saura nativement se multithreader pour
faire un usage optimiser de l'environement, mais je n'en suis pas sur.

Merci pour toute info sur ce sujet.

Yannick

6 réponses

Avatar
Emmanuel Bourg
Ant dispose d'une tache <parallel> pour exécuter une partie du
traitement dans un thread à part, ça ne garanti pas qu'un processeur
sera affecté à chaque branche d'exécution, mais au moins l'occasion est
donnée à la JVM de faire ce type d'optimisation.

http://ant.apache.org/manual/CoreTasks/parallel.html



Yannick Patois wrote:

Bonjour,

Avec un Makefile, on peut utiliser l'option "-j<n>" pour lancer <n>
taches en parallèle afin d'accelerer la compilation sur une machine
multiprocesseur en tirant partit de toutes les ressources disponibles.
Existe-t'il un équivalent pour ant ? Je pense que c'est inutile car a nt
est une application java qui saura nativement se multithreader pour
faire un usage optimiser de l'environement, mais je n'en suis pas sur.

Merci pour toute info sur ce sujet.

Yannick



Avatar
Yannick Patois
Emmanuel Bourg wrote:
Ant dispose d'une tache <parallel> pour exécuter une partie du
traitement dans un thread à part, ça ne garanti pas qu'un processeur
sera affecté à chaque branche d'exécution, mais au moins l'occasion est
donnée à la JVM de faire ce type d'optimisation.
http://ant.apache.org/manual/CoreTasks/parallel.html


Merci, mais:

- C'est à moi de m'occuper de savoir si les tâches vont collisionner ou
pas ? (make s'en occupe tout seul).
- Je dois modifier le build.xml (en l'occurence c'est pas les miens et
je ne veux pas y toucher) ? (-j est une option sur la ligne de commande
à l'invocation: je ne modifie pas les makefiles).

Réellement rien de mieux à proposer ?

OK, on fera avec...

Yannick

Avatar
Eric Delcamp
Non, car Make souffre ici (avec le parametre -j n) d'un tres grave défaut.
En effet, il faut que tu declare les dependances entre les taches a
effectuer pour eviter quelles soient executées en parallele. Je m'explique :

"all: tache1 tache2 tache3"
Avec -j 2, l'ordre peut etre tache1 et tache3, puis tache2. Tres embettant
quand tu as des dependances dans tache3 qui sont crées dans tache2. Make a
des mecanismes assez contraignant pour declarer la dependance des objets
entre eux et l'ordre preferentiel d'execution. Make ne s'en occupe pas tout
seul, mais disons que sur une compilation "simple", c'est a dire avec 1 seul
niveau de dependance, ca passe inapercu (on créer tout les objets, puis on
link. Que main.o soit créer avant truc.o n'a pas d'importance).

Ant a le meme soucis et les memes solutions. C'est a toi de savoir l'ordre
et de l'exprimer.

"Yannick Patois" a écrit dans le message de
news:bj2acn$ht6$
Emmanuel Bourg wrote:
Ant dispose d'une tache <parallel> pour exécuter une partie du
traitement dans un thread à part, ça ne garanti pas qu'un processeur
sera affecté à chaque branche d'exécution, mais au moins l'occasion est
donnée à la JVM de faire ce type d'optimisation.
http://ant.apache.org/manual/CoreTasks/parallel.html


Merci, mais:

- C'est à moi de m'occuper de savoir si les tâches vont collisionner ou
pas ? (make s'en occupe tout seul).
- Je dois modifier le build.xml (en l'occurence c'est pas les miens et
je ne veux pas y toucher) ? (-j est une option sur la ligne de commande
à l'invocation: je ne modifie pas les makefiles).

Réellement rien de mieux à proposer ?

OK, on fera avec...

Yannick





Avatar
Yannick Patois
Eric Delcamp wrote:
Non, car Make souffre ici (avec le parametre -j n) d'un tres grave défaut.
En effet, il faut que tu declare les dependances entre les taches a
effectuer pour eviter quelles soient executées en parallele. Je m'explique :

"all: tache1 tache2 tache3"
Avec -j 2, l'ordre peut etre tache1 et tache3, puis tache2. Tres embettant
quand tu as des dependances dans tache3 qui sont crées dans tache2.


Si la dépendance est explicite (ce qui doit etre le cas si le makefile
est bien fais) cela est automatiquement geré il me semble.

Ant a le meme soucis et les memes solutions. C'est a toi de savoir l'ordre
et de l'exprimer.


OK, et une fois cela fait, ant sait combien j'ai de processeurs sur ma
machine et ajuste son nombre de thread en fonction ? Ou je peux le
forcer à avoir un certain nombre de thread ?

Merci.

Yannick

Avatar
Emmanuel Bourg
Yannick Patois wrote:

OK, et une fois cela fait, ant sait combien j'ai de processeurs sur ma
machine et ajuste son nombre de thread en fonction ? Ou je peux le
forcer à avoir un certain nombre de thread ?


Il y aura autant de threads que de taches <parallel>, la VM se
débrouille ensuite pour associer les threads aux processeurs. Ant ne
prend pas de lui même l'initiative de parallèliser des traitements.

Avatar
Yannick Patois
Emmanuel Bourg wrote:
Yannick Patois wrote:
OK, et une fois cela fait, ant sait combien j'ai de processeurs sur ma
machine et ajuste son nombre de thread en fonction ? Ou je peux le
forcer à avoir un certain nombre de thread ?


Il y aura autant de threads que de taches <parallel>, la VM se
débrouille ensuite pour associer les threads aux processeurs. Ant ne
prend pas de lui même l'initiative de parallèliser des traitements.


Pas très futé: ca veut dire que je dois réécrire la commande de build
pour chaque architecture (par exemple si y'a 500 compilation
parallélisable à un endroit, sur une machine monoproc, je ne peux
surement pas le faire telquel sans écrouler la machine, alors que sur
une machine à 128 noeuds c'est peut-etre l'optimum...).

Bon, je m'appercois aussi qu'avec un makefile moyenement fait, ca bloque
méchemment aussi quand on parallelize, mais une fois écrit correctement,
ca scale bien, alors que pour ant, faudra peut etre attendre la
prochaine version...

Yannick