AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi TParallel.&For Problem unter Windows
Thema durchsuchen
Ansicht
Themen-Optionen

TParallel.&For Problem unter Windows

Ein Thema von ich2 · begonnen am 1. Okt 2019 · letzter Beitrag vom 1. Okt 2019
Antwort Antwort
Der schöne Günther

Registriert seit: 6. Mär 2013
6.199 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: TParallel.&For Problem unter Windows

  Alt 1. Okt 2019, 16:14
Das ändert sehr wohl was.

Ergebnisse auf meinem Rechner.

Dein Quelltext 1:1 übernommen:
Multithreaded: 4430 ms total
Singlethreaded: 1085 ms total

Closure berichtigt sodass die Schleifenvariablen _yy und _xx in der lokalen Methode liegen und nicht "außerhalb":
Multithreaded: 2020 ms total
Singlethreaded: 810 ms total

Random() gegen feste Zuweisung ersetzt:
Multithreaded: 447 ms total
Singlethreaded: 1100 ms total (wtf)

Von Debug 64 Bit auf Release-Fassung 64 Bit gewechselt:
Multithreaded: 225 ms
Singlethreaded: 590 ms


Delphi-Quellcode:
unit Unit1;

interface uses
   System.SysUtils,
   System.Types,
   System.UITypes,
   System.Classes,
   System.Diagnostics,
   System.Threading,

   FMX.Types,
   FMX.Controls,
   FMX.Forms,
   FMX.Graphics,
   FMX.Dialogs,
   FMX.Edit,
   FMX.EditBox,
   FMX.SpinBox,
   FMX.Layouts,
   FMX.ListBox,
   FMX.StdCtrls,
   FMX.Controls.Presentation;

type
   T3DFloatArray = TArray<TArray<TArray<Double>>>;

   TForm1 = class(TForm)
      Button1: TButton;
      ListBox1: TListBox;
      SpinBox1: TSpinBox;
      SpinBox2: TSpinBox;
      isMultiThreadedCheckbox: TCheckBox;
      procedure Button1Click(Sender: TObject);
      procedure FormCreate(Sender: TObject);
      private var
         stopwatch1, stopwatch2: TStopWatch;
      private
         class function NotRandom(): Double; inline;
   end;

var
   Form1: TForm1;


implementation

{$R *.fmx}

procedure TForm1.Button1Click(Sender: TObject);
var
   testDataDimensionCount: Integer;
   iterationCount: Integer;

   count, zz: Integer;
   testdata: T3DFloatArray;
   testProcedure: TProc<Integer>;
begin
   testDataDimensionCount := Round(SpinBox1.Value);
   iterationCount := Round(SpinBox2.Value);

   ListBox1.Clear();

   stopwatch1 := TStopwatch.StartNew();
   setlength(testdata, testDataDimensionCount, testDataDimensionCount, testDataDimensionCount);
   stopwatch1.Stop();

   ListBox1.Items.Add('get-mem: ' + inttostr(stopwatch1.ElapsedMilliseconds) + ' ms');

   testProcedure :=
      procedure(_zz: Integer)
      var
         _xx, _yy: Integer;
      begin
         for _yy := 0 to testDataDimensionCount - 1 do
            for _xx := 0 to testDataDimensionCount - 1 do
               testdata[zz, _yy, _xx] := NotRandom();
      end;

   stopwatch2 := TStopwatch.StartNew();
   for count := 0 to iterationCount - 1 do
      begin
         stopwatch1 := TStopwatch.StartNew();

         if isMultiThreadedCheckbox.IsChecked then
            begin
               TParallel.&For(
                  0,
                  testDataDimensionCount - 1,
                  testProcedure
               );
            end
         else
            begin
               for zz := 0 to testDataDimensionCount - 1 do
                  testProcedure(zz);
            end;

         stopwatch1.Stop();
         ListBox1.Items.Add('[' + inttostr(count) + ']: ' + inttostr(stopwatch1.ElapsedMilliseconds) + ' ms');
      end;

   stopwatch2.Stop;
   ListBox1.Items.Add('-> done: ' + inttostr(stopwatch2.ElapsedMilliseconds) + ' ms');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   randomize;
end;

class function TForm1.NotRandom(): Double;
begin
   Result := 42.0;
end;

end.
  Mit Zitat antworten Zitat
Benutzerbild von ich2
ich2

Registriert seit: 7. Dez 2005
Ort: Würzburg
54 Beiträge
 
#2

AW: TParallel.&For Problem unter Windows

  Alt 1. Okt 2019, 16:38
Hallo Günther,

danke fürs Probieren...
das Problem ist hier gar nicht die Geschwindigkeit, es ist klar, dass gewisse Einstellungen die Geschwindigkeit erhöhen...
es ist vielmehr, dass die Software nach einer Weile (Nichtbenutzung) (siehe Video) extrem langsam wird.
es scheint eine Sache von Windows zu sein, dein Quellcode, sowie FMX/VCL Umgebung...überall das gleiche...wenn Multithreading im Spiel ist, dann funktioniert die Software nach einer bestimmten Wartezeit nicht mehr korrekt.

