Themabewertung:
- 0 Bewertung(en) - 0 im Durchschnitt
- 1
- 2
- 3
- 4
- 5
Dualcoreoptimierung eines Programms
|
Alex
Registriert seit 17.04.06
Beiträge: 6.619
Registriert seit: Jul 2008
|
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]
|
|
21.03.2009 07:59 |
|
Benjamin92
tauscht CMOS-Batterie per TeamViewer
Beiträge: 7.787
Registriert seit: Jul 2008
|
Dualcoreoptimierung eines Programms
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?
|
|
21.03.2009 08:37 |
|
CHRiSNEW
Internetblasensammler
Beiträge: 2.860
Registriert seit: Jul 2008
|
Dualcoreoptimierung eines Programms
Benjamin92 schrieb: 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.
|
|
21.03.2009 09:24 |
|
friedrichheinze
...und Kondensatoren.
Beiträge: 2.838
Registriert seit: Jul 2008
|
Dualcoreoptimierung eines Programms
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
|
|
21.03.2009 12:40 |
|
oreissig
Maître Modérateur
Beiträge: 11.991
Registriert seit: Jul 2008
|
Dualcoreoptimierung eines Programms
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
|
|
21.03.2009 15:32 |
|
pETe!
*
Beiträge: 911
Registriert seit: Jul 2008
|
Dualcoreoptimierung eines Programms
friedrichheinze schrieb: 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...
|
|
29.03.2009 00:55 |
|
oreissig
Maître Modérateur
Beiträge: 11.991
Registriert seit: Jul 2008
|
Dualcoreoptimierung eines Programms
pETe! schrieb: 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
|
|
29.03.2009 01:42 |
|
Benutzer, die gerade dieses Thema anschauen: 3 Gast/Gäste