AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Laufzeitoptimierung eines Consolen-Programms
Thema durchsuchen
Ansicht
Themen-Optionen

Laufzeitoptimierung eines Consolen-Programms

Ein Thema von stpolster · begonnen am 1. Sep 2023 · letzter Beitrag vom 11. Sep 2023
Antwort Antwort
Seite 4 von 4   « Erste     234   
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#31

AW: Laufzeitoptimierung eines Consolen-Programms

  Alt 3. Sep 2023, 14:15
Nein, ganz im Gegenteil: Wolfgang Erhardts Routinen schlagen sich sehr gut!
Das war auch eigentlich worauf ich hinaus wollte: Obwohl der Ansatz in punkto Performance eher ungünstig ist, kann sich das Ergebnis durchaus sehen lassen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Laufzeitoptimierung eines Consolen-Programms

  Alt 6. Sep 2023, 10:16
MPInt = 4.7 Sekunden auf einem kleinen Schlepptop mit Delphi 11.3 in 64 Bit.

Code:
##### StrMath ####################
c056376183596999899117308588625209953108464105926767074623063990238734463292307
ad=84031 su=25065 in 9.61070060*1000 sec

##### Int256 ####################
c0-5735511060232939254446901397460932042972491126387202754970036519831719797026
ad=3973389 su=5290133 in 7.98520350*10 sec

##### MPInt ####################
c057505664344760038530679973515630121094664952824482015253584348948195539615650
ad=83884813 su=25000001 in 4.84421430 sec

Also dafür, dass ich beim StrMath das AND und SHR durch zwei eine brutal schlimme Division ersetzen mußte (DIV/MOD aus ganz ganz ganz vielen ADD/SUB)
und nicht nur billig einmal ADD/SUB/SHR/AND je Durchgang nutzen konnte, ist es doch fast erstaunlich, dass es damit bloß 9000 Sekunden dauert (knapp 6 Tage).

Schade irgendwie.
Mein MatheString konnte früher mal mit bis 2.14 Milliarden Dezimalstellen rechnen ... jetzt sind es nur noch 1.07 Milliarden (außer man entfernt das böse Unicode)




Ich dachte es wollte AUCH jemand mal die Quellcodes veröffentlichen, nachdem es aufgeräumt wurde, oder so.

https://github.com/MHumm/DelphiEncryptionCompendium
Das sieht immernoch nur nach Part I aus.

Bei mir hab ich nur bei den alten 5.1c und 5.2 den Part II.
und dort leider nur mit den vorkompilierten DCUs für Delphi 5 bis 7 plus deren PAS-Header als Doku (ohne die Implementation).
Angehängte Dateien
Dateityp: 7z MatheTest.7z (2,63 MB, 7x aufgerufen)
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Laufzeitoptimierung eines Consolen-Programms

  Alt 9. Sep 2023, 19:39
DEC Math in aktuellerem Delphi. (es gibt vom DEC Part II bisher ja leider nur die DCU für Delphi 5, 6 und 7 und dazu den Interface-Teil der PAS, als Doku)

DEC Part III .... weiß nur, dass es das geben dürfte, aber was es ist ... keine Ahnung.
DEC Part I kennen ja alle ... das mit den Verschlüsselungen. (inzwischen auch als DEC Lite im GetIt, bzw. voll im GitHub)
Lite, weil es verboten ist gewisse Verschlüsselungstechnologien aus den USA zu exportieren, auch wenn das GetIt-Packet eigentlich aus Deutschland kommt.

Mal wieder ein Delphi 7 installiert
und als erstes versucht, ob sich aus den DCU ein paar OBJ zu erzeugen lassen, welche sich dann in neueren Delphis linken ließen.
Leider klappt das nur aus PAS (sowie auch aus C).



OK, dann leider nun der Weg über eine DLL.


Mir war so, als hätte Hagen den Quellcode an jemand weitergegeben, welcher das noch bissl aufräumen wollte,
weil "so wie es ist" wollte es Hagen nie rausgeben.




siehe https://www.delphipraxis.net/12974-u...stellen-3.html
usw.
Angehängte Dateien
Dateityp: txt DEC_5_2_Readme.txt (5,0 KB, 3x aufgerufen)
$2B or not $2B

