Faire un programme en C++ pour les processeurs Dual Core - C++ - Programmation
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
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é)
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 ...
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
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
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
Marsh Posté le 18-01-2006 à 16:55:04
ReplyMarsh 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
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
Marsh Posté le 18-01-2006 à 17:27:43
Rien du tout
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.
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
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
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 |
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) |
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 |
J'y connais rien au raytracing, donc je sais ou est la porte
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
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
Marsh Posté le 19-01-2006 à 10:25:56
Code :
|
salut j'ai trouver ceci en remplacement de fork() sous windows, vous en pensez quoi ?
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.
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)
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...
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é.
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.
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