Delphi-PRAXiS :: Das Forum für Fragen zu Delphi
Das Experten Forum für Delphi Programmierer
Hilfe für Borland Delphi gibts es hier im Forum
Delphi Quelltexte und Source Codes
 
Delphi-PRAXiS :: Foren-ÜbersichtForen-Übersicht Delphi-PRAXiS Modul-ÜbersichtSite-Map Delphi-PRAXiS durchsuchenSuchen Delphi-PRAXiS Code-LibraryCode-Library Jetzt registrieren!Registrieren Login  
   
 
0
 
Beste Performance für 1-Thread-Programm (Single-/Multicore?)
Ein Thema von zarcaphii.

Vorheriges Thema anzeigen  |  Nächstes Thema anzeigen
Neuen Beitrag schreiben Auf Beitrag antworten
als PDF-Datei herunterladenThema ausdrucken
 
Delphi-PRAXiS Forum - Übersicht -> Klatsch und Tratsch
Seite 1 von 1   [ 10 Beiträge ]  
 
 Autor 
 Nachricht 
 
zarcaphii #1|Beitrag #911285Verfasst am: 02.07.2008, 10:54      Titel: Beste Performance für 1-Thread-Programm (Single-/Multicore?) Antworten mit Zitat
Mitglied
Status: offline
Beiträge: 11
angemeldet: 07.06.2008
Turbo Delphi für Win32

Hallo liebe DP,

zuerst einmal ein wichtiger Hinweis:
Meine Frage stelle ich im Interesse einer Firma, die mich einschl. dieser Woche beschäftigt. Es könnte also sein, dass aus von euch gemachten Vorschlägen ein finanzieller Vorteil für diese Firma entsteht. Falls ihr dies ablehnt, so antwortet bitte nicht!

Es geht hierbei um die Konfiguration von Hard- und Software, nicht um die Programmierung.



So, nun zur Sache:
Da ich zur Zeit zwischen Schule und Studium stehe, habe ich mir einen kleinen Job für einige Wochen gesucht und gefunden. In der Firma geht es im 3D-Scans von Gegenständen. Ich habe dazu 2 Scanner an 2 völlig getrennten PCs. Beide PCs sind mit je einem Intel Dualcore (E6600/E6750) bestückt.

Die Software, mit der die Scans berechnet werden, nutzt allerdings immer höchstens 50% der CPU, also immer nur einen der beiden Kerne. Vermutlich wird also nur ein Thread genutzt. Es handelt sich um sehr rechenintensive Aufgaben, beispielsweise muss aus den 30-40 Bildern eine Punktewolke berechnet und eine geglättete Oberfläche daraus gemacht werden. Diese und weitere Probleme (z.B. ist es nicht zu vermeiden, dass sich die Gegenstände gelegentlich 1-2mm bewegen) sind in der Software bereits gelöst, allerdings ist zur Ausführung eben einiges an Rechenzeit nötig.

Ziel ist es, die Dauer der Scans so weit wie möglich zu reduzieren. Meine erste Idee dazu war, dass hier z.B. 1 mal 3,8 GHz schneller wären als 2 mal 2,4 GHz (RAM, FSB, etc. müssen natürlich auch stimmen). Grundsätzlich halte ich diese Annahme weiterhin für richtig, ABER:

Wenn nur ein Kern zur Verfügung steht, müssen ja auch alle anderen Prozesse inkl. OS (hier btw. WinXP) diesen nutzen. Damit würde wieder ein Teil der Leistung entfallen. Man könnte also die Prozesspriorität erhöhen, um diesen Zeitverlust einzugrenzen, aber so wird anderen Prozessen die Rechenzeit geklaut und spätestens bei REALTIME/CRITICAL_PRIORITY_CLASS kann es dann soweit ich weiß echte Probleme geben.

Was wäre also die beste Lösung? Die nächste Generation von Prozessoren wird mit 2 oder mehr 3,xx GHz Kernen ausgestattet sein. Mir erscheint folgende Kombination daher sinnvoll:

Als Hardware einen möglichst schnellen, mehrkernigen Prozessor, der vielleicht auch noch übertaktet werden könnte. Die Prozesspriorität mindestens auf ABOVE_NORMAL_PRIORITY_CLASS setzen, um dem Scanprogramm möglichst viel Rechenzeit zukommen zu lassen.

