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

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

Marsh Posté le 18-01-2006 à 14:36:27    

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

Reply

Marsh Posté le 18-01-2006 à 14:36:27   

Reply

Marsh Posté le 18-01-2006 à 15:04:54    

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

Reply

Marsh Posté le 18-01-2006 à 15:13:57    

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é)

Reply

Marsh Posté le 18-01-2006 à 15:16:08    

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

Reply

Marsh Posté le 18-01-2006 à 15:16:31    

Reply

Marsh Posté le 18-01-2006 à 15:25:36    

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

Reply

Marsh Posté le 18-01-2006 à 16:49:16    

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

Reply

Marsh Posté le 18-01-2006 à 16:53:34    

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

Reply

Marsh Posté le 18-01-2006 à 16:55:04    


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

Reply

Marsh Posté le 18-01-2006 à 17:10:52    

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

Reply

Marsh Posté le 18-01-2006 à 17:10:52   

Reply

Marsh Posté le 18-01-2006 à 17:14:21    

ce qui veut dire ?

Reply

Marsh Posté le 18-01-2006 à 17:23:36    

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
Reply

Marsh Posté le 18-01-2006 à 17:27:43    

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.

Reply

Marsh Posté le 18-01-2006 à 17:29:59    

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

Reply

Marsh Posté le 18-01-2006 à 17:34:15    


 
 
 
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]

Reply

Marsh Posté le 18-01-2006 à 17:38:51    

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
Reply

Marsh Posté le 18-01-2006 à 17:44:26    

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]

Reply

Marsh Posté le 18-01-2006 à 17:44:34    

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
Reply

Marsh Posté le 18-01-2006 à 17:50:22    

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
Reply

Marsh Posté le 19-01-2006 à 10:25:56    

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 ?

Reply

Marsh Posté le 19-01-2006 à 10:27:58    

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

Reply

Marsh Posté le 19-01-2006 à 10:43:22    

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
Reply

Marsh Posté le 19-01-2006 à 10:44:16    

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)

Reply

Marsh Posté le 19-01-2006 à 11:46:30    

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...
 

Reply

Marsh Posté le 20-01-2006 à 06:54:42    

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
Reply

Marsh Posté le 20-01-2006 à 08:16:29    

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

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed