Qu'est ce qui affecte le nombre de cœurs de processeur? Combien y a-t-il de noyaux dans le processeur? Nous utilisons le programme Everest

  Bonjour tout le monde, tous les processeurs n’ont pas de threads, il n’ya que Intel, puis des modèles plus coûteux. Dans DMLA, si je ne me trompe pas, cela n'existe pas. Mais peut-être que quelque chose a déjà changé, mais il semble que non ... Le problème principal de la définition des threads est que Windows considère ces threads comme des noyaux. C’est pourquoi certains utilisateurs, quand ils possédaient un Pentium 4, pensaient qu’ils avaient deux noyaux, car il existait une technologie de filetage, ce qui l’appelait Hyper-threading ... Il y avait même un peu de bruit autour de Penkov, certains disaient qu’ils étaient dual-core, d’autres mono-core. A propos, le premier chanvre dual core est une ligne Pentium D (D est du type Dual)

L'hyper-threading existe dans le Pentium 4, mais pas dans le chanvre moderne: cette technologie a été dotée d'une famille de processeurs Intel Core i * plus cool - et tous les modèles, le dextop Core i5 ne possèdent pas de threads. Core i5 est un type de moyenne d'or parmi le proxy i * et il n'y a pas de threads, mais il y a 4 noyaux complets (mais sur le socket 1156, il existe un modèle Core i5 avec des threads, mais il y a deux noyaux et quatre threads!). Mais i3 et i7 ont déjà des threads.

En général, il existe de nombreuses critiques sur Internet selon lesquelles l’hyper-threading est une connerie, qu’il s’agit d’un divorce et que cela ne fonctionne pas. Eh bien, que puis-je dire, d'où proviennent de telles pensées, je ne le sais pas. Même à cette époque où j’avais un Pentium 4, j’ai quand même remarqué la perte de performance lorsque j’ai désactivé l’hyper-threading dans le BIOS. Mais aujourd’hui, cette technologie a déjà beaucoup changé, eh bien, à l’intérieur, elle s’est raffinée, même si son nom n’a pas changé. En général, l’hyper-threading est devenu bien meilleur.

Voici une photo, puis, d'une manière ou d'une autre, le fonctionnement des flux semble plus ou moins clair:


Ils disent que Intel appelle les threads ce que AMD a les cœurs. J'ai lu des informations sur le processeur présenté par AMD comme le premier processeur à huit cœurs de la maison ... Les cœurs AMD de type 8 ressemblent à 8 threads Core i7 ... Eh bien, je ne dirai rien ici, je n’ai que peu d’expérience avec les processeurs AMD, mais je suis sûr que pas si mal qu'on dit d'eux ...

Eh bien, plus ou moins avec le fait que de tels threads sont triés, laissez-moi maintenant vous montrer comment savoir dans Windows 7 combien de threads vous avez.

Pour toutes les informations à connaître sur le processeur, il est préférable d’utiliser un seul utilitaire, c’est le CPU-Z. Il est d'abord gratuit, deuxièmement, il est très petit et dans le troisième, il est facile à installer et fonctionne parfois même sans installation (si la version est portable). Donc, j'ai un processeur Pentium G3220, voici ce que l'utilitaire CPU-Z m'a montré:


Vous voyez, j'ai encerclé là-bas au bas du cadre? Eh bien, les cœurs sont des noyaux et les fils sont des fils, tout est simple. Mais je n'ai pas de threads dans le processeur, donc deux cœurs et deux threads ...

Mais le processeur pour le socket 1156, Intel Core i5 670:


Ce modèle prend en charge l’hyper-threading et constitue en même temps une famille de Core i5, même si de nombreux utilisateurs sont certains qu’il n’existe aucun thread dans Core i5. En principe, ils ont raison, car les threads se trouvent sur le modèle i5 du socket 1156 obsolète ... Il est apparu avant 1155 ... Ce sont les cas

Mais il existe un autre moyen de savoir combien de threads vous avez. Cette méthode peut également être utilisée, même si je dirai honnêtement que ce n’est pas si grave, mais vous ne pourrez y apprendre que des informations de base.

