Question

J'ai lu beaucoup sur ce sujet déjà à la fois ici (par exemple, ou stackoverflow.com/questions/1713554/threads-processes-vs-multithreading-multi-core-multiprocessor-how-they-are multi-CPU, multi-coeur et hyper-fil ) et ailleurs (par exemple, ixbtlabs .com / articles2 / cpu / rmmt-L2- cache.html ou software.intel.com/en-us/articles/multi-core-introduction/), mais je ne suis toujours pas sûr une ou deux choses qui semblent très simples. Donc, je pensais que je venais de demander.

(1) est un processeur à plusieurs noyaux, dans lequel chaque noyau présente cache dédiée efficacement identique à un système multiprocesseur (pondérées bien sûr de la vitesse du processeur, la taille du cache, et ainsi de suite)?

(2) Disons que j'ai quelques images à analyser (à savoir, la vision par ordinateur), et j'ai ces images chargées en RAM. Mon application fraie un fil pour chaque image qui doit être analysé. Est-ce que l'application sur un processeur cache partagé multi-core course plus lente que sur un processeur à plusieurs noyaux cache dédiée, et celui-ci serait initiée à la même vitesse que sur une machine multiprocesseur single-core équivalent?

Merci pour l'aide!

Était-ce utile?

La solution

La taille du cache est important. Pour des raisons de cela, je pars du principe que les processeurs x86 et que l'utilisation du cache L2, qui est partagée sur les processeurs dual core.

Si vous comparez 2 processeurs de noyau unique avec une double processeur de base et les processeurs de noyau unique ont tous deux la même quantité de mémoire cache de données (fonctionnant à la même vitesse), alors vous avez plus de cache, de sorte que plusieurs parties des images peut insérer dans le cache, et il est très probable que si le traitement des données d'image a dû charger et / ou stocker ces données à plusieurs reprises que cela irait plus vite à la même vitesse d'horloge.

Si vous comparez 2 processeurs simple core avec 1 processeur dual core dont le cache des données est deux fois la taille de chaque cache de données de processeur unique, puis environ la moitié du cache de données seront utilisées pour le travail de chaque processeur. Il est probable que quit en plus des données d'image que chaque thread indépendant doit utiliser qu'il y aura des données partagées. Si ces données partagées sont stockées dans les données partagées en cache alors il peut être plus facile à partager entre les deux noyaux que sur le noyau 2xSingle mis en place. Sur la configuration de base 2xSingle pour chaque bloc de données partagées une des caches stockerait et il y aurait un peu de frais généraux lorsque l'autre processeur nécessaire pour utiliser ces données.

machines à double cœur permettent également plus facile pour les fils de migrer d'un noyau à l'autre sur le même module processeur, car le cache du nouveau processeur du thread n'a pas besoin d'être rempli alors que l'autre a des données qu'il n'a pas besoin plus prendre l'espace.

Je vous suggère que ce que vous finissez avec vous expérimenter avec la limitation du nombre de threads à 3 à 10 par cœur à tout moment pour un usage général. Les fils seront tous en concurrence les uns avec les autres pour que l'espace de cache, donc trop grand nombre faire en sorte que toutes les données de 1 fil est poussé avant que le fil est reprogrammé. En outre, si chaque boucle peut fil sur quelques fichiers image que vous gagnez un peu en encourageant l'espace de pile de chaque thread pour rester dans le cache parce que vous avez moins de piles. Vous réduisez également la quantité de mémoire que le système d'exploitation doit utiliser pour suivre les discussions.

Vous êtes plus grande victoire est quand vous pouvez chevaucher le traitement avec accès lent, tel qu'un disque, réseau, ou l'interaction humaine, donc juste fils assez pour garder les unités centrales de traitement est occupé ce dont vous avez besoin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top