Ich habe hier eine Referenzobjekt, mit dem die Scanner getestet und kalibiriert werden können, ich habe einen Genauigkeitstest auf beiden PCs laufen lassen und zudem die Prioritäten verändert. Hier mal meine Ergebnisse:
  • E6600 / Normal: 157 Sekunden
  • E6750 / Normal: 133 Sekunden
  • E6750 / Above Normal: 115 Sekunden
  • E6750 / High: 112 Sekunden
  • E6750 / Realtime: 108 Sekunden

Ich werde der Firma natürlich nicht dazu raten die Priorität auf Realtime zu setzen. Ich denke aber, dass ein Programm, das offensichtlich nur einen Thread nutzt, auf einem DualCore durchaus mit der Prioritätenklasse High laufen kann, ohne große Probleme zu verursachen.

Wie seht ihr das? Gibt es da eurer Meinung nach noch Probleme?
Würdet ihr die Sache vielleicht ganz anders angehen?

Ich hoffe auf eure Vorschläge!

Bouncing 1 Bouncing 2 Bouncing 4 Bouncing 2 Bouncing 1
nach oben nach unten
Benutzer-Profile anzeigen Private Nachricht senden
Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen im Forum zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Google zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Wikipedia zu suchen.
 
 
Daniel #2|Beitrag #911286Verfasst am: 02.07.2008, 10:58      Titel: Re: Beste Performance für 1-Thread-Programm (Single-/Multico Antworten mit Zitat
Desperate House Elf
Alter: 29+
Status: offline
Beiträge: 8.684
angemeldet: 30.05.2002
Wohnort: Hamburg
Delphi 2007 Enterprise

zarcaphii hat folgendes geschrieben:
zuerst einmal ein wichtiger Hinweis
[...]


Es ist umsichtig von Dir, dass Du darauf hinweist, danke dafür. Smile
Aber: Viele von uns entwickeln auch kommerziell, so dass dies keine Hürde darstellt. Coder

Admin Delphi-PRAXiS
mit Grüßen aus Hamburg
nach oben nach unten
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen im Forum zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Google zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Wikipedia zu suchen.
 
 
zarcaphii #3|Beitrag #911314Verfasst am: 02.07.2008, 11:34      Titel: Re: Beste Performance für 1-Thread-Programm (Single-/Multico Antworten mit Zitat
Mitglied
Status: offline
Beiträge: 11
angemeldet: 07.06.2008
Turbo Delphi für Win32

Ist mir ja bekannt, nur sollte man IMHO auf soetwas hinweisen, vor allem, wenn man das forum (wie ich sonst) nur privat nutzt.

Bouncing 1 Bouncing 2 Bouncing 4 Bouncing 2 Bouncing 1
nach oben nach unten
Benutzer-Profile anzeigen Private Nachricht senden
Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen im Forum zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Google zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Wikipedia zu suchen.
 
 
shmia #4|Beitrag #911366Verfasst am: 02.07.2008, 13:30      Titel: Re: Beste Performance für 1-Thread-Programm (Single-/Multico Antworten mit Zitat
Mitglied
Status: offline
Beiträge: 3.965
angemeldet: 02.03.2004
Delphi 5 Professional

Schau mal hier: http://www.delphipraxis.net/topic1345 ... t+verteilen+in+multikerncpus.html
Wenn es gelingt, die Berechnungen auf mehrere Thread aufzuteilen sollte der Zeitbedarf minimiert werden können.
Optimal wäre es, wenn man die Arbeit in viele kleine unabhängige Teilaufgaben zerlegt.
Bei 4 CPU-Kernen hat man dann 4 Threads ablaufen, die immer wieder neue Teilaufgaben (Jobs) bearbeiten.
So erreicht man "Vollbeschäftigung".
http://www.delphipraxis.net/topic1119 ... ad+der+diener+im+hintergrund.html
nach oben nach unten
Benutzer-Profile anzeigen Private Nachricht senden
Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen im Forum zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Google zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Wikipedia zu suchen.
 
 
zarcaphii #5|Beitrag #911374Verfasst am: 02.07.2008, 13:46      Titel: Re: Beste Performance für 1-Thread-Programm (Single-/Multico Antworten mit Zitat
Mitglied
Status: offline
Beiträge: 11
angemeldet: 07.06.2008
Turbo Delphi für Win32

Ja, und genau da liegt ja das Problem. Das die Software arbeitet nunmal mit genau einem Thread. Daher muss ich jetzt daraus das Beste machen.
Hätte ich eine Möglichkeit da etwas zu verändern, so hätte ich sie schon genutzt.

