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.