Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 03/06/2009, à 10:59

Bigcake

[résolu] Programmation multi-coeurs, 64bits

Bonjour,

j'aimerai réaliser un petit programme test qui s'adapte aux processeurs, monoprocesseur, biprocess, quadcore,  et j'ai plusieurs interrogations sachant que je programme en C :

J'ai dans l'idée que si je lance un thread, le kernel s'occupe d'affecter ce thread à un coeur... j'ai bon ou je me plante ?

y a-t-il un moyen de choper le nombre de cœurs ?
(De manière à pouvoir lancer un nombre de thread adéquat en fonction du processeur)

Et puis tant que j'y suis.... comment tirer parti de la technologie 64 bits ? est-ce juste une histoire de compilation ? (si vous avez des bonnes documentations la dessus je suis preneur)

Merci pour vos éclaircissement !

Dernière modification par Bigcake (Le 03/06/2009, à 19:05)


"Les gens" ne sont pas cons, ils ont été habitués à la facilité et à la désinformation. Le meilleur moyen de ne pas les aider, c'est de se moquer. Le meilleur moyen de les aider, c'est de les informer, encore et encore. La réflexion viendra. N'oubliez pas que vous aussi, vous êtes le con d'un autre.
Smartphone+GNU/Linux=Librem5

Hors ligne

#2 Le 03/06/2009, à 11:15

nicolas.sitbon

Re : [résolu] Programmation multi-coeurs, 64bits

Bigcake a écrit :

J'ai dans l'idée que si je lance un thread, le kernel s'occupe d'affecter ce thread à un coeur... j'ai bon ou je me plante ?

tu as bon.

Bigcake a écrit :

y a-t-il un moyen de choper le nombre de cœurs ?
(De manière à pouvoir lancer un nombre de thread adéquat en fonction du processeur)

sysconf(_SC_NPROCESSORS_ONLN);
Bigcake a écrit :

Et puis tant que j'y suis.... comment tirer parti de la technologie 64 bits ? est-ce juste une histoire de compilation ? (si vous avez des bonnes documentations la dessus je suis preneur)

En gros oui, il faut compiler en 64 bits et évidemment lier ton exécutable avec des bibliothèques 64 bits,
en dehors de ça, ça ne change rien.

Hors ligne

#3 Le 03/06/2009, à 11:22

ddmdllt

Re : [résolu] Programmation multi-coeurs, 64bits

nicolas.sitbon a écrit :
Bigcake a écrit :

J'ai dans l'idée que si je lance un thread, le kernel s'occupe d'affecter ce thread à un coeur... j'ai bon ou je me plante ?

tu as bon.

La question est de surtout savoir si plusieurs threads se répartissent correctement sur différents processeurs (y compris lorsque ces threads sont du même processus).

Sous Linux (le noyau donc pas besoin de GNU avant) c'est le cas. Je crois par contre qu'il y a d'autres systèmes POSIX qui ne gèrent pas cette situation (il faut alors faire plusieurs process pour être sur d'utiliser au mieux les coeurs/processeurs).


David (Site web (fr) - Home page (en) - weblog)

Hors ligne

#4 Le 03/06/2009, à 11:23

Bigcake

Re : [résolu] Programmation multi-coeurs, 64bits

Ok merci beaucoup smile


"Les gens" ne sont pas cons, ils ont été habitués à la facilité et à la désinformation. Le meilleur moyen de ne pas les aider, c'est de se moquer. Le meilleur moyen de les aider, c'est de les informer, encore et encore. La réflexion viendra. N'oubliez pas que vous aussi, vous êtes le con d'un autre.
Smartphone+GNU/Linux=Librem5

Hors ligne

#5 Le 03/06/2009, à 11:31

Bigcake

Re : [résolu] Programmation multi-coeurs, 64bits

ddmdllt a écrit :

La question est de surtout savoir si plusieurs threads se répartissent correctement sur différents processeurs (y compris lorsque ces threads sont du même processus).

Du coup si j'ai un quad core, que je créer 3 threads (+ le main sa fait 4), si le kernel me balance 2 threads sur un même coeur, sa perd de son intérêt......

Peut-on savoir quel coeur travaille sur le thread en cours ?

Dernière modification par Bigcake (Le 03/06/2009, à 11:33)


"Les gens" ne sont pas cons, ils ont été habitués à la facilité et à la désinformation. Le meilleur moyen de ne pas les aider, c'est de se moquer. Le meilleur moyen de les aider, c'est de les informer, encore et encore. La réflexion viendra. N'oubliez pas que vous aussi, vous êtes le con d'un autre.
Smartphone+GNU/Linux=Librem5

Hors ligne

#6 Le 03/06/2009, à 15:42

Link31

Re : [résolu] Programmation multi-coeurs, 64bits

Laisse faire le kernel, il sait mieux que toi où placer les threads et il fait ça très bien.

Hors ligne

#7 Le 03/06/2009, à 16:57

Bigcake

Re : [résolu] Programmation multi-coeurs, 64bits

Je pensais plutôt arrêter un des threads qui serai sur le même coeur qu'un autre thread.
Si on prend le cas d'un quad-core, en plus du main, on lance 3 threads, chaque threads prend énormément de CPU, sa ne sert a rien d'avoir 2 threads sur un même coeurs autant en tuer un nan ?

Dernière modification par Bigcake (Le 03/06/2009, à 16:58)


"Les gens" ne sont pas cons, ils ont été habitués à la facilité et à la désinformation. Le meilleur moyen de ne pas les aider, c'est de se moquer. Le meilleur moyen de les aider, c'est de les informer, encore et encore. La réflexion viendra. N'oubliez pas que vous aussi, vous êtes le con d'un autre.
Smartphone+GNU/Linux=Librem5

Hors ligne

#8 Le 03/06/2009, à 17:02

Link31

Re : [résolu] Programmation multi-coeurs, 64bits

Le kernel ne te mettra pas deux threads actifs sur le même coeur, à moins qu'une autre application tournant en même temps n'ait besoin des coeurs restants pour s'exécuter.

Hors ligne

#9 Le 03/06/2009, à 19:05

Bigcake

Re : [résolu] Programmation multi-coeurs, 64bits

ok c'est ce que je voulais savoir merci à vous 3.


"Les gens" ne sont pas cons, ils ont été habitués à la facilité et à la désinformation. Le meilleur moyen de ne pas les aider, c'est de se moquer. Le meilleur moyen de les aider, c'est de les informer, encore et encore. La réflexion viendra. N'oubliez pas que vous aussi, vous êtes le con d'un autre.
Smartphone+GNU/Linux=Librem5

Hors ligne

#10 Le 04/06/2009, à 15:51

ddmdllt

Re : [résolu] Programmation multi-coeurs, 64bits

Link31 a écrit :

Le kernel ne te mettra pas deux threads actifs sur le même coeur, à moins qu'une autre application tournant en même temps n'ait besoin des coeurs restants pour s'exécuter.

À priori le kernel *linux* gère ça bien. (Ceci dit quand on fait du code autant que ça soit le plus portable possible)

Par contre une complication avec la gestion des threads c'est quand il y a de l'hyperthreading *et* du multi-coeur physique / multiprocesseur physique en même temps. Je ne sais pas si tout se passe tout le temps de manière optimale dans ces cas avec le noyau linux.


David (Site web (fr) - Home page (en) - weblog)

Hors ligne