Processus simple thread en cours d'exécution sur 2 cœurs
2
Sur mon processeur quad core, il semble qu’un seul thread (sans fin en boucle) soit exécuté sur 2 cœurs simultanément. Pourquoi est-ce? Un seul thread ne devrait-il pas être exécuté sur un seul noyau?
Peu importe qu'un processus moyen ait toujours plus d'un thread, définissez son affinité pour limiter le processus à l'exécution de tous ses threads sur un seul cœur.
ta.speot.is
Réponses:
4
Une seule bande de roulement peut être exécutée sur autant de noyaux que vous avez, mais elle sera limitée à un seul noyau en même temps.
Pensez-y comme une conversation téléphonique. Vous n'avez qu'un seul téléphone * 1 et vous devez continuer à parler au téléphone * 2 . Vous avez quatre personnes au bureau, chacune capable de parler * 3 . Rien ne vous empêche de donner le téléphone à une autre personne tout en prenant une pause toilettes.
Notez qu’une seule personne parle au téléphone en même temps .
* 1 Le téléphone est la bande de roulement simple. * 2 Besoin de continuer à parler car il fonctionne sans fin. * 3 Les quatre personnes sont ofc. les quatre noyaux.
Comment les ressources seraient-elles gérées? Est-il nécessaire de transférer le cache L1 sur les cœurs? Pourquoi n'exécute-t-il pas simplement sur un noyau plutôt que sur 2 noyaux (y a-t-il un avantage ... il semble que ce soit tout le contraire imo)?
agz
1) Quelles ressources? Pourriez-vous développer cela pour être un peu plus précis? 2) C'est le planificateur dans le système d'exploitation qui décide sur quel cœur le processus sera exécuté. Ceux-ci essaient généralement de garder le même processus sur le même noyau afin de tirer profit des découvertes en cache et des fonctionnalités potentielles de turbo boost. 3) La cohérence du cache est gérée par la CPU elle-même sur l'architecture x86. Vous n'avez pas précisé que vous utilisiez x86, mais l'image d'un gestionnaire de tâches indique fortement la fenêtre et donc généralement x86.
Hennes
Avez-vous pris cette image de gestionnaire de tâches sur un processeur 2 cœur physique et 4 cœur logique?
Hennes
Il s’agit d’un noyau de 2 quad q9650, de 4 cœurs physiques et de 4 threads
agz
2
Je n'ai pas accès à la source du planificateur de tâches Windows ni à sa logique. Donc, je ne peux pas répondre à cela pour Windows. Le mieux que je puisse faire est de deviner . Par exemple, un pilote qui a une préférence marquée pour le noyau 0 qui a poussé la bande de roulement vers un autre noyau. Mais je répète: Devinez
Hennes
0
Dans votre capture d'écran, je ne vois pas deux, mais quatre threads utilisant 4 cœurs en parfaite harmonie, un couple de cœurs utilisant plus leur processeur que l'autre, mais les hauts et les bas de tous les 4 cœurs sont plus ou moins synchronisés avec le mêmes segments de temps.
Cela ne ressemble pas du tout à un processus à un seul thread, mais plutôt à un processus à 4 threads. Cela nécessite plus d'examen.
L'outil à utiliser est Process Explorer . Après l'avoir lancé, vous pouvez cliquer avec le bouton droit de la souris sur les en-têtes de colonne et sélectionner d'autres colonnes si nécessaire.
Une fois que vous avez localisé le processus qui utilise ces processeurs, vous pouvez double-cliquer dessus et choisir l'onglet Threads pour voir combien de threads il a et ce qu'ils font (quels appels système ils utilisent).
S'il ne s'agit que de svchost.exe, il s'agit d'un service système identifiable. Le plus susceptible d’utiliser énormément le processeur est Windows Search.
Cet affichage dans votre publication vous indique le niveau d'activité de chaque cœur, mais il ne vous dit rien sur les processus / threads exécutés sur quel cœur.
Je soupçonne que lorsque votre programme à thread unique obtient sa "tranche de temps", le système d’exploitation l’exécute sur un noyau la moitié du temps et un autre noyau la moitié du temps. Peut-être qu’il fonctionne même sur les autres noyaux une petite partie du temps également.
En tant que boucle infinie, il utilise pleinement le cœur pendant toute la durée de sa tranche de temps, mais toute incrémentation temporelle de l’activité principale (dans le Gestionnaire des tâches) représentera BEAUCOUP PLUS de la durée de tranches de temps uniques.
Pour plus d'informations sur ce qui se passe, sélectionnez l'onglet Processus du Gestionnaire de tâches. Dans le menu Affichage, cliquez sur Sélectionner les colonnes, puis cochez la colonne "Threads". Puis, dans la colonne Nom de l’image, trouvez votre processus. Confirmez qu'il s'agit d'un seul thread.
Comme je suis assis ici avec pas beaucoup de "charge" sur ma boîte XP, 662 threads sont en cours d'exécution. Mon antivirus exécute 78 threads, Firefox en exécute 45, Dropbox en exécute 33. Winamp ne lit rien du tout pour le moment et il exécute toujours 17 threads. Toute incrémentation dans l'affichage du gestionnaire de tâches aurait pu avoir tous ces threads sur n'importe quel noyau.
Réponses:
Une seule bande de roulement peut être exécutée sur autant de noyaux que vous avez, mais elle sera limitée à un seul noyau en même temps.
Pensez-y comme une conversation téléphonique. Vous n'avez qu'un seul téléphone * 1 et vous devez continuer à parler au téléphone * 2 . Vous avez quatre personnes au bureau, chacune capable de parler * 3 . Rien ne vous empêche de donner le téléphone à une autre personne tout en prenant une pause toilettes.
Notez qu’une seule personne parle au téléphone en même temps .
* 1 Le téléphone est la bande de roulement simple.
* 2 Besoin de continuer à parler car il fonctionne sans fin.
* 3 Les quatre personnes sont ofc. les quatre noyaux.
la source
Dans votre capture d'écran, je ne vois pas deux, mais quatre threads utilisant 4 cœurs en parfaite harmonie, un couple de cœurs utilisant plus leur processeur que l'autre, mais les hauts et les bas de tous les 4 cœurs sont plus ou moins synchronisés avec le mêmes segments de temps.
Cela ne ressemble pas du tout à un processus à un seul thread, mais plutôt à un processus à 4 threads. Cela nécessite plus d'examen.
L'outil à utiliser est Process Explorer . Après l'avoir lancé, vous pouvez cliquer avec le bouton droit de la souris sur les en-têtes de colonne et sélectionner d'autres colonnes si nécessaire.
Une fois que vous avez localisé le processus qui utilise ces processeurs, vous pouvez double-cliquer dessus et choisir l'onglet Threads pour voir combien de threads il a et ce qu'ils font (quels appels système ils utilisent).
S'il ne s'agit que de svchost.exe, il s'agit d'un service système identifiable. Le plus susceptible d’utiliser énormément le processeur est Windows Search.
la source
Cet affichage dans votre publication vous indique le niveau d'activité de chaque cœur, mais il ne vous dit rien sur les processus / threads exécutés sur quel cœur.
Je soupçonne que lorsque votre programme à thread unique obtient sa "tranche de temps", le système d’exploitation l’exécute sur un noyau la moitié du temps et un autre noyau la moitié du temps. Peut-être qu’il fonctionne même sur les autres noyaux une petite partie du temps également.
En tant que boucle infinie, il utilise pleinement le cœur pendant toute la durée de sa tranche de temps, mais toute incrémentation temporelle de l’activité principale (dans le Gestionnaire des tâches) représentera BEAUCOUP PLUS de la durée de tranches de temps uniques.
Pour plus d'informations sur ce qui se passe, sélectionnez l'onglet Processus du Gestionnaire de tâches. Dans le menu Affichage, cliquez sur Sélectionner les colonnes, puis cochez la colonne "Threads". Puis, dans la colonne Nom de l’image, trouvez votre processus. Confirmez qu'il s'agit d'un seul thread.
Comme je suis assis ici avec pas beaucoup de "charge" sur ma boîte XP, 662 threads sont en cours d'exécution. Mon antivirus exécute 78 threads, Firefox en exécute 45, Dropbox en exécute 33. Winamp ne lit rien du tout pour le moment et il exécute toujours 17 threads. Toute incrémentation dans l'affichage du gestionnaire de tâches aurait pu avoir tous ces threads sur n'importe quel noyau.
la source