Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi SetProcessAffinityMask und das DEC (https://www.delphipraxis.net/160743-setprocessaffinitymask-und-das-dec.html)

ringli 29. Mai 2011 16:53

SetProcessAffinityMask und das DEC
 
Im Moment bin ich dabei mir ein Tool zur Prüfsummenberechnung mithilfe des DEC zu erstellen. Nun kann die Berechnung der Prüfsumme bei größeren Dateien ja recht lange dauern. Jetzt hatte ich die Idee meiner Anwendung mithilfe von
Delphi-Quellcode:
SetProcessAffinityMask
meherere Prozessoren für die Dauer der Berechnung zuzuweisen um die Berechnung zu beschleunigen. Die Berechnung der Prüfsumme selber läuft über die Funktion
Delphi-Quellcode:
THash_MD5.CalcFile
aus dem DEC.

Jetzt meine Frage: Funktioniert das so wie ich es mir vorstelle oder wird das doch komplizierter zu implementieren?

Bevor jetzt einer fragt warum ich das nicht selber ausprobiere: Zur Zeit besitze ich noch keinen PC mit mehreren Prozessoren und kann es deswegen nicht ausprobieren.

himitsu 29. Mai 2011 17:11

AW: SetProcessAffinityMask und das DEC
 
Nein, natürlich bringt das rein garnichts, denn wenn der Prozess nur mit einem Thread rechnet, dann ist es gégal, wieviele ääthreads man zuweist.
Es wird immer nur der eine Thread rechnen und das eben nur auf einem Kern.

PS: Windows kümmert sich selber um die Threadverteilung, da mu´man nix zuweisen,
es sei denn man will, daß da Programm nur auf bestimmten kernen läuft, oder daß eine Multithreadanwendung dennoch nur auf einer CPU läuft.

Ein Bauarbeiter braucht 1 Tag, um 10 Löscher auszubaggern, wenn er einen Bagger hat.
Wieviel Zeit braucht dieser Bauarbeiter, wenn man ihm 4 Bagger hinstellt?
Bauarbeiter = Thread
Bagger = verfügbare Kerne (CPU)

ringli 29. Mai 2011 17:17

AW: SetProcessAffinityMask und das DEC
 
Ok, das habe ich verstanden. Gibt es denn eine Möglichkeit die Berechnung auf mehrere Threads aufzuteilen?

himitsu 29. Mai 2011 17:31

AW: SetProcessAffinityMask und das DEC
 
theoretisch ja, indem man die berechnung aufteilt.
> mehrere stücke der Datei gleichzeitig berechnen und am Ende die Einzelergebnisse zusammenzurechnen,

Aber lohnt sich nicht wirklich, da der Dateizugriff eher die bremsende Kraft ist.
Und mehrer gleichzeitige Dateizugriffe behindern sich auch noch gegenseitig, was es am Ende noch langsamer macht.

Was man machen kann, kleinere Dateistücke asynchron einlesen, wärend ein anderer Teil grade gehasht wird, aber wenn das Hashen sehr schnell ist, dann lohnt sich der Aufwand nicht wirklich.

Amateurprofi 30. Mai 2011 08:04

AW: SetProcessAffinityMask und das DEC
 
Zitat:

Zitat von himitsu (Beitrag 1103560)
Nein, natürlich bringt das rein garnichts, denn wenn der Prozess nur mit einem Thread rechnet, dann ist es gégal, wieviele ääthreads man zuweist.
Es wird immer nur der eine Thread rechnen und das eben nur auf einem Kern.

PS: Windows kümmert sich selber um die Threadverteilung, da mu´man nix zuweisen,
es sei denn man will, daß da Programm nur auf bestimmten kernen läuft, oder daß eine Multithreadanwendung dennoch nur auf einer CPU läuft.

Ein Bauarbeiter braucht 1 Tag, um 10 Löscher auszubaggern, wenn er einen Bagger hat.
Wieviel Zeit braucht dieser Bauarbeiter, wenn man ihm 4 Bagger hinstellt?
Bauarbeiter = Thread
Bagger = verfügbare Kerne (CPU)

Hallo himitsu,
das hängt davon ab, ob die 4 Bagger ferngesteuert werden können und wie gut der Bauarbeiter mit der Fernsteuerung umgehen kann.
Wenn "der Bauarbeiter" eine Bauarbeiterin ist dann hat sie gute Chancen, mit 4 Baggern schneller zu sein, als mit einem Bagger, denn Frauen sind bekanntlich die besseren Multitasker.
Da aber das DEC in dieser Beziehung nicht fernsteuerbar ist, ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz