PDA

Afficher la version complète : [Réglé] Multi-threading sur processeur multi-coeur mais OS 32 bits



guigui
11/07/2010, 19h55
Bonjour, au vu du fait que les processeurs ont de plus en plus de coeurs, je songeait à essayer de programmer en découpant mes programmes en thread. Seulement par exemple j'ai chez moi un ordinateur à processeur double-coeur, mais il est en 32 bits et j'aimerais donc savoir si malgré tout les 2 parties de mon programmes s'éxécuteront en parallèle ( un processus par coeur ) ou au tour par tour sur un seul coeur comme les processeurs mono-coeurs ?

Merci de vos réponses :)

bg1000
12/07/2010, 07h37
Bonjour

Je n'ai pas de réponse, mais plutot une question, ;)

A partir de quel langage cela se fait'il ? :blink:
Comment se fait la synchronisation entre les deux prcessus paralèlles ? :unsure:

Merci


BG

Burn2
13/07/2010, 10h00
Bonjour, au vu du fait que les processeurs ont de plus en plus de coeurs, je songeait à essayer de programmer en découpant mes programmes en thread. Seulement par exemple j'ai chez moi un ordinateur à processeur double-coeur, mais il est en 32 bits et j'aimerais donc savoir si malgré tout les 2 parties de mon programmes s'éxécuteront en parallèle ( un processus par coeur ) ou au tour par tour sur un seul coeur comme les processeurs mono-coeurs ?

Merci de vos réponses :)[/b]

Bonnjour, les instructions 32bit ou 64bit n'ont rien avoir avec la possibilité d'exécuteur plusieurs thread en même temps.


32bit ou 64bit c'est l'adressage mémoire. Un dual core ou un processeur HT que ça soit un noyau 32 ou 64bit reste identique à lui même et peu donc effectuer deux tâches en même temps. ;)




Donc si tu fais deux processus sur un cpu HT ils tourneront en même temps (mais attention un cpu HT n'est pas un vrais dual core. ;) )

Après attention aussi aux concurrences d'accès avec plusieurs thread en même temps. Et des tâches séquentielles ne peuvent être parallélisées. ;)


Tu cherches à faire quoi comme programme si ce n'est pas indiscret? :)

guigui
14/07/2010, 13h08
Bonjour, désolé de ne pas avoir pu répondre plus tot, bg j'utilise le langage C et le C++, et je fais ca grâce à la bibliothèque posix thread (pthread) ;)
Burn2 merci, donc je vais pouvoir tester ca :) je en fait j'ai commencé un petit jeu juste pour tester les différentes possibilités des bibliothèque que j'utilise vu que je débute et je pensais le découper comme ca comme mon processeur est double coeur : le thread principal : l'affichage et la gestion des évenements / touches et pour le second thread tout ce qui est additif comme le son par exemple que je suis en train de tester ;) Est-ce que cela peut fonctionner en sachant que de toute facon le son est en continu ?

Edit : bg voici un tuto sur les threads et les sockets sur le site du zéro : les sockets et les threads (http://www.siteduzero.com/tutoriel-3-3293-les-sockets.html)

Burn2
14/07/2010, 21h14
Bonsoir, oui ça marchera, mais honnêtement que ça soit un dualcore ou pas ne changera rien. :D
De toute façon il faut toujours détacher la lecture d'un son du programme principal sans quoi tu es bloqué durant sa lecture. Idem les traitements sont souvent détachés du thread principal sinon la fenêtre ne peut se rafraichir. (pour faire une barre d'avancement par exemple)

Mais là tu ne vas pas vraiment te rendre compte que tu utilises un dual core. ;) là ou ça devient coton c'est dual core + plusieurs thread mais ressource partagés. Là on dit merci aux semaphores. ;)

guigui
15/07/2010, 12h24
ok merci pour ces infos burn2, de toute facon il me fallait au minimum 3 threads pour mon programme, car sinon quand un personnage bouge ou que le son est joué le restes est figée...

Burn2
15/07/2010, 17h24
De rien et si t'as besoin d'aide n'hésite pas je dois avoir des exemples de thread quelque part.

guigui
15/07/2010, 19h52
Non non c'est bon burn2, la lib pthread est très bien pour ca :) portable et très simple d'utilisation :) il suffit de créer une variable pthread, d'utiliser la fonction pthread_create(&variablePthread, attributduthread, nomdelafonction, variableapartager);
et si le thread ne s'arrête pas tout seul un pthread_cancel(variablePthread); suffit :) Très simple, bon après il y a les mutex mais bon c'est plus de la gestion que difficile à utiliser ;)

guigui
17/07/2010, 13h20
Ah ba si, y a un détail que je ne sais pas faire finalement, donc si tu as des exemple sur le passage de plusieurs variables à un thread n'étant pas forcément des void* ou des int ca pourrai m'interesser car la je coince sur le troisieme thread de mon programme qui est senssé permettre au 2e joueur de jouer, par contre pour le son mon thread fonctionne :) En attendant je vais faire des recherches sur les mutex et les sémaphores car je suppose que si les 2 threads modifient la variable écran qui correspond à la fenetre, sinon ca risque de mettre le bazar :lol:

Par ailleurs burn2 si tu pensais que je voulais savoir faire un thread sur un second coeurs étant un thread malveillant, je te rassure je comprend pas le plaisir de ceux qui créent les programmes malveillants à vouloir embêter les gens... Personnellement si je programme c'est par plaisir de création et non par plaisir de destruction, je préfère encore créer un anti-virus que un virus ;)