Ab welcher Datenmenge lohnt es sich, Daten an einen weiteren CPU Kern abzugeben?



  • Wie groß muss ein Array oder eine Map sein, damit es sich lohnt, diese an einen weiteren Thread abzugeben, damit ein weiterer CPU Kern mit dem Array weiterarbeiten kann?

    Immerhin sorgt die Threadverwaltung für einiges an Overhead, bei einem sehr kleinen Array wäre es wahrscheinlich schneller, wenn alles im gleichen Thread bleibt, aber was, wenn man jetzt viele Daten hat?


  • Mod

    Die Frage ist doch leicht zu beantworten: Dann, wenn Verarbeitungszeit > Zeit für Mehraufwand.



  • SeppJ schrieb:

    Die Frage ist doch leicht zu beantworten: Dann, wenn Verarbeitungszeit > Zeit für Mehraufwand.

    Das ist klar, aber ich wollte jetzt eine Angabe in Kilobyte als Richtwert oder eine Angabe der Arraygröße.


  • Mod

    Hackmann schrieb:

    SeppJ schrieb:

    Die Frage ist doch leicht zu beantworten: Dann, wenn Verarbeitungszeit > Zeit für Mehraufwand.

    Das ist klar, aber ich wollte jetzt eine Angabe in Kilobyte als Richtwert oder eine Angabe der Arraygröße.

    Wenn dir das wirklich klar wäre, dann wüsstest du doch, dass solch eine Angabe deswegen vollkommen sinnlos wäre. Wie lange dauert es, eine Zahl von 4096 Bits zu faktorisieren? Wie lange dauert es hingegen, eine Zahl von 4096 Bits zu negieren? Wenn ich nun ein Array mit zwei Zahlen a 4096 Bit habe, lohnt es sich dann, die Arbeit aufzuteilen? Was ist, wenn ich die Programme auf meiner Dual Core Zuse Z1 ausführen möchte? Bekomme ich dann die gleiche Antwort wie für meinen i7-9900?



  • Hackmann schrieb:

    SeppJ schrieb:

    Die Frage ist doch leicht zu beantworten: Dann, wenn Verarbeitungszeit > Zeit für Mehraufwand.

    Das ist klar, aber ich wollte jetzt eine Angabe in Kilobyte als Richtwert oder eine Angabe der Arraygröße.

    Du hast ja schon die perfekte Antwort!

    Die Datenmenge ist i.A. NICHT das vordergründige Problem.

    Parallelverarbeitung lohnt immer dann, wenn die Verarbeitung mit mehreren Kernen deutlich schneller ist als alles von einem machen zu lassen.
    Vorteile bringt das, wenn z.B. komplexe Berechnungen erfolgen müssen, die viel Zeit benötigen.
    Nachteile können entstehen, wenn mehrere Threads synchronisiert werden müssen - z.B. dürfen ev. bestimmte Berechnungen erst erfolgen, wenn andere Berechnungen erledigt sind. Dann warten die Threads "sinnlos" aufeinander und arbeiten NICHT parallel.
    ...

    Gruss
    Frank



  • Es kann auch Probleme geben, wenn die Datenmengen, die von den unterschiedlichen Kernen verarbeitet werden sollen, zu gross sind. Wenn diese Datenmengen naemlich nicht in den Cache passen und zudem relativ unsystematisch auf sie zugegriffen werden muss, kann es schnell sein, dass man einen Flaschenhals durch die begrenzte Anbindung des Arbeitsspeichers erhaelt.


Log in to reply