Geändert von himitsu ( 9. Sep 2023 um 19:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Laufzeitoptimierung eines Consolen-Programms

  Alt 10. Sep 2023, 13:01
Zitat:
c0= 57 50566 43447 60038 53067 99735 15630 12109 46649 52824 48201 52535 84348 94819 55396 15650
ad=83884813 su=25000001 in 11.24300002 sec

Programmende mit ENTER
* OK, in einem Delphi 7
* mit Codes, die für eine 17 Jahre alte CPU optimiert wurden
* auf einem, 12th Gen Intel Core i7-1260P 2.10 GHz
* und außerdem wurde es nicht direkt für so "einfache" Berechnungen ausgelegt, sondern auf Cryptography und hochkompliziertes Zeugs, wie 'ne Million Stellen von Pi zu berechnen

Delphi-Quellcode:
program DECMathTest;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  {ASN1, Console, ConsoleForm, CPU, CRC,
  DECCipher, DECData, DECFmt, DECHash, DECRandom, DECUtil,
  IDPrimes, IsPrimeHRUnit, LHSZ, NCombi, NGFPBld, NGFPs, NGFPTab,
  NIntM,}
 NInts {NInt_1, NMath, NPolys, NRats, Prime};

{$R *.res}

var
  a, b, c, soll, z, sub: IInteger;
  start: TDateTime;
  duration: Double;
  nad, nsu: Int64;
  nn: Integer;

begin
  NSet(a, '170141183460469231731687303715884105757');
  NSet(b, '170141183460469231731687303715884105703');
  NSet(soll, '57896044618658097711785492504343953926634992332820282019728792003956564819968');
  NSet(z, '340282366920938463463374607431768211455');
  NSet(sub, '11111111111111111111111111111111111111111111111111111111111111111111111111111');

  nad := 0;
  nsu := 0;
  start := Now;
  for nn := 0 to 25000000 do begin
    NMul(c, a, b);
    while NCmp(c, soll) < 0 do begin
      NAdd(c, c, sub);
      Inc(nad);
    end;
    while NCmp(c, soll) > 0 do begin
      NSub(c, c, sub);
      Inc(nsu);
    end;
    NShr(a, c, 128);
    NAnd(b, c, z);
  end;
  duration := (Now - start) * SecsPerDay;

  WriteLn('c0=', NStr(c));
  WriteLn('ad=', nad, ' su=', nsu, ' in ', duration:1:8, ' sec');
  WriteLn;
  WriteLn('Programmende mit ENTER');
  ReadLn;
end.

Delphi-Quellcode:
  for var nn := 25000000 downto 0 do begin
    c := a * b;
    while c < soll do begin
      c := c + sub;
      Inc(nad);
    end;
    while c > soll do begin
      c := c - sub;
      Inc(nsu);
    end;
    //a := c div d; //a := c shr 128;
    //b := c mod d; //b := c and z;
    //MatheString.MatheObj.QuotientModulo(c, d, PString(@a)^, PString(@b)^);
    var i := Length(c) - 38;
    a := Copy(c, 1, i);
    b := Copy(c, i + 1);
  end;
Komisch, hätte gedacht, dass das SHR/AND ... ähhh, ich meinte der DIV/MOD-Ersatz, das Tempo enorm runterzieht,
aber ein halbwegs equivalentes DezimalShift senkt die Zeit in meinem StringMath von 9610 auf nur 3355 Sekunden.
Angehängte Dateien
Dateityp: 7z DECMathTest.exe.7z (60,7 KB, 3x aufgerufen)
$2B or not $2B

Geändert von himitsu (11. Sep 2023 um 11:09 Uhr)
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.456 Beiträge
 
Delphi 11 Alexandria
 
#35

AW: Laufzeitoptimierung eines Consolen-Programms

  Alt 11. Sep 2023, 08:42
DEC Part I kennen ja alle ...
*räusper* Stimmt nicht. Es gibt mindestens eine Person die das nicht kennt. Ich. Also nicht "alle". qed.
Von DEC kenne ich nur PDP 11.
  Mit Zitat antworten Zitat
itsChris

Registriert seit: 29. Jul 2022
24 Beiträge
 
Delphi 12 Athens
 
#36

AW: Laufzeitoptimierung eines Consolen-Programms

  Alt 11. Sep 2023, 10:53
So eine Besserwisserei.... Auch wenn es nicht jeder kennt, muss man nicht alles kommentieren und verbessern.
DEC Part I kennen ja alle ...
... Es gibt mindestens eine Person die das nicht kennt. Ich. Also nicht "alle". qed....
Komma vergessen. Richtig wäre: Es gibt mindestens eine Person, die das nicht kennt.
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
704 Beiträge
 
Delphi 12 Athens
 
#37

AW: Laufzeitoptimierung eines Consolen-Programms

  Alt 11. Sep 2023, 11:22
Von DEC kenne ich nur PDP 11.
Ach, das weckt Erinnerungen. Auf 'ner PDP11 haben wir in der Mittagspause öfter Dungeons gespielt. War so Anfang der 1980-er...
Peter Below
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#38

AW: Laufzeitoptimierung eines Consolen-Programms

  Alt 11. Sep 2023, 12:35
Auf 'ner PDP11 haben wir in der Mittagspause öfter Dungeons gespielt. War so Anfang der 1980-er...
Das kommt mir irgendwie bekannt vor: CodeRage Deutschland 2016 - Session 09 - Delphi Adventure
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


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 20:53 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