[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [linux] Vectorisation de code C++
gcc ne peut pas le faire pour toi, comment va-t-il savoir
quel code il peut séparer en deux applis indépendantes ?
Mon programme est consitué en grandes parties de boucles,
et il me semblait qu'il existait des compilateurs suffisament
intelligents pour voir (dans mon cas précis) quelles boucles
pouvaient être réalisées indépendamment des autres.
Dites-moi si je me trompe...
Non, c'est correct. Mais cela résulte généralement en des
suites d'instructions éxécutées en parallèle dans le même
CPU (technique de pipelining avec plusieurs pipelines,
à partir du Pentium), surtout pour les conditions (if/else).
Mais si l'éxécution de ton programme est séquentielle (pas de threads
ni de multi-processus), il n'y a pas d'indépendance.
Si tu fais
calcule_machin();
calcule_truc();
je ne vois pas trop comment ou pourquoi il pourrait/devrait savoir
qu'il peut les éxécuter en parallèle (sur un CPU), puisque c'est
l'un suivi de l'autre.
Quant à la répartition sur plusieurs CPUs, ce n'est pas une question
du compilateur ni du microprocesseur: c'est le scheduler dans le
noyau Linux.
Et pour lui, la plus petite entité est le thread ou le processus
(ce qui revient plus ou moins au même sous Linux, du moins pour
le scheduler ;-)).
Outre le fait que lorsque ton processus reçoit du temps CPU le scheduler
peut décider de le faire passer sur l'autre CPU que précédemment à
cause de la constellation actuelle au niveau de la charge, il ne
saurait pas décider de paralléliser ton code machine sur 2 CPUs.
Il faudrait que le kernel instrumentalise et analyse ton code machine
(propre au CPU), une sorte de "hot spot"... tu vois l'histoire :-)
Ce serait extrêmement compliqué à faire et ... très lent ;-)
Pour cela, tu dois absolument utiliser des threads (un thread par calcul).
Là, le scheduler voit qu'il y a deux threads en parallèle et les
répartir sur les 2 CPUs.
Ce n'est pas possible autrement.
Note qu'il y a des très bonnes implémentations OpenSource de classes pour
du threading en C++ (interfaces C++ pour les threads POSIX du système),
très faciles à utiliser - p.ex. ZThread (cherche sur freshmeat.net pour l'URL).
--
-o) Pascal Bleser ATOS Origin/Aachen(DE) |
/\\ <pascal.bleser@atosorigin.com> |
_\_v <guru@linuxbe.org> |
---------------------------------------------|
Jesus saves,Buddha makes incremental backups :
---------------------------------------------'
_______________________________________________
Linux Mailing List
LCP - 11 Mai - http://www.unixtech.be/lcp.php
Archives: http://www.unixtech.be/mailman/listinfo/linux