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
 
Der schöne Günther

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

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
 


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 19:42 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