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

  FORUM HardWare.fr
  Programmation
  C++

  Faire un programme en C++ pour les processeurs Dual Core

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Faire un programme en C++ pour les processeurs Dual Core

n°1286610
Palito
Posté le 18-01-2006 à 14:36:27  profilanswer
 

Bonjour,
Je suis nouveau dans la rubrique programmation (j'officie plus dans la rubrique portable).
Je programme en C++ un raytracing et je me demandais comment faire pour tirer parti des processeurs dual-core.
 
Sur le principe c'est simple mais en praique c'est plus dur.
Faut-il et comment peut on lancer des processus.
 
Merci, A plus

mood
Publicité
Posté le 18-01-2006 à 14:36:27  profilanswer
 

n°1286652
Profil sup​primé
Posté le 18-01-2006 à 15:04:54  answer
 

Dans ta boucle de calcul, tu fork et tu fais calculer une partie au process pere et une partie au process fils (comment les diviser, je sais pas, connais pas assez le raytracing), l'OS devrait les repartir comme il faut :)
 
Sinon tu peux faire des thread :o

n°1286663
Palito
Posté le 18-01-2006 à 15:13:57  profilanswer
 

Donc si je te suis, je n'ai qu'a "forker" et l'os gere, si y'a 2 proc chacun en aura un processus et si y'a qu'un seul processeur, ils seront géré par ce dernier.
 
Je vais me documenter sur cette fonction ca me donne au moins un point de départ ....
 
Merci (et bravo pour la rapidité)

n°1286664
theshockwa​ve
I work at a firm named Koslow
Posté le 18-01-2006 à 15:16:08  profilanswer
 

pour faire un raytracer, ce sera sans doute plus pratique de faire plusieurs threads que plusieurs processus ... [:pingouino]

n°1286665
push
/dev/random
Posté le 18-01-2006 à 15:16:31  profilanswer
 
n°1286669
chrisbk
-
Posté le 18-01-2006 à 15:25:36  profilanswer
 

j'opte pour thread si t'es sous win, et y'a un machin thread affinity ou jsais pas quoi qui te permet de selectionner toi meme le cpu cible, msdn toussa

n°1286767
Profil sup​primé
Posté le 18-01-2006 à 16:49:16  answer
 

Evidemment, les thread sont la solution. La seule solution sous Windows d'ailleurs.
 
Mais le fork fonctionne nickel aussi (voir Apache), et c'est tres classe pour tirer parti du SMP  :o

n°1286773
Palito
Posté le 18-01-2006 à 16:53:34  profilanswer
 

Oki,
Mais c'est pas pour tout de suite, je vous tiendrais au courant quand j'y serais .
 
Salut

n°1286774
chrisbk
-
Posté le 18-01-2006 à 16:55:04  profilanswer
 


 
(me semblait que justement apache2 etait passé au thead ?)

n°1286785
Profil sup​primé
Posté le 18-01-2006 à 17:10:52  answer
 

chrisbk a écrit :

(me semblait que justement apache2 etait passé au thead ?)


 
La plupart des serveurs avec apache2 et php utilisent apache2-mpm-prefork :o

mood
Publicité
Posté le 18-01-2006 à 17:10:52  profilanswer
 

n°1286790
chrisbk
-
Posté le 18-01-2006 à 17:14:21  profilanswer
 

ce qui veut dire ?

n°1286802
masklinn
í dag viðrar vel til loftárása
Posté le 18-01-2006 à 17:23:36  profilanswer
 

chrisbk a écrit :

(me semblait que justement apache2 etait passé au thead ?)


Grave, là j'regarde mon Apache il a spawné 3 threads dans son processus principal et 252 dans le secondaire [:kbchris]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1286808
Profil sup​primé
Posté le 18-01-2006 à 17:27:43  answer
 

Rien du tout :o
 
C'est juste que ce sera beaucoup plus simple de le faire avec un eventuel fork si il y a plusieurs processeurs que de gerer les threads. Surtout pour quelqu'un dont c'est le premier programme multitruc. Surtout que pour ce genre de calcul en SMP, il aura tout a gagner du fait de l'isolation des espaces memoire entre les process, sans etre penalise par le besoin d'avoir une communication intra-process/thread importante.

n°1286812
chrisbk
-
Posté le 18-01-2006 à 17:29:59  profilanswer
 

ouais mais nan je demandais le sens de "apache2-mpm-prefork" paske bon, j'y connais quequette moi a ca [:fande--]

n°1286817
theshockwa​ve
I work at a firm named Koslow
Posté le 18-01-2006 à 17:34:15  profilanswer
 


 
 
 
il aura plutôt tout à perdre à cause de cette isolation ... Tu as déjà réfléchi au problème d'un raytracer ? C'est pas trop le même genre de traitements qu'un serveur Web, hein ... Tu as autrement plus d'échanges entre tes processus, notamment, tu dois partager des données sur ta scène qu'il serait un peu trop coûteux de sérialiser pour les passer dans les moyens de communication usuels entre processus (et puis bon ... la mémoire partagée n'est pas vraiment faite non plus pour ce genre d'utilisation) donc ... je maintiens : threads  [:jagstang]

n°1286825
masklinn
í dag viðrar vel til loftárása
Posté le 18-01-2006 à 17:38:51  profilanswer
 

chrisbk a écrit :

ouais mais nan je demandais le sens de "apache2-mpm-prefork" paske bon, j'y connais quequette moi a ca [:fande--]


C'est un Apache2 sans threads pour le MP (traditionnel, à la Apache1)
 
Suffit de lire le premier résultat google (description du package deb)

Citation :

Package: apache2-mpm-prefork (2.0.55-4, 2.0.55-3)
traditional model for Apache2
 
This Multi-Processing Module (MPM) implements a non-threaded, pre-forking web server that handles requests in a manner similar to Apache 1.3. It is appropriate for sites that need to avoid threading for compatibility with non-thread-safe libraries. It is also the best MPM for isolating each request, so that a problem with a single request will not affect any other.
 
It is not as fast, but is considered to be more stable.


Message édité par masklinn le 18-01-2006 à 17:39:25

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1286832
Profil sup​primé
Posté le 18-01-2006 à 17:44:26  answer
 

theshockwave a écrit :

il aura plutôt tout à perdre à cause de cette isolation ... Tu as déjà réfléchi au problème d'un raytracer ? C'est pas trop le même genre de traitements qu'un serveur Web, hein ... Tu as autrement plus d'échanges entre tes processus, notamment, tu dois partager des données sur ta scène qu'il serait un peu trop coûteux de sérialiser pour les passer dans les moyens de communication usuels entre processus (et puis bon ... la mémoire partagée n'est pas vraiment faite non plus pour ce genre d'utilisation) donc ... je maintiens : threads  [:jagstang]


 
J'y connais rien au raytracing, donc je sais ou est la porte [:aztechxx]

n°1286833
Palito
Posté le 18-01-2006 à 17:44:34  profilanswer
 

oki threads en plus ca me permetera de tester sur une machine(ma machine) mono core

Message cité 1 fois
Message édité par Palito le 18-01-2006 à 17:45:21
n°1286841
masklinn
í dag viðrar vel til loftárása
Posté le 18-01-2006 à 17:50:22  profilanswer
 

Palito a écrit :

oki threads en plus ca me permetera de tester sur une machine(ma machine) mono core


Les processus aussi hein, ça a aucun lien [:pingouino]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1287315
Palito
Posté le 19-01-2006 à 10:25:56  profilanswer
 

Code :
  1. DWORD WINAPI ThreadProc(LPVOID lpParam){/* todo */}
  2. int main()
  3. {
  4. DWORD ThreadId;
  5. CreateThread(NULL,NULL,ThreadProc,NULL,NULL,&ThreadId);
  6. return 0;
  7. }


 
salut j'ai trouver ceci en remplacement de fork() sous windows, vous en pensez quoi ?

n°1287319
chrisbk
-
Posté le 19-01-2006 à 10:27:58  profilanswer
 

bin comme son nom l'indique, c'est des threads ([:petrus75])

n°1287340
Palito
Posté le 19-01-2006 à 10:43:22  profilanswer
 

Ce qui m'embete c'est que c'est du code spécifique windows,
Mais aparament y'a pas de truc qui soit compatible windows et linux mais qui reste simple en meme temps.


Message édité par Palito le 19-01-2006 à 10:43:50
n°1287341
chrisbk
-
Posté le 19-01-2006 à 10:44:16  profilanswer
 

bin t'as les pthreads (thread posix) qui sont portables un peu partout (y'a une implem windows qui traine qqpart sur sourceforge je crois)

