Themabewertung:
  • 1 Bewertung(en) - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Reverse Engineering der NLT II
Ich hab vorhin mal die sdl_update_rect_window() Funktion von dir ein bisschen optimiert, in dem ich erst die zweite Schleife vektorisiert habe und anschließend ein "händisches" double buffering ausprobiert habe. 

Dabei hab ich auch gleich den Mauszeiger in der Mitte des Bildschirms (Fensters) innerhalb der sdl_event_loop() noch gefangen, weil das im Original genauso ist.

Zitieren
Das klingt spannend. Wie hast du denn die zweite Schleife vektorisiert, wenn ich fragen darf?
Zitieren
(05.05.2025, 19:53)HenneNWH schrieb: Das klingt spannend. Wie hast du denn die zweite Schleife vektorisiert, wenn ich fragen darf?

Entweder darauf vertrauen, dass der Compiler das selbst checkt, oder in meinem Fall über NEON instructions (speziell vld1_u8), weil ich auf einem M4 (ARM) Macbook unterwegs bin gerade.

Lass mich wissen, wenn du denkst, dass der Code soweit portiert ist und es Engstellen bei der Performance gibt. Da helfe ich gerne mit. Mein CMake Pull-Request auf GitHub dümpelt auch noch so vor sich hin und kann eigentlich gemerged werden ;-) Eine CI könnte ich auch auf GitHub schon mal aufsetzen für das Projekt.
Zitieren
@NewProggie: Dass der Compiler das selbst checkt war damals als ich HPC gemacht habe eher eine Seltenheit.
Händisch nachgucken und eine eigene Meinung haben ist da das Beste.
Und natürlich: Assembler können!
Zitieren
Wie kann ich jetzt das Programm kompilieren? Nur mit "make -f Makefile_old"? Oder auch irgendwie mit cmake? Damit kenn ich mich noch nicht aus.
--------
Warnung! Geschichte kann zu Einsichten führen und verursacht Bewusstsein!
Avatar by: Keven Law (CC BY-SA 2.0)
Zitieren
(06.05.2025, 16:26)Obi-Wahn schrieb: Wie kann ich jetzt das Programm kompilieren? Nur mit "make -f Makefile_old"? Oder auch irgendwie mit cmake? Damit kenn ich mich noch nicht aus.

Make geht wie gehabt.
Mit CMake geht es jetzt neuerdings auch:

Code:
mkdir build
cmake -B build -S .
cmake --build build --parallel

Über -G kannst du dir mit CMake auch eine Projektdatei generieren lassen (z.B. für Eclipse, Visual Studio, Xcode o.ä.)
Zitieren
Habs so gemacht, dass beide unabhängig voneinander gehen.
Code:
make -f Makefile_old
ist die bisherige Variante, welche ich aktuell zum direkten probieren noch behalten will.

CMake ist natürlich etwas moderner, komfortabler und Upper-Class!
Bisher hab ich CMake noch nicht sinnvoll nutzen können,
da make gereicht hat, aber CMake war mein Favorit für "wenn's mal fertig ist"!
@NewProggie: Danke!
Zitieren
(06.05.2025, 19:30)NewProggie schrieb:
Code:
mkdir build
cmake -B build -S .
cmake --build build --parallel

Danke! :thx:  Damit hat es unter Windows und Linux funktioniert!  :up:

Die erstellte "ngen_cc.exe.exe" ist übrigens nur 359kb groß. Die "ngen_gcc.exe" ist 461kb groß.

Edit: Und mit dem UCRT-Compiler sind es nur noch 235kb. :lol:
--------
Warnung! Geschichte kann zu Einsichten führen und verursacht Bewusstsein!
Avatar by: Keven Law (CC BY-SA 2.0)
Zitieren
Klugsch**ßeralarm: Diese Dateien enthalten auch Debugginginformationen.
Probier mal:
Code:
size ngen_*
Darauf kommt's an.
Zitieren
Code:
$ size ngen_*
   text    data     bss     dec     hex filename
115748    2288   10688  128724   1f6d4 ngen_cc.exe.exe
115780    2288   10688  128756   1f6f4 ngen_gcc_mingw.exe
  89880    2192    8128  100200   18768 ngen_gcc_ucrt.exe

cmake und mingw sind recht ähnlich, aber ucrt ist deutlich anders.
--------
Warnung! Geschichte kann zu Einsichten führen und verursacht Bewusstsein!
Avatar by: Keven Law (CC BY-SA 2.0)
Zitieren
Interessant: Probier mal noch
Code:
file ngen_*

Zur Erklärung: text = Programmcode, data = intitialisierte Daten (Tabellen, ...), BSS = uninitialisierte Daten

Edit: Wenn mir -O2 kompiliert sieht das ganze so aus:
Code:
ls -al ngen_*
-rwxr-xr-x 1 henne henne 118720  8. Mai 21:17 ngen_cc
-rwxr-xr-x 1 henne henne 313000  8. Mai 21:18 ngen_gcc

Code:
size ngen_*
   text       data        bss        dec        hex    filename
  84881       3100      71912     159893      27095    ngen_cc
  70390       3028      71784     145202      23732    ngen_gcc

Code:
file ngen_*
ngen_cc:  ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=dcedcc49247f06e7965523c565bf4381c43260b4, for GNU/Linux 3.2.0, not stripped
ngen_gcc: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=b2d28aecb7623aea8e291fdd046c6bca8b9514ab, for GNU/Linux 3.2.0, with debug_info, not stripped
Zitieren
Das ist unter Windows und MSYS nicht sonderlich aussagekräftig:

Code:
$ file ngen_*
ngen_cc.exe.exe: PE32+ executable for MS Windows 5.02 (console), x86-64, 19 sections
ngen_gcc.exe:    PE32+ executable for MS Windows 5.02 (console), x86-64, 19 sections
--------
Warnung! Geschichte kann zu Einsichten führen und verursacht Bewusstsein!
Avatar by: Keven Law (CC BY-SA 2.0)
Zitieren
Wenn du mal eine Datei ohne Dateiendung hast, ist dieses Programm sehr hilfreich.
Hast du schon die neue Version mit dem kleinen Mauszeiger probiert?
Die läuft wesentlich flüssiger.
Zitieren




Benutzer, die gerade dieses Thema anschauen: Crystal, Lippens die Ente, marric1976, 3 Gast/Gäste