Was haltet ihr denn von meinem bisherigen Gedankengang?

Bouncing 1 Bouncing 2 Bouncing 4 Bouncing 2 Bouncing 1
nach oben nach unten
Benutzer-Profile anzeigen Private Nachricht senden
Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen im Forum zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Google zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Wikipedia zu suchen.
 
 
gsh #6|Beitrag #911382Verfasst am: 02.07.2008, 14:01      Titel: Re: Beste Performance für 1-Thread-Programm (Single-/Multico Antworten mit Zitat
aktives Mitglied
Alter: 20
Status: offline
Beiträge: 1.205
angemeldet: 24.10.2004
Delphi 2006 Professional

hmm also wenn du nichts veränderen kannst dann würde ich auch einen möglichst schnellen dual core verwenden. (am besten mit 45nm technologie)
Am besten du gibst diesem Prozess dann einen Kern und jeden anderen prozess den anderen Kern. Somit wird dieser nicht gestört und muss auch nicht die ganze zeit hin und her geswitcht werden.

"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
nach oben nach unten
Benutzer-Profile anzeigen Private Nachricht senden
Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen im Forum zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Google zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Wikipedia zu suchen.
 
 
zarcaphii #7|Beitrag #911383Verfasst am: 02.07.2008, 14:04      Titel: Re: Beste Performance für 1-Thread-Programm (Single-/Multico Antworten mit Zitat
Mitglied
Status: offline
Beiträge: 11
angemeldet: 07.06.2008
Turbo Delphi für Win32

Hm, wie kann ich das Programm denn einem bestimmten Kern zuweisen? An den Code komme ich ja nicht ran.

Könnte man das Programm dann wirklich auf dem Kern durchlaufen lassen, oder fallen trotzdem noch die üblichen Arbeiten wie z.B. das Sichern und Zurückladen der Register etc. an?


Edit: Habe noch rausgefunden, dass man die Prozessorkerne, auf denen ein Programm laufen soll, im Taskmanager einstellen kann. Ich kann dort also ohne Probleme einstellen, dass mein Programm z.B. nur auf CPU0 laufen soll.
Leider muss man dann von Hand bei allen anderen Prozessen einzeln den anderen Kern einstellen. Das kostet leider zu viel Zeit.

Daher habe ich 2 weiterführende Fragen:
1.) Gibt es Möglichkeiten den Kern für mehrere/alle Prozesse auf einmal zu setzen?
2.) Wenn alle Prozesse bis auf mein Scanprogramm z.B. auf CPU1 laufen, sollte ich dann das Scanprogramm wirklich nur auf CPU0 stellen oder kann ich dort beide CPUs selektieren? Es ist möglich, das kleinere Aufgaben vllt. doch in Threads geregelt werden. Die Rechinintensive Aufgabe wird allerdings in nur einem Thread bearbeitet. Wenn ich also für meinen Scanner beide CPUs aktiv lasse, dann könnten die kleinen Aufgaben auf dem einen, und die große Aufgabe auf dem anderen Kern laufen.


Edit2:
Ich habe noch einige Informationen zu der Scan- und Berechnungsmethode gefunden.
Hier mal ein paar Links:
Die Technik allgemein (farbcodierte Triangulation, bei Siemens)
Das von mir verwendete Gerät (iScan, von Siemens)
Die Berechnungsgrundlage (Triangulation bei Wikipedia)

Bouncing 1 Bouncing 2 Bouncing 4 Bouncing 2 Bouncing 1

 Zuletzt bearbeitet von zarcaphii am 03.07.2008, 10:16, insgesamt 2-mal bearbeitet.
nach oben nach unten
Benutzer-Profile anzeigen Private Nachricht senden
Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen im Forum zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Google zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Wikipedia zu suchen.
 
 
Phantom1 #8|Beitrag #911748Verfasst am: 03.07.2008, 10:44      Titel: Re: Beste Performance für 1-Thread-Programm (Single-/Multico Antworten mit Zitat
aktives Mitglied
Alter: 27
Beiträge: 262
angemeldet: 20.06.2003
Delphi 7 Enterprise

zarcaphii hat folgendes geschrieben:

1.) Gibt es Möglichkeiten den Kern für mehrere/alle Prozesse auf einmal zu setzen?

