Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1188 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  multi-tread vitesse

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

multi-tread vitesse

n°1845952
weblook$$
Posté le 02-02-2009 à 08:55:54  profilanswer
 

Hi,
 
Conceptuellement, j'ai du mal à voir pourquoi  la programmation multi-thread permet d'augmenter la vitesse d'exécution d'un programme ?
 
Etant donné que le code de chaque thread est exécuté séquentiellement et non parallèlement où se situe le gain en vitesse ??
 
C'est valable uniquement pour les processeurs possédant 2 unités d'exécutions ?
 
Merci !

mood
Publicité
Posté le 02-02-2009 à 08:55:54  profilanswer
 

n°1845959
casimimir
Posté le 02-02-2009 à 09:16:48  profilanswer
 


Thread1 seul: |thread1 bosse|thread1 I/O|cpu idle|thread1 rebosse|............
 
multithread:   |thread1 bosse|thread1 I/O|thread2 bosse|thread1 rebosse|

n°1845960
flo850
moi je
Posté le 02-02-2009 à 09:20:02  profilanswer
 

c'est effectivement surtout valable pour les processeurs multi core , et pour les machine multi processeurs, ce qui représente une bonne partie des machien vendues ces deux dernières années


Message édité par flo850 le 02-02-2009 à 09:20:23

---------------

n°1845965
weblook$$
Posté le 02-02-2009 à 09:34:58  profilanswer
 

Et pratiquement, si on possède une machine de type Intel Core 2 Duo, et que l'on se sert d'une librairies tel que Boost pour gérer les threads, l'utilisation des 2 cores est automatiques ?

n°1845974
Joel F
Real men use unique_ptr
Posté le 02-02-2009 à 10:13:49  profilanswer
 

rien n'ets automatique avec les threads. Y a pas de magie.
Boost::thread permet juste d'expliciter simplement les sections de ton programme qui utilsieront des threads.

n°1845996
weblook$$
Posté le 02-02-2009 à 11:05:27  profilanswer
 

comment faire alors? Il faut utiliser l'asm ou bien ??

n°1846005
Joel F
Real men use unique_ptr
Posté le 02-02-2009 à 11:14:51  profilanswer
 

v_v
non , tu structure ton code de façon à profiter du parallélisme puis tu démarre des fonctions concurrentes avec des threads

n°1846011
weblook$$
Posté le 02-02-2009 à 11:25:56  profilanswer
 

c'est à dire il faut le structurer de quelle manière ?

n°1846013
Un Program​meur
Posté le 02-02-2009 à 11:35:10  profilanswer
 

De maniere a pouvoir faire plusieurs choses en meme temps si possible.

n°1846014
weblook$$
Posté le 02-02-2009 à 11:36:53  profilanswer
 

mais quand on utilise des threads, notre programme est toujours conçu de manière à pouvoir faire plusieurs choses en meme temps non ?

mood
Publicité
Posté le 02-02-2009 à 11:36:53  profilanswer
 

n°1846074
Joel F
Real men use unique_ptr
Posté le 02-02-2009 à 15:04:07  profilanswer
 

oui mais c'est toi qui spécifie ce découpage.
Rancarde toi sur le parallélisme en général, la je pense que tu manques de base.

n°1846075
weblook$$
Posté le 02-02-2009 à 15:04:23  profilanswer
 

ça marche thx

n°1846085
masklinn
í dag viðrar vel til loftárása
Posté le 02-02-2009 à 15:34:54  profilanswer
 

weblook$$ a écrit :

Hi,

 

Conceptuellement, j'ai du mal à voir pourquoi  la programmation multi-thread permet d'augmenter la vitesse d'exécution d'un programme ?

 

Etant donné que le code de chaque thread est exécuté séquentiellement et non parallèlement où se situe le gain en vitesse ??

 

C'est valable uniquement pour les processeurs possédant 2 unités d'exécutions ?

 

Merci !


Le multithreading (ou multiprocessing) permet potentiellement 3 choses:

 

