2013-07-29 3 views
0

J'ai un programme qui tire parti d'OpenMP pour obtenir une grande vitesse sur un double CPU avec un total de 32 cœurs serveur. Les paramètres d'entrée que j'utilise ne permettent pas un chargement complet des CPU.Accès à la mémoire OpenMP et dégradation des performances

Aujourd'hui, deux cœurs étaient chargés à 100% par un autre programme. Quand j'ai lancé mon programme, il était terriblement lent même si la charge sur les processeurs était comme d'habitude assez élevée (~ 2500%). J'ai enlevé les instructions parallèles et j'ai remarqué quelques améliorations de performance.

Cela peut-il être dû à la bande passante mémoire limitée? Comment pourrais-je approfondir le problème et éventuellement améliorer mon code?

+0

cela peut être un problème de mémoire ou parce que "autre programme" charge un peu de CPU, mais montrez votre code et effectuez une mesure réelle de la quantité de mémoire/CPU, temps d'exécution de votre programme! – alexbuisson

Répondre

2

Ce n'est pas nécessairement un accès à la mémoire qui dégrade les performances. Si vous utilisez la planification statique (souvent par défaut), les boucles sont divisées en blocs affectés aux threads. Si les threads sont liés à un core déjà occupé, cela ralentira considérablement vos performances d'exécution. Si vous exécutez dans un environnement où vous n'êtes pas garanti d'être le seul utilisateur des ressources, vous pouvez obtenir de meilleures performances avec la planification dynamique.

Si vous ne spécifiez pas un type de planification, exécutez votre programme avec

OMP_SCHEDULE=dynamic ./my_program 

et voir si ça aide.

+0

Merci pour la réponse, cela semble intéressant. (un) heureusement aujourd'hui le serveur est à peu près déchargé. Je vais essayer dès que j'en aurai l'occasion. – DarioP

Questions connexes