wenn man sich den Taskmanager anschaut, dann erkennt man den Zeitpunkt:
nach einer gewissen 'nichtbenutzen'-Zeit werden die Threads freigegeben und danach geht nichts mehr.

kann irgendjemand diesen Effekt reproduzieren...?

p.s.: die Variable z sollte zu einem _z werden
Wissen ist Macht. Das ändert aber so gut wie nichts an der Übermacht der Dummheit.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.199 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: TParallel.&For Problem unter Windows

  Alt 1. Okt 2019, 16:46
Ok, ich wollte aufzeigen dass die Closure und Random() die Geschwindigkeit in den Keller ziehen.

Ich muss aber ganz ehrlich sagen ich verstehe dein konkretes Problem noch nicht. Getestet mit 10.0 Seattle, aber man kann machen was man möchte, die Speicherauslastung und Rechenzeit bleibt konstant.

So harte Aufhänger wie bei dir im Video bekomme ich niemals hin. Interessant wäre doch mal, hier im Debugger anzuhalten und zu schauen wo es hängt?
  Mit Zitat antworten Zitat
Benutzerbild von ich2
ich2

Registriert seit: 7. Dez 2005
Ort: Würzburg
54 Beiträge
 
#4

AW: TParallel.&For Problem unter Windows

  Alt 1. Okt 2019, 17:24
Hallo zusammen...

also gut...ich denke ich habe den Fehler gefunden...und es ist sehr interessant und vor allem nervig...
es ist der Compiler von der Community Edition...der macht komische Sachen.

https://ep5.physik.uni-wuerzburg.de/...019_TParallel/

unter dem Link findet ihr 3 Versionen, welche mit unterschiedlichen compilern und auf win7 und win10 erstellt wurden...nur die communityedition-Version erzeugt den beschriebenen Effekt...

schade um die Zeit...
Wissen ist Macht. Das ändert aber so gut wie nichts an der Übermacht der Dummheit.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.199 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: TParallel.&For Problem unter Windows

  Alt 1. Okt 2019, 17:31
Auf welchem Betriebssystem das kompiliert wird sollte keinen Unterschied machen.

Ich glaube ehrlich gesagt auch nicht dass es einen Unterschied macht ob Professional, Enterprise oder Community-Edition. Wir sehen bislang dass:
  • Es auf 10.0 keine Probleme gibt
  • Es auf 10.2.3 keine Probleme gibt
  • Es auf 10.3 Probleme gibt

Richtig?


Das klingt sogar wie folgendes Problem:
https://quality.embarcadero.com/browse/RSP-23837

Zitat:
The behaviour of TParallel.For has changed completely between 10.2.3 and 10.3.1. The peformance sems to have degraded, but worse than that it seems that under some conditions the performance of the thread pool deteriorates until it is worse than single-threading, and keeps adding more threads to the pool for no reason.
  Mit Zitat antworten Zitat
Benutzerbild von ich2
ich2

Registriert seit: 7. Dez 2005
Ort: Würzburg
54 Beiträge
 
#6

AW: TParallel.&For Problem unter Windows

  Alt 1. Okt 2019, 17:43
...ich hatte gerade einen Rechner zur Hand und wollte wissenn, ob es Systemunabhängig ist...

aber dein Einwand scheint es zu sein...krass, dass man das so kaputt machen kann
hier ist ebenfalls etwas zu finden
https://en.delphipraxis.net/topic/50...allel-library/

die Frage ist nun, ist es gefixt worden und kann man sich irgendwo eine aktuelle Community Edition runterladen oder sollte man doch lieber die 'alte' 10.2 installieren
Wissen ist Macht. Das ändert aber so gut wie nichts an der Übermacht der Dummheit.
  Mit Zitat antworten Zitat
Benutzerbild von ich2
ich2

Registriert seit: 7. Dez 2005
Ort: Würzburg
54 Beiträge
 
#7

AW: TParallel.&For Problem unter Windows

  Alt 1. Okt 2019, 18:10
Also gut...zusammenfassend kann man sagen:

TParallel.For funktioniert unter folgenden Compilern:
-10.0 keine Probleme
-10.2.3 keine Probleme
-10.3.1 ...failed
-10.3.2 ...failed

...also doch zurück auf 10.2
Wissen ist Macht. Das ändert aber so gut wie nichts an der Übermacht der Dummheit.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.199 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: TParallel.&For Problem unter Windows

  Alt 1. Okt 2019, 18:11
Soweit ich das sehe ist das nicht gefixed worden bisland, obwohl seit Januar bekannt
(https://quality.embarcadero.com/browse/RSP-23466)

Ein Embarcadero-Entwickler sagt dort relativ offen dass man erst mit 10.4 da wohl wieder Zeit bekommt sich das alles genauer anzuschauen. Da man die Community-Edition wohl auch nur in der jeweils aktuellen Fassung aktivieren kann wüsste ich ehrlich gesagt auch nicht, wie man aus der Nummer jetzt wieder rauskommt. Wenn du auf 10.2 zurück kannst ist das natürlich gut.

Mir wurde es wegen den vielen Kleinigkeiten auch zu unheimlich, ich habe mich schon ab 10.0 nicht mehr weitergetraut obwohl die Wartungsverträge weiterhin laufen...
  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 21:50 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