1. Augmenter la réactivité (d'une interface). En ayant une UI vivant dans un thread/process donné et toute l'exécution dans 1..n autres threads/process (mais jamais dans le thread/process d'UI), l'UI continue à répondre même quand on lance des opérations lourtes (en terme de CPU) derrière. Sans multi(thread|process), dès qu'on lance une action un peu violente l'UI se retrouve intégralement bloquée.

 

2. Bosser en parallèle à de l'I/O. Si on programme avec des séquences IO/calcul, la partie calcul doit attendre la fin de l'IO (potentiellement longue) avant de pouvoir se lancer, même si elle ne dépend pas de l'IO. De même si on fait de l'IO sur k sources différentes, en mono(thread|process) (et sauf à utiliser des trucs genre select/kpoll) on doit faire toutes les IO l'une après l'autre, puis faire le processing associé. En multi, on peut faire toutes les IOs en même temps, puis dès qu'une IO donnée est terminée lancer les processings qui y sont liés.

 

3. Enfin ça permet d'augmenter la puissance de calcul totale dispo quand on bosse avec du hardware threadé (avec des threads "virtuels" genre CoolThreads/Hyper-Threading, du multicore ou du multiCPU), mais ce genre de gains impose que la tâche soit parallélisable (ce qui n'est pas toujours le cas, en tout cas pas nécessairement facilement)

Joel F a écrit :

oui mais c'est toi qui spécifie ce découpage.


Pas nécessairement, il y a des languages avec des compilos auto-parallélisant (Vienna Fortran Compiler, Paradigm C/C++ Compiler, Polaris Fortran Compiler) et des techniques alternatives aux threads classiques dans lesquelles tu spécifies plutôt les bouts non parallélisables (STM)

Message cité 2 fois
Message édité par masklinn le 02-02-2009 à 15:35:41

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1846119
Joel F
Real men use unique_ptr
Posté le 02-02-2009 à 16:22:57  profilanswer
 

masklinn a écrit :


Pas nécessairement, il y a des languages avec des compilos auto-parallélisant (Vienna Fortran Compiler, Paradigm C/C++ Compiler, Polaris Fortran Compiler) et des techniques alternatives aux threads classiques dans lesquelles tu spécifies plutôt les bouts non parallélisables (STM)


 
Pour le commun des utilisateurs, cela reste vrai, la preuve la question du PO pour qui le concept meme de parallelisation ets flou.
Et bon, les compilo // automatique ... à part sur du Data-Parallel de mamie, je les ai jamais vu faire grand chose. Cela étant, cela suffit pourtant à pas mal de monde.

n°1846128
masklinn
í dag viðrar vel til loftárása
Posté le 02-02-2009 à 16:38:37  profilanswer
 

Joel F a écrit :

Et bon, les compilo // automatique ... à part sur du Data-Parallel de mamie, je les ai jamais vu faire grand chose.


Ca c'est sûr, ils sont pas magiques non plus, et les possibilités d'inférences sont limitées dans des langages permettant des effets de bord de partout :o


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1846173
Joel F
Real men use unique_ptr
Posté le 02-02-2009 à 17:57:23  profilanswer
 

d'ou l'attrait pour le parallelisme fonctionel au sens propre (genre BSML ou Parallel Haskell).

n°1846224
weblook$$
Posté le 02-02-2009 à 20:11:43  profilanswer
 

masklinn a écrit :


Le multithreading (ou multiprocessing) permet potentiellement 3 choses:
 
1. Augmenter la réactivité (d'une interface). En ayant une UI vivant dans un thread/process donné et toute l'exécution dans 1..n autres threads/process (mais jamais dans le thread/process d'UI), l'UI continue à répondre même quand on lance des opérations lourtes (en terme de CPU) derrière. Sans multi(thread|process), dès qu'on lance une action un peu violente l'UI se retrouve intégralement bloquée.
 
2. Bosser en parallèle à de l'I/O. Si on programme avec des séquences IO/calcul, la partie calcul doit attendre la fin de l'IO (potentiellement longue) avant de pouvoir se lancer, même si elle ne dépend pas de l'IO. De même si on fait de l'IO sur k sources différentes, en mono(thread|process) (et sauf à utiliser des trucs genre select/kpoll) on doit faire toutes les IO l'une après l'autre, puis faire le processing associé. En multi, on peut faire toutes les IOs en même temps, puis dès qu'une IO donnée est terminée lancer les processings qui y sont liés.
 
3. Enfin ça permet d'augmenter la puissance de calcul totale dispo quand on bosse avec du hardware threadé (avec des threads "virtuels" genre CoolThreads/Hyper-Threading, du multicore ou du multiCPU), mais ce genre de gains impose que la tâche soit parallélisable (ce qui n'est pas toujours le cas, en tout cas pas nécessairement facilement)


 

masklinn a écrit :


Pas nécessairement, il y a des languages avec des compilos auto-parallélisant (Vienna Fortran Compiler, Paradigm C/C++ Compiler, Polaris Fortran Compiler) et des techniques alternatives aux threads classiques dans lesquelles tu spécifies plutôt les bouts non parallélisables (STM)


 
Merci pour ta réponse bien développé. Maintenant je suis curieux de voir comment on peut effectivement parallélisé son code.

n°1846943
weblook$$
Posté le 04-02-2009 à 08:40:33  profilanswer
 

Certains processeurs ont deux coeurs (e.g: Intel Core 2 duo) tant dis que d'autres ont deux coeurs (ou plus) avec en plus la particularité de pouvoir faire tourner chacun deux threads (e.g: Intel Core i7).
Cela veut-il dire que deux processus peuvent tourner simultanément ?(un sur chaque core).  
Ou est-ce que cela permet uniquement de faire travailler 4 threads simultanément ?


Message édité par weblook$$ le 04-02-2009 à 08:46:07

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  multi-tread vitesse

 

Sujets relatifs
Savoir si une base de données est mono ou multi utilisateur ?Dédoublonnage tableau multi avec array_unique() ?
Tableau multi avec plusieurs donneesmulti domaines hebergeurs
Sommes multi-conditionnelleTOMCAT en PHP - Utiliser sockets en multi-connexions
Moteur de recherche multi-critère[VBA / ACCESS] ajouter à une liste multi-valuée
Boost programmation multi core[SQL] requéte multi table
Plus de sujets relatifs à : multi-tread vitesse


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR