2010-05-24 5 views
0

J'ai lu beaucoup des bonnes questions et réponses concernant les procédures de programmation multicœurs, etc. Je connais la concurrence, l'IPC, MPI etc mais ce dont j'ai besoin est un conseil sur la façon de mesurer l'accélération qui aidera à faire une analyse de rentabilisation de passer le temps d'écrire un tel code. S'il vous plaît ne répondez pas avec "bien l'exécuter avec un code simple-core puis le code multi-core et comprendre la différence". Ce n'est ni un moyen scientifique ni un moyen fiable de mesurer l'amélioration des performances. Si vous connaissez des outils qui feront un peu de levage, veuillez les mentionner. Les réponses relatives à la méthodologie seront plus pertinentes, mais les outils d'inscription sont également acceptables.Conseils pour mesurer l'accélération du parallélisme dans le développement multicœur

+1

Pourquoi est-ce "non scientifique"? –

+0

Eh bien parce que l'exécution du code binaire est simplement ce que le processeur interprète le code car il essaie aussi de gérer le temps de découper ses ressources. Par conséquent, le résultat révélera non seulement les caractéristiques de performance de votre application, mais également ce qui se passait dans le système lorsque votre application était en cours d'exécution. Bonne question! – fnCzar

Répondre

1

Il est assez difficile de mesurer une amélioration avant d'avoir implémenté quelque chose. Il y aura un certain nombre de devinettes éclairées impliquées. Je suppose que l'entreprise a déjà établi que l'application/site Web est lent et coûte de l'argent. Je suppose également que vous avez déjà exclu d'autres améliorations de performance évidentes (aller-retour de base de données, mise en cache, charge utile web frontale, etc.) sans connaître votre application.)

Mon premier pas serait d'ajouter quelques lignes de code de chronomètre autour du code lent en question, et consignez les temps de réponse sur quelques milliers d'opérations dans un environnement en direct. Comparez les chiffres moyens que vous voyez aux temps de réponse que vous voulez atteindre.

Ensuite, exécutez un outil de profilage de code sur ce même code (par exemple, DOTTrace pour .NET) pour voir où votre code passe le plus clair de son temps. Appliquez le pourcentage de temps passé en code parallélisable aux durées moyennes du chronomètre, et vous aurez une bonne idée de la possibilité de le faire plus rapidement. Évidemment, il ne s'agit pas de diviser ce chiffre par le nombre de cœurs, car il y a des frais de synchronisation, et il y aura d'autres tâches dans le monde réel. Mais cela devrait vous donner une estimation suffisamment proche de pour savoir si ce sera faisable.

+0

merci pour la perspicacité. Un conseil sur la façon de réduire les temps de synchronisation, ou est-ce juste une constante à vivre? – fnCzar

+0

Remettez de gros morceaux de travail à chaque fil plutôt que de les micro-gérer à partir d'un fil central ... mais pas tellement qu'un fil finit avant les autres. Stephen Toub a écrit un excellent article sur les modèles de conception Parallel Computing dans .NET 4.0, mais les concepts s'appliquent quelle que soit la plate-forme. http://www.microsoft.com/downloads/details.aspx?FamilyID=86b3d32b-ad26-4bb8-a3ae-c1637026c3ee&displaylang=en – realworldcoder

+0

wow ce papier semble super, va certainement lire. Merci encore! – fnCzar

1

Dans Visual Studio 2010 Ultimate, un visualiseur de concurrence vous indique le nombre de cœurs utilisés par votre application (et la quantité de ressources processeur), ainsi que la quantité de données gaspillée lors de la synchronisation. Le reste est un travail bénéfique. Je crois que Intel offre un outil très similaire, mais je ne suis pas entièrement sûr de savoir comment cela fonctionne.

+0

merci pour le pourboire! Pas que j'utilise réellement VS2010U. – fnCzar

+0

Intel propose une évaluation de 30 jours d'un outil similaire. J'ai vérifié leur site Web. Ils l'appellent le studio parallèle ou quelque chose de similaire. Cependant, n'oubliez pas que vous aurez besoin d'une implémentation - ce sont des profileurs conçus pour le multi-thread. – Puppy