Frage

habe ich schon beide hier viel zu diesem Thema lesen (zB stackoverflow.com/questions/1713554/threads-processes-vs-multithreading-multi-core-multiprocessor-how-they-are oder multi-CPU, Multi-Core und Hyper-Thread ) und an anderer Stelle (zB ixbtlabs .com / die Artikel 2 / cpu / rmmt-l2-cache.html oder software.intel.com/en-us/articles/multi-core-introduction/), aber ich bin immer noch nicht sicher über ein paar Dinge, die sehr einfach zu sein scheinen. Also ich dachte, ich würde einfach fragen.

(1) Ist ein Multi-Core-Prozessor, in dem jeder Kern dedizierten Cache effektiv das gleiche wie ein Multiprozessorsystem (bilanzierte natürlich für die Prozessorgeschwindigkeit, Cache-Größe usw.)?

(2) Lassen Sie uns sagen, dass ich ein paar Bilder haben zu analysieren (das heißt, Computer Vision), und ich habe diese Bilder in den Arbeitsspeicher geladen. Meine app erzeugt einen Thread für jedes Bild, das analysiert werden muss. Werde diese App auf einem gemeinsam genutzten Cache-Multi-Core-Prozessor läuft langsamer als auf einem dedizierten Cache-Multi-Core-Prozessor, und würden diese laufen mit der gleichen Geschwindigkeit wie auf einer äquivalenten Single-Core-Multi-Prozessor-Maschine?

Vielen Dank für die Hilfe!

War es hilfreich?

Lösung

Die Größe des Cache ist wichtig. Aus Gründen der dieses Ich gehe davon aus x86-Prozessoren und nur den L2-Cache, die auf Dual-Core-Prozessoren gemeinsam genutzt wird.

Wenn Sie 2 Einzelkernprozessoren mit 1 Doppelkern-Prozessor vergleichen und die einzelnen Kernprozessoren haben beide die gleiche Menge an Daten-Cache (mit der gleichen Geschwindigkeit läuft), dann hat man mehr Cache, so dass mehr Teile der Bilder können passe in dem Cache, und es ist sehr wahrscheinlich, dass, wenn die Verarbeitung der Bilddaten hat zu laden und / oder zu speichern, um diese Daten immer wieder, dass diese schneller auf den gleichen Taktraten gehen würde.

Wenn Sie vergleichen 2 Single-Core-Prozessoren mit 1 Dual-Core-Prozessor, deren Daten-Cache ist zweimal die Größe jeden einzelnen Datencache des Core-Prozessors, dann etwa die Hälfte des Daten-Cache für jeden zu Prozessor verwendet werden. Es ist wahrscheinlich verlassen, dass zusätzlich zu den Bilddaten, dass jeder unabhängig Thread verwenden hat, dass es einige gemeinsam genutzte Daten sein. Wenn diese gemeinsam genutzte Daten in den gemeinsam genutzten Daten gespeichert werden, um Cache dann kann es sich leicht zwischen den beiden Kernen gemeinsam genutzt als auf dem 2xsingle Kern aufgebaut. Auf dem 2xsingle Kern-Setup für jeden Chunk gemeinsam genutzter Daten einer des Caches wäre es zu speichern und es würde ein wenig Overhead sein, wenn der andere Prozessor die Daten zu verwenden, benötigt werden.

Dual-Core-Maschinen machen es auch einfacher für Fäden von einem Kern zu einem anderen auf dem gleichen Prozessormodul, da der Cache des Threads neuen Prozessor migriert nicht gefüllt werden müssen, während die anderen Daten hat, dass es nicht notwendig mehr Raum einnimmt.

Ich würde vorschlagen, dass, was auch immer Sie am Ende mit, dass Sie experimentieren mit der Anzahl der Threads auf 3 bis 10 zu begrenzen pro Kern jederzeit für den allgemeinen Gebrauch. Die Fäden werden alle miteinander für diesen Cache-Raum konkurrieren, so wird es zu viele so machen, dass alle Daten von 1 Faden herausgedrückt wird, bevor das Gewinde neu geplant wird. Auch wenn jeder Thread kann Schleife über ein paar Bilddateien, die Sie ein wenig gewinnen, indem jeden Thread Stapelspeicher ermutigend im Cache zu bleiben, weil Sie wenige Stapel haben. Sie kann auch die Größe des Speichers reduzieren, dass das Betriebssystem mit einem Gewinde zu halten bis verwenden hat.

Sie sind größte Gewinn ist, wenn Sie mit langsamem Zugriff Verarbeitung überlappen können, wie Disk, Netzwerk oder menschliche Interaktion, so gerade genug Threads die CPUs beschäftigt Verarbeitung zu halten ist, was Sie brauchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top