5 votes

Mesurer les dépenses liées aux fils

Joe Duffy déclare dans l'article de MSDN " Utilisation de la concurrence pour l'évolutivité "Le coût de la création d'un thread est d'environ 200 000 cycles, et celui de sa destruction d'environ 100 000 cycles.

Lorsque j'essaie de créer un nouveau thread pour effectuer certains calculs, je voudrais être sûr que les calculs eux-mêmes sont plus coûteux que 200 000 cycles.

Comment pourrais-je mesurer les cycles du CPU ? Je pense que ce serait plus intéressant que de mesurer le temps d'exécution.

2voto

Rob Walker Points 25840

Vous pouvez utiliser un profileur d'échantillonnage comme Vtune d'Intel pour obtenir une mesure du nombre de cycles de CPU consommés avec un minimum de perturbations sur le système mesuré.

Lorsque vous utilisez des threads, le but est d'éviter de créer inutilement de nouveaux threads. Essayez d'utiliser l'option réserve de fils . Cela vous permettra d'exécuter des éléments de travail de manière asynchrone, sans avoir à créer un nouveau fil d'exécution pour chaque élément.

1voto

Jeremy Reagan Points 681

Je vérifierais l'espace de noms System.Diagnostic. Il contient beaucoup de choses sur le suivi de l'utilisation de la mémoire et du processeur.

0voto

Mark S. Rasmussen Points 13313

J'ai posé une question très proche il y a quelques jours, et je n'ai toujours pas trouvé de moyen de mesurer l'utilisation réelle du cycle du processeur du code : Limiter l'exécution de l'assemblage au nombre de cycles cpu

Dans votre cas, ne pourriez-vous pas effectuer un profilage du calcul et voir combien de temps prend un seul calcul, et le comparer au temps global de la création d'un thread qui effectue le calcul, puis de l'arrêt du thread ensuite ?

0voto

Dave Markle Points 44637

Voici le problème du comptage des cycles du processeur. Différents processeurs prennent un nombre différent de cycles pour implémenter la même instruction. Ce n'est donc pas une mesure très fiable. Je pense que ce que vous devriez mesurer est le temps d'exécution, et dans .NET, vous utilisez System.Environment.TickCount pour y parvenir. Je pense que c'est ce que vous avez de mieux...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X