2010-08-23 4 views
10

Je suis en train de jouer un peu avec mon programme (en essayant de multicore plusieurs parties) et j'ai remarqué que l '"historique du CPU" est un peu différent. début. 2 à 4 travailleurs semblent produire un flux de travail «stable», cependant, attacher 5-8 travailleurs produit un comportement erratique (de zéro à max, voir les images). Je devrais souligner que toutes les exécutions ont commencé avec la capacité maximum «lisse» (par exemple 2 noyaux avec seulement 25%), et ont commencé à montrer le comportement erratique seulement après une minute ou ainsi. Que se passe-t-il? J'ai 4 processeur principal, et pensez-vous que ce comportement peut être lié à ce fait?comportement différent lors de l'utilisation d'un nombre différent de travailleurs de la multi-diffusion

J'espère que vous pouvez voir les photos.

2 travailleurs 2 workers

3 travailleurs 3 workers

4 travailleurs 4 workers

5 travailleurs 5 workers

6 travailleurs

6 workers

7 travailleurs 7 workers

8 travailleurs 8 workers

+2

Utilisez-vous le paquet 'multicore' ou' doSMP'? Est-ce sur Windows 7? – Shane

+0

quel est le but de vos travailleurs? sont-ils complètement indépendants l'un de l'autre? peut-être que vos travailleurs souffrent de la famine. –

+0

Y a-t-il une question ici? Si oui, qu'est-ce que c'est? –

Répondre

11

Ce comportement est classique sur un quad-core avec hyperthreading. R ne gagne pas avec l'hyperthreading, car il utilise souvent le noyau complet pour les calculs. Ainsi, si un processeur physique en fait deux logiques, le processeur doit basculer continuellement entre les deux threads, ce qui explique les motifs.

Pour R, j'ai mis l'hyperthreading sur mon ordinateur. Cela n'aide pas, au contraire. Lorsque vous travaillez avec un seul thread comme le fait normalement R, vous perdez de la capacité (max 12,5% au lieu de 25%).

+1

Rappelez-vous également que par défaut, un processus n'est pas lié à un noyau mais saute entre les cœurs tout le temps. Ceci explique pourquoi vous voyez l'effet que vous remarquez augmenter progressivement au lieu d'être évident sur 2 noyaux logiques au moment où vous avez plus de 4 travailleurs. Il explique également les graphiques épineux que vous avez inévitablement sur une machine multicœur. –

+0

Je n'achète pas cette explication. Un programme bien écrit lié aux processeurs peut faire un meilleur usage des processeurs. –

+0

@David: qu'est-ce que vous n'achetez pas? Le fait que si vous avez seulement 4 cœurs physiques et 8 cœurs logiques, le processeur doit basculer entre deux threads? Comment pouvez-vous mettre 2 threads sur un seul noyau? Simultanément? Ou le fait que, à moins que vous ne liez spécifiquement un processus à un cœur, le processus lui-même change de cœur chaque fois que cela semble possible? –

Questions connexes