Neue Antwort schreiben 
 
Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Dualcoreoptimierung eines Programms
Benjamin92 Offline
tauscht CMOS-Batterie per TeamViewer

Beiträge: 7.787
Registriert seit: Jul 2008
Beitrag #1
Dualcoreoptimierung eines Programms
Ich habe ein Programm gecodet, welches alle Primzahlen in einem bestimmten Bereich ausgibt. Was muss ich machen, damit beide CPU-Kerne vollständig ausgelastet werden? Habe im Anhang eine ZIP-Datei mit Quellcode, Codeblocks-Projekt und .exe Datei. Danke für eure Hilfe.


Angehängte Datei(en)
.zip  Primzahlen.zip (Größe: 9,93 KB / Downloads: 8)
21.03.2009 07:57
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Alex Offline
Registriert seit 17.04.06

Beiträge: 6.619
Registriert seit: Jul 2008
Beitrag #2
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
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Benjamin92 Offline
tauscht CMOS-Batterie per TeamViewer

Beiträge: 7.787
Registriert seit: Jul 2008
Beitrag #3
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
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
CHRiSNEW Offline
Internetblasensammler

Beiträge: 2.860
Registriert seit: Jul 2008
Beitrag #4
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
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
friedrichheinze Offline
...und Kondensatoren.

Beiträge: 2.838
Registriert seit: Jul 2008
Beitrag #5
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
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
oreissig Offline
Maître Modérateur

Beiträge: 11.991
Registriert seit: Jul 2008
Beitrag #6
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
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
pETe! Offline
*

Beiträge: 911
Registriert seit: Jul 2008
Beitrag #7
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
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
oreissig Offline
Maître Modérateur

Beiträge: 11.991
Registriert seit: Jul 2008
Beitrag #8
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
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Neue Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 6 Gast/Gäste