Deutsch   English   Français   Italiano  
<6Q_TL2QwEpJ2mus2K8UMNZ2IAF8@jntp>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!news.nobody.at!news.mb-net.net!open-news-network.org!news.gegeweb.eu!gegeweb.org!pasdenom.info!from-devjntp
Message-ID: <6Q_TL2QwEpJ2mus2K8UMNZ2IAF8@jntp>
JNTP-Route: news2.nemoweb.net
JNTP-DataType: Article
Subject: Re: Threads vs Process
References: <v71gat$aj8p$1@dont-email.me> <v9fojn$2n22o$1@paganini.bofh.team> <v9fqr5$12bq$1@news.usenet.ovh>
 <v9fv26$2nd94$1@paganini.bofh.team> <QHmHcgZ1wpB0WQGUWir7UJkc0BU@jntp> <v9inhr$30tgg$1@paganini.bofh.team>
 <LPj-LG68xkkv2S1Cv5zPLRuBONE@jntp> <3kFmA5w1Ga-hCPXht5gTT6S-Amw@jntp> <6sERMUni4sfwXdzWb8aTSFjGgPs@jntp>
 <v9kvud$39jll$1@paganini.bofh.team>
Newsgroups: fr.comp.sys.atari
JNTP-HashClient: IXGQ0IoZhEILOMlj2fb4QeGVoWE
JNTP-ThreadID: v71gat$aj8p$1@dont-email.me
JNTP-Uri: http://news2.nemoweb.net/?DataID=6Q_TL2QwEpJ2mus2K8UMNZ2IAF8@jntp
User-Agent: Nemo/0.999a
JNTP-OriginServer: news2.nemoweb.net
Date: Thu, 15 Aug 24 13:53:04 +0000
Organization: Nemoweb
JNTP-Browser: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:109.0) Gecko/20100101 Firefox/115.0
Injection-Info: news2.nemoweb.net; posting-host="516ee13c1e79fa65aedf115a32aee346f9289ca9"; logging-data="2024-08-15T13:53:04Z/8987734"; posting-account="44@news2.nemoweb.net"; mail-complaints-to="julien.arlandis@gmail.com"
JNTP-ProtocolVersion: 0.21.1
JNTP-Server: PhpNemoServer/0.94.5
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
X-JNTP-JsonNewsGateway: 0.96
From: pehache <pehache.7@gmail.com>
Bytes: 4369
Lines: 66

Le 15/08/2024 à 15:30, Francois LE COAT a écrit :
>>>
>>> Tout dépend le type de calcul, cette méthode rustique peut dans 
>>> certains cas convenir. Mais c'est bien ce qu'elle est : rustique.
>> 
>> Oui rustique
> 
> Mais ça marche partout, 

Une charrue tirée par un cheval ça marche aussi. C'est juste plus facile 
avec un tracteur.

> et c'est totalement portable d'un Unix à un
> autre, puisque j'utilise le même code sur freeMiNT, Solaris, macOS et
> GNU/Linux. 

Tous les compilateurs C/C++ modernes implémentent OpenMP, c'est 
utilisable absolument partout.

> Il n'y a pas de bibliothèque dédiée à utiliser, 

Les bibliothèques dédiées ont pour but d'éviter que chacun ait à 
inventer l'eau tiède dans son coin.

> et c'est
> le système qui s'occupe de répartir la charge de calcul, sur le ou les
> processeurs présents sur la machine.

Pareil pour les threads, c'est le système qui les distribue sur les 
différents coeurs. Avec même quelques avantages, par exemple OpenMP a 
des directives permettant de locker chaque thread sur un coeur donné, ce 
qui améliore la gestion des caches. Quand tu lances des process séparés 
"à la main" tu n'as aucun moyen de t'assurer que chaque process restera 
sur le même coeur pendant toute son exécution.

> C'est un fondement de Unix avec
> le multitâche préhemptif, qui permet de gérer un nombre arbitraire de
> processeurs.

Merci Captain Obvious.

> On atteint jamais strictement la charge maximale de ou des
> processeurs, mais la commande système `time` permet de vérifier que l'on
> approche les 100% de charge avec un CPU, les 200% avec deux etc. Je
> ne suis pas sûr que l'on aie une méthode aussi portable et universelle
> en utilisant des threads.

Tu n'es pas sûr ? En fait tu n'en sais rien du tout parce que tu ne 
connais pas le sujet.

Autre avantage d'OpenMP : on peut répartir dynamiquement la charge de 
travail entre les différents threads, et très simplement. Ca assure que 
l'occupation des coeurs reste optimale même quand on ne peut pas 
découper les calculs à effectuer en parts vraiment égales à priori. Et 
c'est beaucoup plus compliqué à faire en lançant des process 
complètement séparés.

> C'est très simple à mettre en oeuvre,
> indépendamment du nombre de processeurs. Pourquoi se compliquer la vie,
> à écrire un code explicitement parallèle ? C'est complètement intuitif !

OpenMP est d'une simplicité biblique, justement. Et comme ce sont des 
directives et non pas du code en tant que tel, le même code peut être 
compilé avec ou sans OpenMP et donc tourner en parallèle ou en 
séquentiel, sans qu'il y ait rien à modifier. Quand on compile sans 
OpenMP les directives sont simplement ignorées.