![]() |
Programmcode skaliert nicht in MT
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? |
AW: Programmcode skaliert nicht in MT
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.
|
AW: Programmcode skaliert nicht in MT
Wirklich D2007?
|
AW: Programmcode skaliert nicht in MT
Zitat:
Oder war's im FastMM5 und garnicht der halbe FastMM im Delphi? :gruebel: 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. |
AW: Programmcode skaliert nicht in MT
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. |
AW: Programmcode skaliert nicht in MT
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
Delphi-Quellcode:
und ich vermute das wird wirklich extremst oft aufgerufen, werde mal versuche diese aufrufe irgendwie zu umgehen.
EnterCriticalSection(LVarTypeSync);
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? |
AW: Programmcode skaliert nicht in MT
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 |
AW: Programmcode skaliert nicht in MT
Ok liegt auf jeden Fall mal eindeutig am MM.
Hab hier mal meine Vergleichswerte
Code:
Anzahl der gleichzeitigen Threads : Dauer bis alle Threads fertig waren => Durschnittszeit wie lange ein Thread gebraucht hat.
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 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? |
AW: Programmcode skaliert nicht in MT
|
AW: Programmcode skaliert nicht in MT
ich verwende im moment den hier
![]() mich würds halt interessieren ob hier wer den in Verwendung hat. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 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