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.439 Beiträge
 
Delphi 2007 Professional
 
#1

Programmcode skaliert nicht in MT

  Alt 20. Jul 2022, 16: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.050 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Programmcode skaliert nicht in MT

  Alt 20. Jul 2022, 16: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.195 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Programmcode skaliert nicht in MT

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

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

AW: Programmcode skaliert nicht in MT

  Alt 20. Jul 2022, 18: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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

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

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

AW: Programmcode skaliert nicht in MT

  Alt 20. Jul 2022, 18: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.439 Beiträge
 
Delphi 2007 Professional
 
#6

AW: Programmcode skaliert nicht in MT

  Alt 20. Jul 2022, 19: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
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.439 Beiträge
 
Delphi 2007 Professional
 
#7

AW: Programmcode skaliert nicht in MT

  Alt 20. Jul 2022, 22:14
so habe die variant kopier sachen mal so umgebaut (in var value : variant statt übergabe per result usw)
aufjeden fall kommt er jetzt nicht mehr in den CirticalSection von den variants.pas rein.

Allerdings komme ich immer noch nur auf 50% bei 5 threads.

Werde dann morgen einen anderne MM ausprobieren - allerdings dachte ich mir das der halt nur langsamer ist, und nicht blockiert - also 100% CPU und braucht dann halt länger, und nicht nur 50% CPU
Gruss Hans

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

Registriert seit: 14. Aug 2004
1.439 Beiträge
 
Delphi 2007 Professional
 
#8

AW: Programmcode skaliert nicht in MT

  Alt 21. Jul 2022, 09:06
Ok liegt auf jeden Fall mal eindeutig am MM.

Hab hier mal meine Vergleichswerte
Code:
Delphi MM
1 :  9125 ms = 9125 ms
4 : 31484 ms = 7871 ms
10: 69656 ms = 6965 ms

Fast MM4
1 : 10562 ms = 10562 ms
4 : 26157 ms = 6539 ms
10: 57359 ms = 5735 ms

SynScaleMM
1 :  9172 ms = 9172 ms
4 : 10093 ms = 2523 ms
10: 24297 ms = 2429 msa
Anzahl der gleichzeitigen Threads : Dauer bis alle Threads fertig waren => Durschnittszeit wie lange ein Thread gebraucht hat.

Habe dazu den SynScaleMM verwendet, der FastMM5 lässt sich nicht kompilieren unter D2007, und da ist zuviel was man ändern müsste.

HAb nun auch den Fast MM4-AVX getestet der ist zwawr etwas schneller wie der normale FastMM4 kommt aber auch nicht an den SynScaleMM ran.

Kennt den SynScaleMM wer und hat den in verwendung?
Gruss Hans

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

Registriert seit: 8. Jan 2007
472 Beiträge
 
#9

AW: Programmcode skaliert nicht in MT

  Alt 21. Jul 2022, 12:11
Kennt den SynScaleMM wer und hat den in verwendung?
Zum Thema suchst du am besten direkt im Forum. In Bezug auf mORMot findest du diesen Kommentar in der aktuellen Version.

Bis bald...
Thomas
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.439 Beiträge
 
Delphi 2007 Professional
 
#10

AW: Programmcode skaliert nicht in MT

  Alt 21. Jul 2022, 17:50
ich verwende im moment den hier https://github.com/synopse/mORMot/bl...SynScaleMM.pas
mich würds halt interessieren ob hier wer den in Verwendung hat.
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 10:23 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