ist mir nicht bekannt, aber das freeware programm "EasyToolz" kann das (stammt von mir), man kann dort angeben das ein programm auf einem bestimmten Kern laufen soll und die restlichen programme werden automatisch auf die restlichen Kerne verteilt. (Hinweis: easytoolz funktioniert nocht nicht mit 64bit programmen unter einem 64bit OS.)
nach oben nach unten
Benutzer-Profile anzeigen Private Nachricht senden
Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen im Forum zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Google zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Wikipedia zu suchen.
 
 
zarcaphii #9|Beitrag #911754Verfasst am: 03.07.2008, 11:03      Titel: Re: Beste Performance für 1-Thread-Programm (Single-/Multico Antworten mit Zitat
Mitglied
Status: offline
Beiträge: 11
angemeldet: 07.06.2008
Turbo Delphi für Win32

Es wäre wohl einen Versuch wert, sobald ich dazu komme. Vielen Dank für das Programm.

Ich habe gestern allerdings schonmal probiert, alle Prozesse im Taskmanager auf CPU0 zu legen und nur mein Scanprogramm auf CPU1 laufen zu lassen. Außerdem habe ich es auch noch auf beiden CPUs versucht, also alle proggis auf 0, Scanprogramm auf 0 und 1.

Beides hat leider keinen erkennbaren Vorteil gebracht. Ich gehe daher erstmal davon aus, dass eine möglichst schnelles System (eventuell übertaktet) und eine hohe Prozesspriorität das Verfahren am wirksamsten beschleunigen. Ich werde dein Programm aber noch testen.

Gibt es sonst vielleicht noch Ideen, von denen bis jetzt garkeine Rede war?

Bouncing 1 Bouncing 2 Bouncing 4 Bouncing 2 Bouncing 1
nach oben nach unten
Benutzer-Profile anzeigen Private Nachricht senden
Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen im Forum zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Google zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Wikipedia zu suchen.
 
 
xZise #10|Beitrag #911970Verfasst am: 03.07.2008, 20:20      Titel: Re: Beste Performance für 1-Thread-Programm (Single-/Multico Antworten mit Zitat
sehr aktives Mitglied
Alter: 18
Status: offline
Beiträge: 3.090
angemeldet: 03.03.2006
Wohnort: Bad Schwartau
Turbo Delphi für Win32

Also wenn du am Programm nichts ändern kannst, dann kannt du eben nur auf Hardwareebene ändern. Nagut... du kannst auch den Programmen verschiedene Cores zuweisen, aber SO viel bringt das nichts.

Auch hängt es davon ab, ob das SEHR CPU-lastig ist Razz

Ich würde vielleicht den Hersteller kontaktieren, und fragen wie das mit Mehrkernsystemen aussieht. Möglicherweise lässt sich das auch nicht parallelisieren.

Aber ansonsten sind MultiCores und den Programmen dazu SEHR heftig Razz z.B. Wine kompilieren ^^ ~3-4x so schnell wie auf einem Singelcore Razz

MfG
xZise

Wer grundlegende Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu gewinnen, verdient weder Freiheit noch Sicherheit. - (fälschlicherweise?) Benjamin Franklin
nach oben nach unten
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen im Forum zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Google zu suchen. Markiere Begriffe im Text und klicke auf diesen Button, um nach zusätzlichen Informationen bei Wikipedia zu suchen.
 
Anzeige-Optionen:    
 
Delphi-PRAXiS Forum - Übersicht -> Klatsch und Tratsch Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1   [ 10 Beiträge ]  
 
  Neuen Beitrag schreiben Auf Beitrag antworten
als PDF-Datei herunterladenThema ausdrucken
 
   
Gehe zu:  
Du darfst keine Beiträge in dieses Forum schreiben.
Du darfst auf Beiträge in diesem Forum nicht antworten.
Du darfst Deine Beiträge in diesem Forum nicht bearbeiten.
Du darfst Deine Beiträge in diesem Forum nicht löschen.
Du darfst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten.
Du kannst Dateien in diesem Forum nicht herunterladen.


Impressum / Kontakt
Allgemeine Geschäftsbedingungen
Verhaltenskodex & FAQ

Delphi-PRAXiS :: Das Forum für Delphi-Programmierer
Das Experten Forum für Delphi ProgrammiererHilfe für Borland Delphi gibts es hier im ForumDelphi Quelltexte und Source CodesDelphi-PRAXiS :: Das Forum für DelphiWindows APIInternet und NetzwerkeVCL und Datenbanken
 

Delphi-PRAXiS V.2005 III
© 2002-2008 by Daniel R. Wolf
powered by phpBB © phpBB Group

Impressum / Kontakt Allgemeine Geschäftsbedingungen