Utilisation de l'UC vs le Nombre de threads
En général, quelle est la relation entre l'utilisation de l'UC et le nombre de threads dans un programme.
Hypothèses:
- Multi-core CPU
- Threads font exactement le même travail (à supposer qu'ils chercher à l'identique les éléments de travail à partir d'une file d'attente et de les traiter)
stackoverflow.com/questions/1718465/...
Un seul thread à l'aide de vecteur d'instructions (par exemple, AVX moderne de la BNS CPU) pourrait facilement manger tous les disponnible bande passante de la mémoire et de mourir de faim les autres threads qui s'exécutent sur le même socket. Ceci est juste l'un des facteurs qui font que votre question est trop large.
Un seul thread à l'aide de vecteur d'instructions (par exemple, AVX moderne de la BNS CPU) pourrait facilement manger tous les disponnible bande passante de la mémoire et de mourir de faim les autres threads qui s'exécutent sur le même socket. Ceci est juste l'un des facteurs qui font que votre question est trop large.
OriginalL'auteur auser | 2012-10-15
Vous devez vous connecter pour publier un commentaire.
Il dépend de la nature de la demande.
core est une décision raisonnable, puisque vous ne voulez pas pour frayer trop de threads en raison de frais généraux, et que vous voulez profiter de tous vos cœurs.
Cela dit, la CPU, l'utilisation que vous allez obtenir est toujours dépendante de nombreux facteurs (IO, la synchronisation, non parallèle pièces dans votre programme).
Si vous êtes intéressé dans le vitesse l'application prendra - rappelez-vous toujours La loi d'Amdahl, qui vous donne un strict lié au temps (speed-up) de votre application va prendre, même après en avoir nombre infini de travail cœurs.
OriginalL'auteur amit
Il n'y a pas de telle relation générale, sauf pour les plus évidents:
Le montant réel de la CPU qu'une application multi-thread dépend principalement de la nature de la demande, et de la façon que vous avez mis en œuvre:
Si le calcul effectué par chaque thread ne génère pas de conflit avec d'autres threads pour les serrures, les accès à la mémoire et ainsi de suite, alors vous devriez être en mesure de s'approcher de la limite théorique de ressources CPU disponibles.
La Contention est de nature à réduire l'effectif d'utilisation de l'UC, parfois de façon spectaculaire.
Mais il n'y a pas une formule générale qui va vous dire combien de vitesse, vous pouvez obtenir.
OriginalL'auteur Stephen C
Je pense qu'il n'y a pas de relation ou d'une pas facile. Cela dépend de l'emploi que les fils sont en train de faire. Un programme avec un seul thread peut consommer 100% de CPU et un programme avec beaucoup de threads peuvent consommer moins.
Si vous êtes à la recherche pour une optimisation de la relation entre le fils et le travail est fait, vous devez étudier votre cas, et peut-être trouvé une solution empirique.
OriginalL'auteur logoff
Que les autres réponses, déjà, "ça dépend". Dans un monde idéal, pour n noyaux, vous obtenez un débit de facteur de n, étant donné que vous faire le même travail dans un thread séparé sur chaque noyau (qui contient déjà une hypothèse fausse, car vous avez besoin de quelque sorte de synchroniser les threads lorsqu'ils lisent de la même file d'attente).
Comprendre le Perturbateur, un Guide du Débutant pour le Hardcore la Simultanéité donne quelques beaux exemples de ce que vous devez considérer lors de l'parallezing tâches, et montre également certains cas où la tentative de paralléliser conduit à un temps d'exécution plus long temps.
OriginalL'auteur Andreas Fester