Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

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

AW: ADO/MSSQL mit Multi Prozessor Board

  Alt 18. Apr 2016, 07:55
Wenn bei der Berechnung jedes Datensatzes ca. 1 Sekunde benötigt wird, dann braucht man im Idealfall
AnzahlCoresDauer (h)
1.000.0001277,77
1.000.000646,30
Dies ist aber jetzt die reine Berechnungszeit und erfodert die volle Aufmerksamkeit eines jeden Cores. Hat man 4 Cores, dann nützen einem 6 Threads hier nichts ... sie sind eher schädlich.

Bei der Menge der Datensätze und dem Thread-Aufbau (Daten lesen, Berechnen, Daten schreiben) spielen die Zeiten für Lesen/Schreiben auch eine Rolle und addieren sich hinzu. Eine CriticalSection sorgt auch noch dafür, dass die Threads sich untereinander ausbremsen.

Darum nimmt man dafür eine Pipeline.
  1. Die erste Stage holt die Datensätze und schiebt diese in eine Queue A
  2. Die zweite Stage holt einen Datensatz aus der Queue A, führt die Berechnung aus und gibt das Ergebnis in eine Queue B
  3. Die dritte Stage holt einen Datensatz aus der Queue B und schreibt den Datensatz wieder zurück
Mit diesem Aufbau kommt man ziemlich nahe an den Idealfall von Anzahl * Berechnungszeit / Cores, denn die gegenseitige Behinderung ist nur beim Zugriff auf die Queues A/B gegeben und die sind extrem kurz.
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