Bien, alors. Pour ce faire, vérifiez d’abord que vous avez activé l’affichage des extensions de fichier. Le cas échéant, ouvrez le Panneau de configuration. Une icône d’option de dossier apparaît. Le deuxième onglet présente une option permettant d’afficher les extensions. C’est-à-dire que vous devez supprimer la case à cocher pour masquer l’extension. Eh bien, je pense que c'est clair.

Donc, vous devez créer un fichier avec l'extension nfo. Il sera plus facile de créer d’abord un document texte vide, puis de le renommer, mais l’essentiel est de remplacer l’extension txt par nfo, par exemple, j’ai créé le fichier cpu.nfo.

Supposons que j'ai un processeur à 4 cœurs et que je souhaite exécuter un processus en un temps minimum. Le processus est parfaitement mis en parallèle, de sorte que je peux exécuter ses morceaux sur un nombre infini de threads, et chaque thread prend le même temps.

Comme j'ai 4 cœurs, je ne m'attends pas à une accélération en exécutant plus de threads que les cœurs, puisqu'un noyau ne peut fonctionner que dans un thread pour le moment. Je ne comprends pas vraiment le matériel, alors ce n'est qu'une supposition.

Est-il possible de démarrer un processus parallélisé pour plus de threads que les noyaux? En d'autres termes, mon processus s'achèvera-t-il plus vite, plus lentement ou à peu près au même temps si je l'exécute en utilisant 4 000 threads au lieu de 4?

13 réponses

Si vos threads n'effectuent pas d'E / S, de synchronisation, etc., et que rien n'y fonctionne, 1 thread par cœur obtiendra une performance maximale. Cependant, ce n'est probablement pas le cas. L'ajout de threads est généralement utile, mais après un certain point, ils entraînent une dégradation des performances.

Récemment, j'ai testé les performances d'un processeur dual-core s'exécutant sur une application ASP.NET sur Mono, avec une charge assez correcte. Nous avons joué avec le nombre minimal et maximal de flux, et nous avons finalement découvert que pour cette application particulière dans cette configuration particulière, le meilleur débit se situait entre 36 et 40 flux. Tout ce qui dépasse ces limites est pire. Leçon apprise? Si j'étais vous, je testerais avec un nombre de threads différent jusqu'à ce que je trouve le bon nombre pour votre application.

Une chose est sûre: les flux 4k prendront plus de temps. Cela fait beaucoup de changements de contexte.

Je suis d'accord avec la réponse @Gonzalo. J'ai un processus qui n'effectue pas d'opérations d'E / S et voici ce que j'ai trouvé:

Notez que tous les threads fonctionnent sur le même tableau, mais que des plages différentes (deux threads n'ont pas accès au même index), les résultats peuvent donc différer s'ils fonctionnent sur des tableaux différents.

Machine 1.86 est un ordinateur MacBook avec SSD. L'autre mac est un iMac avec un disque dur standard (je pense que c'est 7200 tr / min). La machine Windows possède également un disque dur à 7 200 tr / min.

Dans ce test, le nombre optimal était égal au nombre de cœurs de la voiture.

Je sais que cette question est assez ancienne, mais elle s’est réunie depuis 2009.

Vous devez maintenant prendre en compte deux choses: le nombre de cœurs et le nombre de threads pouvant être exécutés dans chaque cœur.

Avec les processeurs Intel, le nombre de threads est déterminé par l'hyperflow, qui n'est que de 2 (si disponible). Mais Hyperthreading réduit le temps d'exécution de deux, même si 2 threads ne sont pas utilisés! (c’est-à-dire qu’un pipeline est divisé entre deux processus - c’est bien lorsque vous avez plus de processus et non l’inverse).

Sur d'autres processeurs, vous pouvez avoir 2, 4 ou même 8 threads. Par conséquent, si vous avez 8 cœurs, chacun prenant en charge 8 threads, vous pouvez avoir 64 processus s'exécutant en parallèle sans commutation de contexte.

Le "changement de contexte" est évidemment faux si vous utilisez un système d'exploitation standard qui changera le contexte pour toute autre chose hors de votre contrôle. Mais c'est l'idée principale. Certains systèmes d'exploitation vous permettent d'allouer des processeurs, de sorte que seule votre application a accès / utilise le processeur spécifié!

D’après ma propre expérience, si vous avez beaucoup d’E / S, beaucoup de threads, c’est bien. Si vous avez un travail très intensif avec une mémoire intensive (source de lecture 1, source de lecture 2, calcul rapide, écriture), un plus grand nombre de flux n’aidera pas. Là encore, cela dépend de la quantité de données que vous lisez / écrivez en même temps (c’est-à-dire, utilisez SSE 4.2 et lisez les valeurs de 256 bits, ce qui stoppe tous les threads à votre étape ... en d’autres termes, 1 thread est probablement beaucoup plus facile à implémenter. et probablement presque aussi rapidement, voire plus rapidement, en fonction de votre architecture de processus et de votre mémoire, certains serveurs avancés gèrent des plages de mémoire distinctes pour des cœurs individuels. Ainsi, les threads individuels seront plus rapides si vos données sont correctement servies. c'est pourquoi sur certaines architectures, 4 processus seront exécutés plus rapidement qu'un processus avec 4 threads.)

La productivité réelle dépendra de la quantité de rendement volontaire de chaque fil. Par exemple, si les threads ne possèdent AUCUN I / O et n'utilisent pas de services système (c'est-à-dire qu'ils sont connectés à 100% de l'unité centrale), un thread par cœur est optimal. Si les threads remplissent tout ce qui nécessite d'attendre, vous devrez faire des essais pour déterminer le nombre optimal de threads. 4000 threads auront une charge de planification importante, ce qui n’est probablement pas optimal non plus.

La réponse dépend de la complexité des algorithmes utilisés dans le programme. Je suis arrivé à une méthode pour calculer le nombre optimal de threads en effectuant deux mesures du temps de traitement Tn et Tm pour deux nombres arbitraires de flux n et m. Pour les algorithmes linéaires, le nombre optimal de threads est N = sqrt ((mn (Tm * (n-1) - Tn * (m-1))) / (nTn-mTm)).

Lisez mon article sur la façon de calculer le nombre optimal pour différents algorithmes: pavelkazenin.wordpress.com

Je pensais que j'ajouterais une autre perspective. La réponse dépend de si la question accepte une mise à l'échelle faible ou élevée.

Faible mise à l'échelle:  Le temps de résolution dépend du nombre de processeurs pour une taille de problème fixe par processeur.

Forte mise à l'échelle: comment le temps de résolution dépend du nombre de processeurs pour une taille totale fixe du problème.

Si la question suppose une mise à l'échelle faible, @Gonzalo est suffisant pour répondre. Toutefois, si la question implique une mise à l'échelle forte, vous devez ajouter autre chose. Avec une mise à l'échelle forte, vous acceptez une charge de travail fixe. Par conséquent, si vous augmentez le nombre de threads, la taille des données avec laquelle chaque thread devrait fonctionner diminue. Sur les processeurs modernes, l’accès à la mémoire est coûteux et il est préférable de conserver la localité tout en stockant les données dans des caches. Par conséquent, le nombre optimal probable de threads peut être trouvé, quand l'ensemble de données de chaque thread s'inscrit dans chaque cache du noyau  (Je n'entrerai pas dans les détails de la discussion pour savoir s'il s'agit du cache (L1 / L2 / L3) du système L1).

Cela est vrai même lorsque le nombre de threads dépasse le nombre de cœurs. Par exemple, supposons qu'il y ait 8 unités arbitraires (ou AU) de travail dans un programme qui seront exécutées sur un ordinateur à 4 cœurs.

Cas 1:  fonctionne avec quatre threads, où chaque thread doit remplir 2AU. Il faut 10 secondes à chaque thread pour terminer ( avec beaucoup de ratés dans la cache). Avec quatre cœurs, le temps total sera de 10 s (10 s * 4 fils / 4 cœurs).

Cas 2:  fonctionne avec huit threads, où chaque thread doit remplir 1AU. Chaque flux ne prend que 2 secondes (au lieu de 5 secondes en raison de réduire les oublis de cache). Avec huit cœurs, le temps total sera de 4 s (2 s * 8 filets / 4 cœurs).

J'ai simplifié le problème et ignoré les frais généraux mentionnés dans d'autres réponses (par exemple, les changements de contexte), mais j'espère que vous comprenez qu'il serait utile de disposer de plus de threads que le nombre de cœurs disponibles, selon la taille des données.

4000 débits à la fois sont assez élevés.

La réponse est oui et non. Si vous faites beaucoup de blocage d'E / S dans chaque thread, alors oui, vous pouvez afficher une accélération significative en effectuant jusqu'à 3 ou 4 threads par noyau logique.

Si vous ne bloquez pas beaucoup, la surcharge supplémentaire liée à la diffusion en continu ralentit tout simplement. Par conséquent, utilisez le profileur et voyez où se trouvent les goulots d'étranglement dans chaque partie parallèle. Si vous effectuez des calculs lourds, plus d'un thread par processeur ne vous aidera pas. Si vous avez beaucoup de mémoire, cela n’aide pas non plus. Si vous faites beaucoup d'E / S, par exemple, pour accéder au disque ou à Internet, oui, plusieurs threads aideront dans une certaine mesure ou au moins rendront l'application plus réactive.

Je commencerais par augmenter le nombre de threads pour l'application, en commençant par 1, puis par passer à quelque chose comme 100, à exécuter trois à cinq échantillons pour chaque nombre de threads et à vous construire un planning pour travailler avec. nombre de threads.

Vous devriez avoir les quatre cas de flux optimaux, avec un petit coup de pouce pendant l'exécution après cela, mais peut-être pas. Votre application peut être limitée par la bande passante, c'est-à-dire L'ensemble de données que vous chargez en mémoire est énorme, vous avez beaucoup de données manquantes dans le cache, etc. Ainsi, les 2 flux sont optimaux.

Vous ne pouvez pas savoir avant de partir.

Vous trouverez le nombre de threads que vous pouvez exécuter sur votre ordinateur en exécutant la commande htop ou ps, qui renvoie le nombre de processus sur votre ordinateur.

Vous pouvez utiliser la page de manuel pour la commande "ps".

  • ps -aux | wc -l
  • ps -eLf | wc -l

Calculez le nombre de processus utilisateur:

  • ps --User root | wc -l

Alternativement, vous pouvez utiliser "htop"

Les performances globales du système, notamment en mode multitâche, dépendent fortement du nombre de cœurs du processeur central. Vous pouvez savoir combien de personnes utilisent des logiciels tiers ou des méthodes Windows standard.

La plupart des processeurs sont maintenant dotés de 2 à 4 unités nucléaires, mais il existe des modèles coûteux pour les ordinateurs de jeux et les centres de données à 6 voire 8 cœurs. Auparavant, lorsque le processeur ne comportait qu'un seul cœur, toutes les performances étaient en fréquence et le fait de travailler avec plusieurs programmes en même temps pouvait complètement «bloquer» le système d'exploitation.

Vous pouvez déterminer le nombre de cœurs et examiner la qualité de leur travail à l'aide de solutions intégrées à Windows lui-même ou de programmes tiers (l'article décrit les plus populaires).

Méthode 1: AIDA64

- C’est un programme populaire pour surveiller les performances de l’ordinateur et effectuer divers tests. Le logiciel est payant, mais il existe une période de test, suffisante pour connaître le nombre de cœurs de la CPU. L'interface AIDA64 est entièrement traduite en russe.

L'instruction est la suivante:


Méthode 2: CPU-Z

  - Un programme gratuit qui vous permet d’obtenir toutes les informations de base sur les composants de l’ordinateur. Il a une interface simple qui est traduite en russe.

Pour connaître le nombre de cœurs utilisant ce logiciel, lancez-le. Dans la fenêtre principale, trouvez tout en bas, dans la partie droite, l'élément "Cœurs". En face de lui sera écrit le nombre de cœurs.

Méthode 3: Gestionnaire de tâches

Cette méthode ne convient que pour les utilisateurs de Windows 8, 8.1 et 10. Procédez comme suit pour connaître le nombre de cœurs de cette manière:


Méthode 4: Gestionnaire de périphériques

