AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Multithread und File I/O bei SSD/HDD

Ein Thema von Benmik · begonnen am 23. Apr 2016 · letzter Beitrag vom 24. Apr 2016
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#11

AW: Multithread und File I/O bei SSD/HDD

  Alt 24. Apr 2016, 09:57
@Luckie

Das ist das Grundprinzip der Pipeline, bzw. so sollte man das mit einer Pipeline aufbauen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#12

AW: Multithread und File I/O bei SSD/HDD

  Alt 24. Apr 2016, 11:03
Mist. Ich wollte das Prinzip gerade zum Patent anmelden. Aber vielleicht mache ich noch runde Ecken dran und versuche es trotzdem.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
542 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: Multithread und File I/O bei SSD/HDD

  Alt 24. Apr 2016, 12:03
...nach jedem einzelnen Testlauf einen Rechnerneustart durchgeführt...
Hab ich! Und sogar die Festplatten dabei noch kurz stromlos gemacht, für alle Fälle.

Ich finde ja auch, dass Sir Rufo Recht hat, aber ich hatte seinerzeit sehr viel ausprobiert, um den schnellsten Weg zu einem Vorschaubild zu finden, und IExtractImage fand ich einfach am besten. Ich bin auch gar nicht so sicher, ob ein Einlesen in einem separaten Thread etwas bringen würde, denn vermutlich ist nicht das Einlesen selbst, sondern das Positionieren des Lesekopfes der entscheidende Flaschenhals. Ich habe mal die Dateien von FP1 in den FastStone Image Viewer eingelesen. Der brauchte 5 Sekunden länger als mein Programm. Merkwürdigerweise brauchte er die gleiche Zeit, wenn ich die JPG von der SSD eingelesen habe. IrfanView braucht 30 Sekunden weniger, aber ich vermute, das zeigt nur die Vorschaubilder an und speichert keine weitere Daten, so wie mein Programm und offensichtlich auch FastStone das tun. Insgesamt liege ich also offenbar nicht schlecht.

Nun kommen mir ganz verwegene Gedanken (wobei auch ein gewisser Spaßfaktor dabei ist): Wie wäre es, wenn man die Position der Dateien auf der Festplatte ermitteln (siehe mal hier und hier und hier) und sie dann entsprechend ihrer physischen Position einlesen würde? Wäre das sinnvoll? Was ist eigentlich mit Native Command Queuing?
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#14

AW: Multithread und File I/O bei SSD/HDD

  Alt 24. Apr 2016, 15:48
Dein Betriebssystem und dein Dateisystem sollten sich gut genug darum kümmern können. Ich glaube kaum dass du hier sinnvoll optimierne kannst. Wichtig ist nur, dass du eindeutige Signale für dein Betriebssystem setzen kannst. Wenn du ein Verzeichnis an Dateien iterierst, dann können moderne Heuristiken dich schon sehr gut dabei unterstützen. Es wird dann oft schon präventiv eingelesen. Funktioniert natürlich nicht, wenn Dateien überall verteilt sind.

Mein Ansatz wäre es dann, eine Queue im RAM anzulegen und einen Thread (bis zur maximalen Befüllung) diese Queue befüllen zu lassen. (n-1) andere Threads arbeiten die Queue ab. Der einlesende Thread speichert die Ergebnisse der anderen Threads gelegentlich zurück. Wenn du blockweise arbeitest (nicht ein Bild abspeichern, sondern immer gleich 100 oder so; je nach RAM; währenddessen das Einlesen einstellen) solltest du die besten Ergebnisse haben.
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
542 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: Multithread und File I/O bei SSD/HDD

  Alt 24. Apr 2016, 18:42
Ich denke auch, dass ich diesen Ansatz jetzt erstmal nicht weiter verfolgen werde. Das Plattenkraspeln bei FP2 und die deutlichen Unterschiede zwischen FP1 und FP2 lassen mich aber doch glauben, dass man das Einlesen verbessern kann.

Ich arbeite ja schon mit einem Threadpool. Wenn die Dateien erstmal im Arbeitsspeicher sind, ist, glaube ich, wenig an Geschwindigkeit herauszuholen. 23 Sekunden für ~1.200 Dateien macht rechnerisch 19 msec für das Dekodieren und Verkleinern eines JPG bei einem älteren Vierkerner. Damit kann man zufrieden sein. Dank an euch.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz