AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Programmcode skaliert nicht in MT
Thema durchsuchen
Ansicht
Themen-Optionen

Programmcode skaliert nicht in MT

Ein Thema von Gruber_Hans_12345 · begonnen am 20. Jul 2022 · letzter Beitrag vom 21. Jul 2022
Antwort Antwort
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.441 Beiträge
 
Delphi 2007 Professional
 
#1

Programmcode skaliert nicht in MT

  Alt 20. Jul 2022, 15:33
Hallo ich bräuchte einen Suchansatz, wie ich finde, warum mein Programmcode (der sehr sehr riesig ist) nicht vernünftig skaliert wenn ich den in mehreren Threads starte.

1 Thread CPU 26% (bei 4 Kernen)
2 Threads CPU 39%
3 Threads CPU 45%
4 Threads CPU 49%
10 Threads CPU 57%

In meinem Code sind keine Synchronize drinnen (nur das OnTerminate wird verwendet um dann den Zähler runterzuzählen um zu wissen ab alle Threads fertig sind)

Es wird massiv mit variants gearbeitet, und mit strings, vermute eine große Speicher GetMem/FreeMem sache (MM ist der Fast MM4 v4.991)

Ich verwende da drinnen keine Critical Section, und für Fremdkomponenten / Code üwsste ich nicht wie ich das rausfinden kann (Breakpoint auf einen EnterCritical Section kann ich ja nicht machen oder?)

Was könnte da noch der Grund sein?
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.114 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Programmcode skaliert nicht in MT

  Alt 20. Jul 2022, 15:38
Ich hatte große Probleme mit Speicheranforderungen (SetLength) bei MT. Habe mir dann für die in meinem Code verwendeten Arrays einen eigenen Typ und eigene Methoden (GetLength, SetLength, Low, High) geschrieben, bei denen die Arrays niemals verkleinert wurden und die Länge stattdessen im ersten Eintrag stand.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.218 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Programmcode skaliert nicht in MT

  Alt 20. Jul 2022, 16:25
Wirklich D2007?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Programmcode skaliert nicht in MT

  Alt 20. Jul 2022, 17:07
Jupp, in Delphi 11 oder war's schon 10.4 wurde (wenn ich das richtig mitbekommen hatte) am FastMM nochmal bissl was optimiert, bezüglich MultiThread.

Oder war's im FastMM5 und garnicht der halbe FastMM im Delphi?



Irgendwer hatte, die letzten paar Wochen, hier im Forum mal was dazu gesagt.





Ich weiß garnicht mehr seit wann eine Variante des FastMM4 im Delphi bereits integriert ist. (der DelphiMM durch FastMM ersetzt wurde)

Wenn es FastMM5 war und Der auch in so einem alten Delphi noch läuft, dann wäre es einen Versuch wert.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (20. Jul 2022 um 17:12 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.218 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Programmcode skaliert nicht in MT

  Alt 20. Jul 2022, 17:58
Und ich glaube es gab auch mal eine guter Verglich zwischen "Standard-Memory-Manager" + FastMM + 1-2 andere Memory-Manager.
Und AFAIK war FastMM(4) dort bei Multi-Threading nicht die #1
Aber alle haben die den ollen MemoryManager von Delphi-Versionen wie D2007 um Welten geschlagen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.441 Beiträge
 
Delphi 2007 Professional
 
#6

AW: Programmcode skaliert nicht in MT

  Alt 20. Jul 2022, 18:06
Ja ist noch D2007 mit dem neusten FastMM 4 mittlerweile.

aber ich habe schon was gefunden was es vermutlich ist/sein kann.

ich verwende sehr viele variants, und davon auch sehr viele Customvariants

und bei jedem VarCopyDeep und VarClearDeep wird da dann FindCustomVariantType aufgerufen wo ein
EnterCriticalSection(LVarTypeSync); und ich vermute das wird wirklich extremst oft aufgerufen, werde mal versuche diese aufrufe irgendwie zu umgehen.

Ideal wäre es wenn ich die funktionen in der variants.pas ändern kann, aber vermute da wird sich nix mehr kompilieren lassen wenn ich da den source ändere?
Gruss Hans

2B or not 2B, that is FF
  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 13:51 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