(Courriels de diversion: <exterminons@eucharisties-raffinee.com> <decrocheraient@plastifierai-oblige.com> <grapheme@redoraient-affacturer.com> <relogerez@frise-taira.com> <placa@bas-fonds-repu.com> <graisserez@rattacheriez-ciselent.com> <allegeraient@labouriez-accomplissent.com> <suivantes@refroidisse-catalyserait.com> <attardez@ostracismes-defectueuse.com> <reinstallee@curiste-approximation.com> )


Franck wrote:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> 
>>kernel wrote:
>>
>>>Le Tue, Aug 26, 2003 at 06:22:39PM +0200, Franck pianota:
>>>
>>>>J'ai un script (mon_script.sh) et une machine bi-proc avec
>>>>hyperthreading. Je souhaite que mon_script.sh utilise les 2 CPU en meme
>>>>temps pour faire son traitement, quelle est la commande qui va bien pour
>>>>faire cela ?
>>>
>>>Pour utiliser l'hyperthreading il faut faire du multithreading :)
>>>
>>>En clair : un tread/processus ne peut pas tourner sur 2 processeurs en
>>>meme temps. (sauf peut etre truc bizzare que je connais pas)
>>
>>Ben, tu l'as dit : il "suffit" de faire en sorte d'avoir deux ou plus
>>processus. Tu peux par exemple partager le travail en deux parties et
>>lancer une deuxième fois ton script en arrière-plan (avec '&').
>>
>>Ou bien, si c'est un traitement en boucle, tu mets l'intérieur de la
>>boucle dans un autre script et tu lances n scripts (n étant le nombre
>>fois où ta boucle doit boucler).
>>
>>En bref, tu te sers du fait que ton cher linux va savoir partager
>>équitablement le boulot sur les deux processeur, sachant qu'il est
>>incapable de partager un processus sur les deux processeurs.
> 
> 
> Ah oui ... ça je ne savais pas :(
> Mais je souhaite que mon script utilise toute la puissance CPU qui est dispo 
> sur la machine, à savoir les 2 CPU !!! ça se fait comment ça ???

Tu ne peux pas : un script == un processus, sauf si dans ce script tu 
lances d'autres programmes (== d'autres scripts == d'autres processus).

Petit cours sur les processus, en très très gros :

Un processus est caractérisé par un contexte. Pour simuler le 
multi-tâche sur un seul processeur, le système d'exploitation partage le 
temps pour tous les processus qui demandent de la ressource. En gros, si 
tu as deux programmes qui font quelque chose, ton temps est divisé par 
deux. À chaque cycle (pas des cycles processeurs), le système 
d'exploitation fait basculer le processeur dans le contexte du processus 
qu'il doit exécuter. C'est-à-dire qu'il lui dit où sont ses données, à 
quelle instruction il en est, etc. C'est donc assez simple.

Maintenant, si tu as deux processeurs, chacun travaille sur un contexte. 
Tu ne peux donc pas partager ton processus en deux car un programme est 
prévu pour que chaque instruction soit exécutée dans un certain ordre 
(sauf dans le cas de programmes multi-threads ou multi-processus. Note : 
un thread est un processus "léger"; considère-le comme un processus).

Je suppose donc que tu veux pouvoir faire en sorte que ton script se 
comporte comme un programme multi-processus : c'est-à-dire qu'il est 
capable de réaliser plusieurs tâches en parallèle sans qu'il n'y ait 
d'influence de l'une sur l'autre (en gros toujours). Le problème d'un 
script est que ce n'est pas réellement un processus. C'est une suite 
d'instructions pour un autre processus, l'interpréteur (dit shell ou 
ligne de commande, ...). Ce processus est capable d'en lancer d'autres, 
comme je te l'ai expliqué dans mon précédent mail, mais en aucun cas il 
peut décider de partager le programme en deux pour utiliser tes deux 
processeurs. Ce n'est pas de la puissance cumulée, il faut que le 
programmeurs l'ait décidé ainsi dès le départ.

J'espère que c'est plus clair, ou que je ne me suis pas complètement 
planté sur tes intentions ;-)

-- 
tharibo AT nekeme.net
http://www.nekeme.net : Promouvoir le libre ludique

"Le temps ne fait rien à l'affaire, quand on est con, on-est-con !"
-- Georges Brassens


--------------------------------------------------------------------
Les listes de diffusion occultes: <URL:http://www.CULTe.org/listes/>