Il s'agit de la commande paexec qui peut être exécutée dans le fournisseur d'hébergement gratuit OnWorks en utilisant l'un de nos multiples postes de travail en ligne gratuits tels que Ubuntu Online, Fedora Online, l'émulateur en ligne Windows ou l'émulateur en ligne MAC OS
PROGRAMME:
Nom
paexec - exécuteur parallèle, distribue les tâches sur le réseau ou les processeurs
SYNOPSIS
paexec [choix]
paexec -C [choix] commander [arguments...]
DESCRIPTION
Supposons que vous ayez une longue liste de tâches AUTONOMES à effectuer, par exemple, vous
voulez convertir des milliers de fichiers audio .wav au format .ogg. Supposons également que plusieurs
Des processeurs sont disponibles, par exemple un système SMP multi-CPU (ou un processeur multi-noyau moderne) ou un cluster
composé d'ordinateurs individuels connectés au réseau ou à Internet. paexec Vous pouvez
faire ce travail efficacement, c'est-à-dire paexec répartit efficacement les différentes tâches
différents processeurs (ou ordinateurs), reçoit les résultats du traitement de leur part et
envoie ces résultats à stdout.
Plusieurs notions sont à définir : tâche, commander, transport, nœud.
Tâches sont lus par paexec de stdin et sont représentés comme une ligne de texte, c'est-à-dire une
ligne d'entrée - une tâche.
nœud identifiant - ordinateur distant ou identifiant CPU, par exemple numéro ordinal CPU ou
le nom DNS de l'ordinateur comme node12.cluster.company.com.
Command - programme de l'utilisateur qui lit la tâche d'une ligne à partir de stdin et envoie le résultat multiligne à
stdout où une ligne vide signifie JOB_IS_DONE__I_AM_READY_FOR_THE_NEXT_ONE. Après l'envoi
la ligne vide vers stdout, stdout DOIT ÊTRE RINÇAGE. Rappelez-vous que la ligne vide NE DOIT PAS
apparaît dans les lignes de résultat générales. Autrement paexec peut se bloquer en raison d'un blocage.
Transport - programme spécial qui aide à courir commander sur le nœud. Il faut le nœud
identifiant comme premier argument et commander avec ses arguments comme le reste. Par exemple,
est '/usr/bin/ssh'. Les deux transport et commander peuvent être spécifiés avec leurs arguments, c'est-à-dire
'/usr/bin/ssh -x' est autorisé comme transport .
Algorithme. Commandes sont exécutés sur chaque nœud avec l'aide de transport programme. Puis, tâches sommes-nous
lire à partir de stdin ligne par ligne (une tâche par ligne) et sont envoyés à free nœud (exactement un
tâche par nœud à la fois). En même temps, les lignes de résultat sont lues à partir de de commande sortie standard et
sont sortis vers de paexec sortie standard. Lorsqu'une ligne vide est obtenue à partir du nœud (ça signifie
qui nœud terminé son travail), il est marqué comme libre et devient prêt pour le prochain travail. Ces
les étapes se répètent jusqu'à ce que la fin de stdin soit atteinte et que tous nœuds terminer leur travail.
Plus formellement (pour mieux comprendre le fonctionnement de paexec) :
run_command_on_each_node
mark_all_nodes_as_free
tandis que not(end_of_stdin) ou not(all_nodes_are_free)
tandis que there_is_free_node/i et non(end_of_stdin)
tâche = read_task_from_stdin
send_task_to_node (tâche, je)
marquer_node_as_busy(i)
fin
tandis que result_line_from_node_is_available/i
résultat = read_result_line_from_node(i)
send_line_to_stdout(résultat)
if is_empty_line (résultat)
# fin de travail
marquer_node_as_free(i)
fin
fin
fin
close_command_on_each_node
Notez que commander qui fait votre tâche réelle est exécutée une fois (par nœud), elle n'est pas redémarrée
pour chaque tâche.
Notez également que la sortie contient des lignes de résultat (obtenues à partir de différents nœuds) dans le mélange
ordre. C'est-à-dire que la première ligne de la sortie peut contenir une ligne de résultat obtenue à partir du
premier nœud, la deuxième ligne de sortie - à partir de la deuxième nœud, mais la troisième ligne de sortie
peut contenir la ligne de résultat du premier nœud de nouveau. Il n'est pas non plus garanti que le
la première ligne de sortie sera du premier nœud ou dès le premier tâche. Toutes les lignes de résultat
sont émis dès qu'ils sont lus par paexec, c'est-à-dire dès qu'elles sont prêtes à être sorties.
paexec fonctionne de cette façon pour des raisons d'efficacité. Vous pouvez jouer avec -l, -r et -p Options
pour voir ce qui se passe.
OPTIONS
-h Afficher les informations d'aide.
-V Afficher les informations de version.
-c commander
Commande avec ses arguments.
-C La commande avec ses arguments est spécifiée après les options.
-t transport
Commande de transport
-n + numéro
Un certain nombre de commandes à exécuter en parallèle.
-n nœuds
Liste de nœuds séparés par un espace. Le premier caractère doit être
alphanumérique, '_' ou '/'. Tous les autres caractères sont réservés pour de futures extensions.
-n :nom de fichier
Nom de fichier contenant la liste des nœuds, un par ligne.
-x Exécuter la commande spécifiée par -c pour chaque tâche. Sa sortie standard est transmise à paexec. Si les deux
"-x" et "-g" sont spécifiés, la tâche est considérée comme ayant échoué si l'état de sortie de la commande est
non nul.
-X Implique -x et ignorer la sortie standard de la calculatrice.
-r Incluez l'identifiant de nœud ou le numéro de nœud (basé sur 0) à la sortie, c'est-à-dire l'identifiant/le numéro de
nœud qui produit cette ligne de sortie particulière. Cet identifiant ou numéro apparaît
avant le numéro de ligne si -l est également appliqué. Le caractère espace est utilisé comme séparateur.
-l Inclure un numéro de tâche basé sur 0 (numéro de ligne d'entrée) à la sortie, c'est-à-dire le numéro de ligne
à partir de laquelle cette ligne de sortie particulière a été produite. Il apparaît avant pid si -p is
également appliqué. Le caractère espace est utilisé comme séparateur.
-p Inclure le pid du sous-processus de paexec qui communique avec nœud+commande à la
sortir. Pid ajoute la ligne de résultat réelle au début. Le caractère espace est utilisé comme séparateur.
-e Lorsque le marqueur de fin de tâche est obtenu à partir du nœud, une ligne vide est imprimée sur stdout.
Cette option peut être utile avec -l et/ou -r.
-E Impliquer -e et rince stdout.
-d Activer un mode de débogage (à des fins de débogage uniquement)
-i Copiez les lignes d'entrée (c'est-à-dire les tâches) sur stdout.
-I Impliquer -i et rince stdout.
-s|-g L'orgraphe des tâches (ensemble partiellement ordonné) est lu à partir de stdin.
Au lieu de tâches autonomes, le graphique des tâches est lu à partir de stdin. Dans ce mode
chaque tâche peut ECHOUER ou REUSSIR. Comme toujours une ligne vide sortie par commander
veux dire fin of tâche. La ligne qui précède indique un ÉTAT DE SORTIE de la tâche. Le mot
"échec" signifie échec, "succès" - succès et "fatal" signifie que la tâche en cours
est réaffecté à un autre nœud (et redémarré, bien sûr) (voir l'option -z). Voir
exemples/1_div_x/cmd pour l'exemple. Une ligne d'entrée (le stdin de paexec) doit contenir
soit une seule tâche sans espaces à l'intérieur ou deux tâches séparées par un seul espace
caractère, par exemple tâche1 tâche2. tache 1 la ligne task2 signifie que task1 doit être fait
avant la tâche2 et c'est obligatoire, c'est-à-dire si la tâche1 échouer toutes les tâches dépendantes
(y compris la tâche2) échouent également de manière récursive. Les tâches ayant des dépendances sont
démarré uniquement après que toutes les dépendances sont réussies. Quand une tâche réussit paexec
produit le mot "success" juste avant le marqueur end_of_task (voir -e ou -E), sinon
Le mot « failure » est affiché, suivi d'une liste des tâches qui ont échoué à cause de cela.
échantillons:
tâches (fichier exemples/make_package/tasks)
textproc/dictem
devel/autoconf wip/libmaa
devel/gmake wip/libmaa
wip/libmaa wip/dict-serveur
wip/libmaa wip/dict-client
devel/m4 wip/dict-serveur
devel/byacc wip/dict-serveur
devel/byacc wip/dict-client
devel/flex wip/dict-serveur
devel/flex wip/dict-client
développer/glib2
développer/libjudy
commande (exemples/make_package/cmd__flex)
#!/usr/bin/awk -f
{
imprimer 0 $
if ($0 == "devel/flex")
imprimer "échec"
d'autre
imprimer "succès"
print "" # marqueur de fin de tâche
fflush()
}
sortie de "paexec -s -l -c cmd__flex -n +10
< tâches"
3 niveaux/autoconf
Succès 3
4 niveaux/gmake
Succès 4
7 niveaux/m4
Succès 7
8 niveaux/byacc
Succès 8
9 niveaux/flex
9 échec
9 devel/flex wip/dict-serveur wip/dict-client
10 développement/glib2
Succès 10
11 développement/libjudy
Succès 11
1 procédure de texte/dictem
Succès 1
2 wip/libmaa
Succès 2
-z Si appliqué, lisez/écrire(2) les opérations depuis/vers les nœuds ne deviennent pas critiques. Au cas où
paexec a perdu la connexion au nœud, il réaffectera la tâche échouée à un autre nœud
et, si -s appliqué, affichera la chaîne "fatal" vers stdout ("success" + "failure" +
"fatal"). Cela rend paexec résistant aux erreurs d'E/S, vous pouvez donc créer
clusters paexec même sur un réseau composé d'hôtes peu fiables (Internet ?). Échoué
Les hôtes sont marqués comme tels et ne seront pas utilisés pendant l'exécution actuelle de paexec.
-Z temps mort
Quand -z appliqué, si un commander échoue, le nœud approprié est marqué comme cassé et est
exclus de la répartition des tâches suivante. Mais si -Z appliqué, chaque temps mort
secondes, une tentative de réexécution d'une commande sur un nœud défaillant est effectuée. -Z implique -z
L'option permet d'organiser des clusters sur des réseaux/matériels peu fiables.
-w If -Z option a été appliquée, paexec se termine avec une erreur si TOUTES les nœuds ont échoué. Avec -w it
ne se terminera pas et attendra la restauration des nœuds.
-m s=succès
-m f=échec
-m F=fatal
-m t=EOT
-m d=délimiteur
Définir une chaîne alternative pour 'succès', 'échec', 'fatal', '' (fin de tâche) et ' '
(caractère délimiteur de tâche). Une chaîne vide pour 'fatal' signifie qu'elle ne sera pas affichée
vers stdout en cas d'erreur fatale.
-W num
Lorsque plusieurs machines ou processeurs sont utilisés pour le traitement des tâches, il est logique de
commencer les tâches "plus lourdes" dès que possible afin de minimiser le calcul total
temps. Si -W est spécifié, un poids spécial est attribué à chaque tâche qui est utilisée
pour réorganiser les tâches. Si num est 0, les poids eux-mêmes sont utilisés pour réorganiser
Tâches. Plus le poids est important, plus la tâche est prioritaire. Si num a 1 ans, le
le poids total de la tâche est la somme de son propre poids (spécifié en entrée) et des poids de
toutes les tâches qui en dépendent directement ou indirectement. Si num est 2, le poids total de
la tâche est une valeur maximale du propre poids de la tâche et des poids de toutes les tâches en fonction de
directement ou indirectement. Les poids sont spécifiés à l'aide du mot-clé « poids : ».
Si le poids n'est pas spécifié, la valeur par défaut est 1. L'exemple suivant est
graphique d'entrée des tâches avec des poids.
poids: gtk2 30
poids: glib2 20
gtk2 firefox
poids: firefox 200
glib2 gtk2
poids: qt4 200
poids: kcachegrind 2
qt4 kcachegrind
qt4 djview4
tiff djview4
png djview4
poids: twm 1
poids: gqview 4
-y Si elle est appliquée, la chaîne magique est utilisée comme marqueur de fin de tâche au lieu d'une ligne vide.
Il est peu probable que cette ligne apparaisse sur la sortie de la calculatrice. Cette option a
priorité plus élevée que la variable d'environnement PAEXEC_EOT.
EXEMPLES
1.
paexec -t '/usr/bin/ssh -x' -n 'hôte1 hôte2 hôte3'
-le -g -c calcule-moi <tâches.txt |
paexec_reorder -Mf -Sl
2.
ls -1 *.wav | paexec -x -n +4 -c 'oggenc -Q'
3.
ls -1 *.wav | paexec -xCil -n+4 flac -f --silent
4.
{ uname -s; uname -r ; uname -m; } |
paexec -x -lp -n+2 -c bannière |
paexec_reorder -l
Pour plus d'exemples, consultez paexec.pdf et le sous-répertoire examples/ dans la distribution.
NOTES
Sélectionner(2) appel système et non bloquant lire(2) sont utilisés pour lire les lignes de résultat de nœuds.
Blocage en ce moment écrire(2) est utilisé pour envoyer tâche à la nœud. Cela peut ralentir un
tout le traitement si tâches sont trop gros. Il est donc recommandé d'utiliser des tâches, Pour
exemple, nom de fichier ou URI (plusieurs dizaines d'octets) au lieu de plusieurs mégaoctets
teneur. Bien que cela puisse être corrigé à l'avenir.
L'archive paexec originale contient un certain nombre d'échantillons à utiliser dans presentation/paexec.pdf
déposer. Après l'installation, vous pouvez trouver ce fichier sous share/doc/paexec/paexec.pdf ou
.
ENVIRONNEMENT
PAEXEC_BUFSIZE
Remplace le temps de compilation initiale taille des tampons internes utilisés pour stocker les tâches et
les lignes de résultat. Versions de paexec avant 0.9.0 utilisait cette valeur comme maximales
taille du tampon. Désormais, les tampons internes sont redimensionnés automatiquement. En cas de doute, ne définissez pas
Variable PAEXEC_BUFSIZE. Voir la valeur par défaut dans Makefile.
PAEXEC_ENV
Une liste de variables passées à la calculatrice.
PAEXEC_EOT
Cette variable définit le marqueur de fin de tâche qui est une ligne vide par défaut. Aussi,
grâce à cette variable, un marqueur de fin de tâche est transmis à toutes les calculatrices.
PAEXEC_NODES
Sauf option -n a été appliqué, cette variable spécifie les nœuds.
PAEXEC_TRANSPORT
Sauf option -t a été appliqué, cette variable spécifie le transport.
Utiliser paexec en ligne à l'aide des services onworks.net