n°1287401
bjone
Insert booze to continue
Posté le 19-01-2006 à 11:46:30  profilanswer
 

y'a les thread de boost. (pas joué avec mais vu que ça existe faut regarder)
 
attention aussi, pour maximiser les perfs, dumoins pour ne pas les minimiser, de pas avoir tes threads (sur des cpu distincts) qui écrivent dans la même localité mémoire:  
sinon les cpus vont pas arrêter de s'invalider mutellement la mémoire cache par exemple.
 
enfin va voir sur le site d'intel et d'amd, y'a des faq sur les pièges a éviter en multi-proc...
 

n°1288036
el muchach​o
Comfortably Numb
Posté le 20-01-2006 à 06:54:42  profilanswer
 

On peut découper la scène en plusieurs blocs et calculer une partie de la scène sur chaque thread avec 2 threads en parallèle. Comme ça, le calcul est bien réparti entre processeurs, car si un bloc est rapidement calculé, le proc qui a fini en premier peut attaquer le suivant. En plus chaque bloc terminé est écrit sur le disque dur, ce qui permet d'interrompre le calcul à tout moment et de pouvoir le reprendre sur le bloc où il a été arrêté.


Message édité par el muchacho le 20-01-2006 à 07:08:53

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°1288047
Palito
Posté le 20-01-2006 à 08:16:29  profilanswer
 

En fait pour l'instant j'ai une thread qui calcul une ligne sur deux depuis le bas, et une haute depuis le haut.

mood
Publicité
Posté le   profilanswer
 


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

  Faire un programme en C++ pour les processeurs Dual Core

 

Sujets relatifs
Mysql => programme sur pc ( en c++, c, ... )[PASCAL][C] logiciel pr convertir un programme pascal en C
programme pour trouver le ppcm et ppcdProgramme qui permet de copier fichier dans autre dossier!!
Passer un argument au programmeSauver les options du programme
Projet étudiant: Programme Affichage News et Popupfaire fonctionner mon programme
programme de recherche de mot[Help] Programme nbr premier en c#
Plus de sujets relatifs à : Faire un programme en C++ pour les processeurs Dual Core


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