Cette méthode convient à toutes les versions de Windows. En l'utilisant, il convient de rappeler que sur certains processeurs d'Intel, les informations peuvent ne pas être données correctement. Le fait est que les processeurs d'Intel utilisent la technologie Hyper-threading, qui divise un cœur de processeur en plusieurs threads, améliorant ainsi les performances. Mais en même temps "Gestionnaire de périphériques"  peut voir différents threads sur un noyau sous forme de plusieurs noyaux séparés.

L'instruction pas à pas ressemble à ceci:


Indépendamment, le nombre de cœurs dans le processeur central est simple. Vous pouvez également voir simplement les spécifications dans la documentation de l'ordinateur / ordinateur portable, si vous en avez. Ou "google" le modèle de processeur, si vous le connaissez.

Le noyau est l'unité de calcul du processeur. En conséquence, plus ils sont nombreux, plus l'ordinateur peut exécuter de commandes. en même temps. Il a un effet positif sur la performance  à un ensemble de processus simultanément, ainsi que dans multithread  applications (par exemple, dans "lourd" jeux  ou éditeurs vidéo). Par conséquent, vous devez connaître cette caractéristique importante de votre processeur.

Déterminer le nombre de cœurs sur l'ordinateur

Nous utilisons le gestionnaire de périphériques

Vous pouvez trouver les informations nécessaires standard  moyen de Windows. Pour ouvrir utilité:

En conséquence, vous recevrez une liste comprenant les types de périphériques installés. Il y a aussi un article “ Processeurs". Cliquez sur la flèche à gauche de celui-ci ou double-cliquez sur son nom. En conséquence, une liste de plusieurs postes sera développée, chacun correspondant à un fil  équipes. Si votre CPU supporte l'hyper-parallélisme (" Hyper Filetage"), Ensuite, pour connaître le nombre de noyaux réels, diviser  le nombre de ces postes est 2. S'il n'y a pas une telle technologie, il n'est pas nécessaire de diviser.

Via le gestionnaire de tâches

Cette application célèbre vous permet également d'apprendre des informations sur le processeur. Pour commencer, cliquez sur clic droit  sur l'espace non alloué en bas de l'écran où le barre des tâches. Un menu apparaît où nous sommes intéressés par l'item "" ou " Démarrer le gestionnaire de tâches».

Windows 7. Dans la fenêtre du programme, allez dans l’onglet “ Performance de vitesse».

En haut à droite, vous verrez plusieurs graphiques intitulés “ Chronologie de charge du processeur". S'il n'y a qu'un seul programme, allez au menu "", réglez " Selon le planning de chaque CPU". En conséquence, le nombre de ces graphiques affichera le nombre de flux. Si le processeur prend en charge l'hyperparallélisme, le nombre de graphes doit être divisé par 2 pour connaître le nombre de cœurs physiques.

Windows 10. Dans la fenêtre du programme, cliquez sur l'onglet " La performance».

Dans le coin inférieur droit, vous verrez les principales caractéristiques de votre CPU, y compris le nombre noyaux physiques  et ruisseaux (" processeurs logiques»).

Nous utilisons le programme Everest

Everest n’est pas un utilitaire gratuit, mais néanmoins, la fonctionnalité de sa version d’essai est suffisante pour le savoir. information de base  à propos du système.

Dans la fenêtre du programme, vous verrez beaucoup d'icônes. Cliquez sur l'icône qui dit " Carte système».

À partir des icônes qui apparaissent, cliquez sur " CPU". Dans la liste des propriétés qui s'ouvre, faites attention à “ Type de CPU". Ici vous trouverez les informations dont vous avez besoin.

Déterminez le nombre de cœurs via CPU-Z

Cette application est très pratique pour sa compacité, son interface simple et gratuite. Immédiatement après le lancement, un onglet avec tous propriétés de base  CPU, parmi lesquels nombre de noyaux physiques  (dans la version anglaise " Corores") Et des fils (" Les fils»).

Nous regardons la documentation

Toutes les caractéristiques principales de la CPU sont également indiquées sur son emballé  et dans documentation complète.

Vous aimez cet article? Partager avec des amis: