AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

XE2: ASM und Pascal gemischt?

Ein Thema von Schorschi5566 · begonnen am 11. Sep 2011 · letzter Beitrag vom 12. Sep 2011
Antwort Antwort
Seite 2 von 3     12 3      
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#11

AW: XE2: ASM und Pascal gemischt?

  Alt 11. Sep 2011, 19:06
Oder besser: Typen dafür definieren und diesen nutzen.
Lars
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.592 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: XE2: ASM und Pascal gemischt?

  Alt 11. Sep 2011, 19:21
P.S.: Der Vorteil den der Autor des Wrappers darin gesehen hat, dürfte sein, dass man keinen "doppelten" Funktionsaufruf macht, sondern die DLL-Funktion den Rücksprung direkt machen kann.
// EDIT:
Ok, ich sehe es, aber wo liegt da der große Vorteil? Die paar Mikrosekunden Zeitersparnis?
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Schorschi5566

Registriert seit: 6. Feb 2006
197 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#13

AW: XE2: ASM und Pascal gemischt?

  Alt 11. Sep 2011, 19:27
Zitat:
Ok, ich sehe es, aber wo liegt da der große Vorteil? Die paar Mikrosekunden Zeitersparnis?
Wird sich zeigen. Werde dann mal die Win32 und die Win64-Version vergleichen. Wirkt sich wahrscheinlich eh erst ab ein paar Millionen Aufrufen auf der Stopuhr aus.
Uwe
"Real programmers can write assembly code in any language." - Larry Wall
Delphi programming rocks
  Mit Zitat antworten Zitat
Insider2004
(Gast)

n/a Beiträge
 
#14

AW: XE2: ASM und Pascal gemischt?

  Alt 11. Sep 2011, 21:53
Seit XE2 gilt mehr denn je: weg mit dem Assembler-Zeugs! Pascal ist mittlerweile genauso schnell. Und es entfällt das ständige Neuschreiben beim Portieren. Die beste Performance erreicht man durch gescheite Algorithmen, nicht durch Assembler.
  Mit Zitat antworten Zitat
USchuster

Registriert seit: 12. Sep 2010
Ort: L.E.
120 Beiträge
 
Delphi XE3 Professional
 
#15

AW: XE2: ASM und Pascal gemischt?

  Alt 11. Sep 2011, 22:23
Assembler hat für gewisse Bereiche und Probleme durchaus seine Berechtigung. Der heutige 0815 Programmier sollte darauf verzichten und lieber den Compiler optimierten Code erzeugen lassen, wobei sich das Verzichten ohnehin oft durch die fehlenden Kenntnisse erübrigt. Assemblerunterstützung war ursprünglich nicht für Win64 im XE2 geplant und die Lösung zur Nutzung von Assembler wäre dann das Einbinden von Objektdateien von z.B. NASM gewesen. Das es Assemblerunterstützung doch gibt, liegt daran das die entsprechende Nachfrage besteht.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.019 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#16

AW: XE2: ASM und Pascal gemischt?

  Alt 11. Sep 2011, 22:26
Assemblerunterstützung war ursprünglich nicht für Win64 im XE2 geplant und die Lösung zur Nutzung von Assembler wäre dann das Einbinden von Objektdateien von z.B. NASM gewesen. Das es Assemblerunterstützung doch gibt, liegt daran das die entsprechende Nachfrage besteht.
Wenn ich mir so manche RTL Units anschaue, frag ich mich, wie sie es sonst selber relativ unkompliziert hinbekommen hätten.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.592 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: XE2: ASM und Pascal gemischt?

  Alt 11. Sep 2011, 23:28
Pascal ist mittlerweile genauso schnell.
Naja, das stimmt zumindest so allgemein nicht. Wenn man sich den generierten Assemblercode angeht, sieht man, dass es da durchaus Optimierungspotential gibt.

Es gibt aber nicht viele Fälle, bei denen der relativ kleine Performancegewinn wirklich ins Gewicht fällt. In diesen Fällen kann es sich aber dann durchaus lohnen Assembler einzusetzen, auch wenn das heißt, dass man den Code für verschiedene Plattformen mehrfach schreiben muss. Das ist dann aber auch nicht so schlimm, weil es eben nicht so viele Fälle sind.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Schorschi5566

Registriert seit: 6. Feb 2006
197 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#18

AW: XE2: ASM und Pascal gemischt?

  Alt 11. Sep 2011, 23:40
Zitat:
Die beste Performance erreicht man durch gescheite Algorithmen, nicht durch Assembler.
Sehr oft lassen sich "gescheite" Algorithmen aber mit Assembler richtig gut optimieren.

Aber wie Sebastian Jaenicke schon schreibt. Es muss sich schon lohnen, wenn man in die ASM-Kiste greift...

Hatte gehofft, der Compiler würde den überflüssigen Aufruf zu 'nem Jump optimieren, tut er aber nicht.
Uwe
"Real programmers can write assembly code in any language." - Larry Wall
Delphi programming rocks

Geändert von Schorschi5566 (11. Sep 2011 um 23:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: XE2: ASM und Pascal gemischt?

  Alt 12. Sep 2011, 07:21
- Lade alles statisch.
- Lade doch alle Adressen gleich zu Beginn und springe danach direkt hin, ohne den Wrapper.
oder
- Lade überall erstmal Laderoutinen rein und tausche diese, beim ersten Aufruf, aus.

Delphi-Quellcode:
interface

var
  SQLite3_Open: function(filename: PAnsiChar; var db: TSQLiteDB): integer; cdecl;

implementation

function _SQLite3_Open(filename: PAnsiChar; var db: TSQLiteDB): integer; cdecl;
begin
  LoadProcAddress(SQLite3_Open, 'sqlite3_open');
  Result := SQLite3_Open(filename, db);
end;

initialization

SQLite3_Open := _SQLite3_Open;
Ich weiß jetzt nicht, wie das mit Konstanten in Mac oder 64 Bit aussieht, aber früher hätte ich eventuell eine typisierte Konstante mißhandelt, anstatt der globalen Variable (da diese grungsätzlich erstmal schreibgeschützt ist, was sich aber verbiegen läßt)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (12. Sep 2011 um 07:24 Uhr)
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#20

AW: XE2: ASM und Pascal gemischt?

  Alt 12. Sep 2011, 09:25
Dieser ASM-Trick wird häufig verwendet (z.B. Jedi-Projekt). Es gibt drei Vorteile:
1) Es braucht nicht jedesmal eine individuelle global variable deklariert zu werden. Wenn man nur eine Funktion wrappen muss spielt das keine Rolle, aber bei 150 Funktionen macht einen dieses ständige Copy&Paste schon ganz schön müde.
2) Die Parameter, die sich ja sowieso schon auf dem Stack befinden, werden nicht nochmal auf den Stack kopiert
3) Ein sicherlich zu vernachlässigender Zeitvorteil beim Sprung/Rücksprung in die eigentliche Routine

Wenn der Compiler eine Aufrufkonvention unterstützen würde, bei der die Parameter nicht nochmals kopiert werden müssten, könnte man sich den Umweg über Assembler sparen. Ich würde mir so etwas wünschen (entsprechend des Aufrufs "inherited;"):

Delphi-Quellcode:
var
   _SQLite3_Open: FARPROC;

function SQLite3_Open(filename: PAnsiChar; var db: TSQLiteDB): integer; cdecl;
begin
   if _SQLite3_Open = nil then
     LoadProcAddress(_SQLite3_Open, 'sqlite3_open');
   _SQLite3_Open;
end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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:36 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