 |
| |
|
|
 |
Autor |
Nachricht |
 |
| |
| zarcaphii |
#1| Verfasst am: 02.07.2008, 10:54 Titel: Beste Performance für 1-Thread-Programm (Single-/Multicore?) |
 |
 |
 |
|
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! |
 |
 |
|
|
|
| |
| Daniel |
#2| Verfasst am: 02.07.2008, 10:58 Titel: Re: Beste Performance für 1-Thread-Programm (Single-/Multico |
 |
 |
 |
|
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.
Aber: Viele von uns entwickeln auch kommerziell, so dass dies keine Hürde darstellt. |
 Admin Delphi-PRAXiS
mit Grüßen aus Hamburg |
 |
|
|
|
| |
| zarcaphii |
#3| Verfasst am: 02.07.2008, 11:34 Titel: Re: Beste Performance für 1-Thread-Programm (Single-/Multico |
 |
 |
 |
|
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. |
 |
 |
|
|
|
| |
|
|
| |
| zarcaphii |
#5| Verfasst am: 02.07.2008, 13:46 Titel: Re: Beste Performance für 1-Thread-Programm (Single-/Multico |
 |
 |
 |
|
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? |
 |
 |
|
|
|
| |
| gsh |
#6| Verfasst am: 02.07.2008, 14:01 Titel: Re: Beste Performance für 1-Thread-Programm (Single-/Multico |
 |
 |
 |
|
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 |
 |
|
|
|
| |
| zarcaphii |
#7| Verfasst am: 02.07.2008, 14:04 Titel: Re: Beste Performance für 1-Thread-Programm (Single-/Multico |
 |
 |
 |
|
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) |

Zuletzt bearbeitet von zarcaphii am 03.07.2008, 10:16, insgesamt 2-mal bearbeitet. |
 |
|
|
|
| |
| Phantom1 |
#8| Verfasst am: 03.07.2008, 10:44 Titel: Re: Beste Performance für 1-Thread-Programm (Single-/Multico |
 |
 |
 |
|
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.) |
|
 |
|
|
|
| |
| zarcaphii |
#9| Verfasst am: 03.07.2008, 11:03 Titel: Re: Beste Performance für 1-Thread-Programm (Single-/Multico |
 |
 |
 |
|
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? |
 |
 |
|
|
|
| |
| xZise |
#10| Verfasst am: 03.07.2008, 20:20 Titel: Re: Beste Performance für 1-Thread-Programm (Single-/Multico |
 |
 |
 |
|
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
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 z.B. Wine kompilieren ^^ ~3-4x so schnell wie auf einem Singelcore
MfG
xZise |
 Wer grundlegende Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu gewinnen, verdient weder Freiheit noch Sicherheit. - (fälschlicherweise?) Benjamin Franklin |
 |
|
|
|
 |
|
 |
| |
|
|
| |
 
|
|
| |
|
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.
|
|
 |