Dualcoreoptimierung eines Programms

  • Du kannst n Threads laufen lassen (n = Zahl der Cores) und die Arbeit entsprechend aufteilen

    CoreA rechnet Primzahlen von 1 bis 100.000
    Core B dann von 100.001 bis 200.000
    Core C 200.001 .... usw

    Desktop: AMD FX-6200 @ 6 x 4,3 GHz | 32 GB DDR3 | Intel Arc A380 | SSD: 1 TB @ M.2 to PCIe Adapter + UEFI NVMe Driver Injection | HDD: 15 TB | Win 11 Pro | Dual Monitor 2 x 27"
    Notebook: Lenovo ThinkPad T420 | i5 2520M | 16 GB DDR3 | SSD: 250 GB | USB 3.0 | 300 MBit WWAN @ D1 | AC WLAN | BT 4.0 | 2 x 70++ | 1 x 27++ Slice | Win 11 Pro | FHD Display Mod
    Internetleitung: Telekom | FTTH | D: 500 MBit / U: 200 MBit | Telekom Glasfasermodem | AVM Fritz!Box 7490
    Räder: [Daily: Stevens E-Triton 2016] [Cyclocross: Stevens Prestige 2019] [Cargobike: Urban Arrow Cargo XL 2023]

  • Das habe ich jetzt so realisiert, dass ich zweimal das Programm ausführe und in dass eine dann sage, 1 bis 100000 im zweiten 100001 bis 200000. Kann man das irgendwie Programmtechnisch automatisieren, dass er es automatisch aufteilt. Klar jetzt hab ich 100% Auslastung. Werde jetzt noch probieren, ein drittes Programm starten. Dann müssten die anderen zwei langsamer werden. Oder stürtzt dann der PC ab?

  • Zitat von Benjamin92

    Das habe ich jetzt so realisiert, dass ich zweimal das Programm ausführe und in dass eine dann sage, 1 bis 100000 im zweiten 100001 bis 200000. Kann man das irgendwie Programmtechnisch automatisieren, dass er es automatisch aufteilt. Klar jetzt hab ich 100% Auslastung. Werde jetzt noch probieren, ein drittes Programm starten. Dann müssten die anderen zwei langsamer werden. Oder stürtzt dann der PC ab?


    Kannst tausende Threads erstellen. Das OS verteilt die Threads selbst auf die zu verfügungstehenden Prozessoren/Kerne.
    Aber das mit den großen Bereichen über Threads rechnen ist nicht ganz so performant. Ich hatte das mal mit pthreads getestet und irgendwie gab's nur ein Chaos. Vielleicht hatte ich es auch falsch implementiert und keine guten Tricks angewandt.

  • Zwei Threads langen aber auch. Tausende Threads belasten nur den Scheduler unnötig.

    Wie das ganze in C geht, davon habe ich allerdings (vor allem unter Windows) keine Ahnung. In Java geht's einfacher aber da kriegst du noch andere Performanceprobleme ;)

  • wenn dus in Threads aufteilst, macht das OS den rest für dich automatisch
    leider liegt die schwerste Aufgabe immernoch bei dir, nämlich das sinnvoll in 2 Threads aufteilen

    wie machst du das mit den Primzahlen? teilst du für jede Zahl durch alle die kleiner sind?
    das geht viel besser, z.B. mit dem Sieb des Eratosthenes, das setzt aber voraus, dass du alle Zahlen vorher schon geprüft hast, da kannst du nichtmehr einfach einen kern die eine Hälfte und den anderen die andere Hälfte berechnen lassen

  • Zitat von friedrichheinze

    Zwei Threads langen aber auch. Tausende Threads belasten nur den Scheduler unnötig.

    Wie das ganze in C geht, davon habe ich allerdings (vor allem unter Windows) keine Ahnung. In Java geht's einfacher aber da kriegst du noch andere Performanceprobleme ;)

    Umschalten zwischen zwei Threads sind höchstens wenige Hundert Takte... Kann man also vernachlässigen...

  • Zitat von pETe!

    Umschalten zwischen zwei Threads sind höchstens wenige Hundert Takte... Kann man also vernachlässigen...

    das kommt schon auch drauf an, ob Threadscheduling im Userland oder im Kernel passiert, bei Kernelthreads muss da schon weitaus mehr passieren
    allerdings sollte es wohl kein Problem sein die Anzahl der Prozessoren abzufragen und das Problem dann halt in x Threads zu unterteilen

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!