AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Freigeben von Listen durch Threads beschleunigen
Thema durchsuchen
Ansicht
Themen-Optionen

Freigeben von Listen durch Threads beschleunigen

Ein Thema von Daniel · begonnen am 24. Feb 2015 · letzter Beitrag vom 26. Feb 2015
Antwort Antwort
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Freigeben von Listen durch Threads beschleunigen

  Alt 25. Feb 2015, 09:37
Auch mehr Threads versucht? (4 oder 8 ... k.A. was du für eine CPU hast)
Der VM habe ich vier Kerne zugewiesen. Beim Aufbau der Liste passen Theorie und Praxis auch wunnebaaa z'ammen und bei vier Threads habe ich die höchste Performance.

@Blup: Spannende Idee, aber ich sehe mich schon mit Löchern im Strumpf, weil ich mir damit mit hoher Wahrscheinlichkeit selbst in den Fuß schieße. Ich werde das am Wochenende aus Interesse mal ausprobieren, wenngleich ich noch Zweifel habe, ob das der Wartbarkeit des Gesamtprojekts entgegenkommt.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Freigeben von Listen durch Threads beschleunigen

  Alt 25. Feb 2015, 13:39
Du kannst ja mal ScaleMM ausprobieren. Skalierte zumindest in einem Projekt von mir deutlich besser als FastMM (letzterer skalierte genauer gesagt überhaupt nicht).

Aber ich frage mich, ob es überhaupt Sinn machen kann, das Freigeben durch mehrere Threads zu beschleunigen, da der Arbeitsspeicher der Flaschenhals sein sollte und nicht die CPU. Du kannst noch so viele Threads auf das Problem ansetzen, der Durchsatz des Arbeitsspeichers erhöht sich dadurch ja nicht. Selbst mit einem perfekt skalierenden Speichermanager wird da vermutlich kaum etwas rauszuholen sein, wenn überhaupt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.583 Beiträge
 
Delphi 12 Athens
 
#3

AW: Freigeben von Listen durch Threads beschleunigen

  Alt 25. Feb 2015, 14:10
Aber ich frage mich, ob es überhaupt Sinn machen kann,
Kommt drauf an ... theoretisch können mehrere Kerne gleichzeitig auf unterschiedliche Speicherseiten/-bänke/Riegel des RAM zugreifen.
Und dann spielt eventuell noch die eine oder andere Cache mit.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (25. Feb 2015 um 14:14 Uhr)
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Freigeben von Listen durch Threads beschleunigen

  Alt 25. Feb 2015, 14:32
Und dann spielt eventuell noch die eine oder andere Cache mit.
Bei quer über den Heap verstreuten Objekten sollte Cache aber eher keine Rolle spielen.

Kommt drauf an ... theoretisch können mehrere Kerne gleichzeitig auf unterschiedliche Speicherseiten/-bänke/Riegel des RAM zugreifen.
Geht das? Ich hätte jetzt angenommen, das läuft alles über den gleichen „Bus“ oder wie auch immer (mit der Hardware kenn ich mich nicht so aus). Im Dual-/Triple-Channel-Mode ist der Speicher ja außerdem wohl eh so eine Art RAID-0.
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Freigeben von Listen durch Threads beschleunigen

  Alt 25. Feb 2015, 14:42
Die Datenmange kann es kaum sein.
Konkrete Zahlen aus meinem System / Testprojekt:

Das Abbauen der Liste dauert rund 300ms - für einen Rechner als eine durchaus nennenswerte Zeit. Der Taskmanager listet mir für die Anwendung einen Speicherverbrauch von 360 MBytes. Ich weiß, dass der Task-Manager nicht besonders präzise ist, aber für eine grobe Schätzung sollte der Wert langen. Selbst wenn sich das alles in einer VM abspielt, müsste doch mehr an Daten durch den Bus passen. Zudem wird doch gar nicht das komplette Speicher-Abbild durch den Bus gepresst, oder? Ich überschreibe die Bereiche ja nicht mit Nullen oder dgl.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Freigeben von Listen durch Threads beschleunigen

  Alt 25. Feb 2015, 15:10
Aber außer Speicherzugriffen dürfte doch kaum etwas passieren. Ich wüsste zumindest nicht was. Außer du machst irgendwelche komplizierten Dinge im Destruktor.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.234 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Freigeben von Listen durch Threads beschleunigen

  Alt 25. Feb 2015, 14:17
Du kannst ja mal ScaleMM ausprobieren. Skalierte zumindest in einem Projekt von mir deutlich besser als FastMM (letzterer skalierte genauer gesagt überhaupt nicht).
Oder mal nach "fastmm multithread" googlen. Es gibt einige Diskussionen über alternative Memory-Manager die im Multithread-Bereich viel besser skalieren (bzw. überhaupt skalieren). Auch mit schönen Graphiken wie sich FastMM, ScaleMM und Co. verhalten.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort


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 22:22 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