Wie größere Dateien laden?

Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

DAK

BeitragDi, Apr 20, 2021 16:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Hoch-Assembler? Ist das nicht C? Da kann man ja sogar Inline-Assembler-Teile schreiben.
Gewinner der 6. und der 68. BlitzCodeCompo
 

sinjin

BeitragSa, Okt 09, 2021 23:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Von wegen OPTIMIERUNG, wenn du CONST a%=1 machst und später 5/a, siehe dir mal das Ergebnis an! Er tut es omg ER TUT ES! haha Jep, wie war dos noch? Der Compiler ist besser als jmd der ASM kann? Echt jetzt? Und ich glaube INCLUDES/IMPORTS macht er solange es dasteht, als ob Selbstmodifizierender Code so wichtig ist! Er packt es solange dazu solange du IMPORT/INCLUDE schriebst! Das war in den 90gern besser!

DAK

BeitragDo, Okt 21, 2021 10:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, es gibt schon sehr unterschiedliche Qualitäten an Compilern.

BRL war ja auch eine kleine Bude ohne wirklichem Wissen. Das kann man nicht wirklich vergleichen mit einem C++/Java/C#/...-Compiler, wo über Jahrzehnte hunderte ausgebildete Top-Leute dran arbeiten.

Die Geschwindigkeitsvergleiche zwischen BB/BM und C waren ja auch immer ziemlicher Blödsinn, da sie selten tatsächlich etwas getestet haben, wo der Compiler etwas optimiert.

Heutzutage ist man aber eh schon lang weg davon, dass man sagt, der Hauptzweck des Compilers ist mehr Performance rauszuholen, als ein Assembler-Programmierer. Das war die Idee in den 90ern, bzw frühen 2000ern.

Heutzutage hat man eine Hochsprache (und damit einen Compiler) um:

Größeren Code sinnvoll zu überblicken
Ein paar hundert Zeilen Assembler gehen noch. Aber bei größeren Projekten muss was Anderes her. In der Arbeit haben wir grad ein Projekt, dass seit rund 5 Jahren rennt (unser Teil davon, das gesamte System ist 20 Jahre alt). Unser kleiner Teil, der eine Teilapplikation im gesamten System ist, hat 104k Zeilen Java-Code und 135k Zeilen Groovy-Code für das Backend allein. Dazu kommt noch das Frontend, mit rund 1 Mio Zeilen TypeScript-Code.

Das sind Mengen, die man in ASM niemals überschauen könnte.

Sicherheitslücken zu vermeiden
In Assembler (und auch C) kann man sich ziemlich schön Sicherheitslücken einbauen, die in moderneren Sprachen schlicht unmöglich sind. In Java z.B. sind die ganzen Pointer-basierten Sicherheitslücken (z.B. Buffer over-/underrun, Stackoverflow, ...) einfach nicht möglich, weil man keine Pointer hat.

Programmier-Effizienz zu erhöhen
Seit der Softwarekrise (beginnend in den 60ern) ist es so, dass Hardware schneller ist als die Programmierer. Davor war der Computer der limitierende Faktor in der Software-Entwicklung. Die Computer waren langsamer als der Programmierer, was heißt, der Programmierer hat tatsächlich Code schreiben können, der einen Computer zu 100% ausnutzt und nichts verschwendet.

Aber die Computer sind immer schneller geworden, und die Entwickler sind Menschen geblieben.

Das hat sich in den Werkzeugen nieder geschlagen, die wir als Entwickler verwenden:
-) Hochsprachen und Frameworks/Bibliotheken reduzieren die Arbeit, die wir reinstecken müssen, um etwas fertig zu kriegen. Um einen Webserver mit HTTPS zu starten, braucht man heutzutage nur mehr ein paar wenige Zeilen Code. Muss man sich in Assembler erst mal Funktionen zum korrekten Verarbeiten von Strings zusammen bauen, braucht man für das Selbe Wochen bis Monate an Arbeit.

-) Garbage Collection nimmt uns, auf Kosten von Performance und Konfigurierbarkeit, das manuelle Memory Management komplett ab.

-) Moderne Compiler fangen irrsinnig viele Fehler ab, bevor das Projekt überhaupt kompiliert.

-) Autotest-Frameworks checken den Code auf Richtigkeit, auf Kosten von sehr viel Rechenleistung (unser aktuelles Projekt in der Arbeit vollständig zu Autotesten dauert rund 6 Stunden)

-) Sprachen wie Python opfern extrem viel Performance zu Gunsten von Lesbarkeit und einfacherer Programmierung.

Das äußert sich auch in den Optimierungen, die man heutzutage verwendet
Früher hat man oft Mikrooptimiert. Das heißt, statt dass ich schreib
Code: [AUSKLAPPEN]
a = b + c
d = a*2

schreib ich eher
Code: [AUSKLAPPEN]
d = (b+c)*2

um die eine Zuweisung auf die Variable a zu vermeiden.

Das erhöht die Ausführungsgeschwindigkeit zwar um einen konstanten (und sehr niedrigen) Wert, aber eben nur um einen konstanten Wert. Das zahlt sich meistens nicht aus.

Stattdessen schaut man heutzutage hauptsächlich auf algorithmische Optimierungen. Wenn man es z.B. zwei Listen vergleichen will, und alle Elemente einer Liste finden will, die in beiden Listen enthalten sind, dann kann man jedes Element der einen Liste mit jedem Element der anderen Liste vergleichen.

Sagen wir, die erste Liste hat a Elemente, die zweite Liste hat b Elemente.

Vergleicht man alle mit allen, dann braucht man a*b Vergleiche.

Wenn man stattdessen beide Listen vorher sortiert (z.B. mit Quicksort), dann braucht man nur mehr a+b Vergleiche. Das Sortieren mit Quicksort kostet vorher im Durchschnitt a*log(a) bzw b*log(b) Vergleiche.

Nehmen wir an a = b = 1000, dann braucht unsere ursprüngliche Methode 1 mio. Vergleiche.
Die verbesserte Variante braucht 1000*log(1000)*2 + 1000+1000 = 8000 Vergleiche, und ist damit mehr als 100x so schnell. Und wenn die Listen noch größer sind, dann wird der Effekt größer (z.B. sind es
1 mio. Elementen bei der optimierten Variante 16 mio. Vergleiche, während die originale Variante mit 1 bio. Vergleichen über 60 000 Mal so lange braucht).

Das sind Optimierungen, die sich wirklich auszahlen.

Im echten Leben hab ich das schon oft gesehen, wo ich z.B. Verarbeitungen, die original über eine halbe Stunde gedauert haben, auf unter eine Sekunde gebracht hab.

Alles in Allem: Rechnet man Arbeitszeit als Kosten, dann ist es in vielen Fällen billiger, dem Programmierer Arbeit zu ersparen, als dem Computer.

und... Optimier dort, wo es was bringt.
Gewinner der 6. und der 68. BlitzCodeCompo

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group