myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   Kürzerer Code ist immer schneller? (https://mygully.com/showthread.php?t=3190352)

Odatas 03.02.14 12:21

Kürzerer Code ist immer schneller?
 
Mir ist in den letzten Tagen eine These durch den Kopf geschwirrt. Ist kürzerer Code immer schneller?

Als Programmierer versucht man ja sein Programm so leistungsstark wie möglich zu entwerfen. Je mehr Zeilen Code man dann hat desto mehr muss auch abgearbeitet werden. Folglich braucht man bei mehr Zeilen Code länger. Aber ist das wirklich so?

Kennt ihr Beispiele oder könnte welche Konstruieren wo Code der länger ist schneller läuft? Und kommt mir jetzt nicht mit Funktionen. Es geht um das was abgearbeitet wird. Immer wenn ich eine Funktion aufrufe steht dahinter ja auch Code der abgearbeitet wird. Dieser würde dann immer beim Aufruf dazu gezählt werden.

spartan-b292 03.02.14 13:28

Theoretisch brauchst du je mehr Code du hast, mehr Anweisungen, damit mehr CPU-Zyklen und damit mehr Zeit.

Praktisch kann es aber sein dass du einfach mehr Anweisungen brauchst um eine bessere Lösung für dein Probmen zu finden. Angenommen du willst (in C) Textdateien einlesen, außerdem nehmen wir an dass die Dateien ein paar GB groß sind. Wenn du so große Dateien einlesen willst ist es Sinnvoll, unter Linux, [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...] zu verwenden. Das machst du in C unter Linux mit madvise(). Wenn du jetzt also madvise() in dein Programm packst, hast du mehr Code, brauchst vermtl mehr CPU-Zyklen aber die Verarbeitung deiner Textdatei geht wesentlich schneller.

eitch100 03.02.14 15:01

Also wenn man z.B. in Excel mit VBA Zellen vergleicht und dann bei irgendeiner erfüllten Bedingung etwas in eine bestimmte Zelle schreibt, kann das schon ziemlich lange dauern. Deshalb bietet es sich einfach an, zunächst zu überprüfen, ob der Zellinhalt bereits mit den zu schreibenden Daten übereinstimmt, um dann den Schreibvorgang zu überspringen. Das spart richtig Laufzeit...

VBA war wahrscheinlich jetzt nicht in deinem Sinne, aber prinzipiell stimmt's... Lese- und Schreibvorgänge durch zusätzlichen Code einsparen, ist daher aus meiner Sicht immer sinnvoll.

ProgMaster 03.02.14 16:36

Die These ist ziemlich unsinnig.
Man kann ja 1000 Anweisungen in eine Methode packen. Ist die Ausführung deshalb schneller?

Des Weiteren habe ich noch nie erlebt, dass man versucht nach Performance zu programmieren. In erster Linie programmiert man nach SOLID, OOP- Paradigmen und entsprechenden Schichtmodellen.
Wartbarkeit ist wichtiger als reine Performance.

Ich habe EA einmal erlebt, dass jemand der Meinung war, dass Architekturhilfen und Frameworks (ORM, SOA, DI-Container usw) verzichtet hat, da die Projizierungen ja performancelastig sind...dabei rausgekommen ist reiner Müll, der nicht funktions fähig war.

Odatas 03.02.14 18:22

Ich denke es ist ganz Stark abhängig davon in welchem Feld du bist worauf der Focus liegt ProgMaster. Wenn ich eine Determinanter einen 100.000 x 100.000 Matrix erechnen möchte, dann kommt es schon auf Performance an. Wenn du wie bei Google Millionen Suchergebnisse innerhalb von 0,001233 Sekunden ausgeben möchtest, auch dann kommt es auf Schnelligkeit an.

Das mit dem Kopieren ist aber ein gutes Beispiel. Es dauert länger dass man alles kopiert anstatt zu schauen ob es schon vorhanden ist und nur das zu Kopieren was man wirklich braucht. Wobei dass ja 2 von der Anwendung her verschiedene Dinge sind.

Aber jetzt so richtig die Komplett gleiche Anwendung nur anders programmieren? Es wird bestimmt Beispiele geben bei denen es Rekursion und Iteration geben kann. Vielleicht dann sogar dass das was mehr Codezeilen benötigt schneller ist. Wobei dass dann eher an der Änderung des Algorithmus liegen wird.

NetWebs 03.02.14 19:38

Odata, das ist so aber einfach ziemlicher Quatsch.

1. Jede moderne Programmiersprache wird kompiliert. Aus einer Zeile Code können mehr Anweisungen erfolgen als aus mehreren Hundert. Mach Dir mal Gedanken zu syntaktischem Zucker. Das allein reicht schon um deine These zu widerlegen.

2. Mehr CPU Anweisungen = mehr Ausführungsdauer...das würde schon mehr Sinn machen, ist aber auch nicht richtig. Wenn die Ausführung parallelisierbar ist, dann kommt es letztendlich auf eine gute Lastverteilung an. Und dann ist es auch wiederum die Wahl eines Algorithmus.

Wie Du siehst ist deine These sehr leicht zu widerlegen.
Des Weiteren wird auch Google Frameworks einsetzen (teilweise schreiben die diese ja selbst) die die Architektur verbesseren, aber die Anzahl der Anweisungen erhöht.

Kann man ein kurzes Wort schneller aussprechen als ein langes?

inselberg 05.02.14 05:28

Vergleiche einfach mal Such und Sortier-Algorithmen an und du wirst feststellen dass kürzerer Code nicht schneller sein muss.

Beat_Junkie 06.02.14 20:58

Diese These ist definitiv falsch.
Ganz "unter der Haube" kommt es darauf an, wieviele CPU-cycles ein Opcode zur Ausführung braucht.
Und es gibt nun mal Opcodes die z.B. 1 cycle brauchen (mov == Werte verschieben) und welche, die deutlich mehr brauchen (z.B. 4 für imul == (signed) Integer Multiplikation).

Ich könnte also schreiben:
Code:

mov eax, [ebx];
mov eax, [ebx];
mov eax, [ebx];
mov eax, [ebx];

4 LOC; 4 CPU-cylces

Code:

imul ebx;
1 LOC; 4 CPU-cycles

Das Beste: die Anzahl der Cycles hängt auch noch komplett vom verwendeten Prozessormodell ab. ;-)

teezett 06.03.14 14:18

Langer Code = schneller ?
 
Es ist schon möglich, dass langer Code schneller ist als kurzer - Beispiel FOR-Schleifen

haben häufig einen ziemlichen Overhead an Code, wird dann z.B. noch ein Array mit der FOR-Variablen angesprochen

For i=1 to 10 Array[i]:= irgendwas ...

ist es i.d.R. deutlich schneller Array[1]:= ... Array[10]:= zu schreiben

zumal viele Compiler Array[1] direkt mit der Speicheradresse auflösen und nicht in jeder
FOR Schleife die Speicheradresse berechnen.

Andererseits kann auch sehr viel von der Zielmaschine abhängen, hat der Prozessor (Pentium etc.) die komplette Schleife im Cache oder muss er mühsam jeden Befehl aus dem Speicher laden (8-bit 8051).

lusio333 09.03.14 10:09

Es gibt wenige Anwendungsfälle, wo kürzerer Code vielleicht die lesbarkeit verbessert aber nicht zwangsläufig die Performance. Oftmals wird auch auf ein Framework zurückgegriffen aber selbst hierbei heißt es nicht gleich = wenig eigener Code = mehr Performance.

Zu allererst sollte der Code sauber sein. Strukturen und Methoden einer OOP-Angewandten Sprache sollten eingehalten werden und der Code sollte stabil laufen.
Danach kann man sich Gedanken über die Performance machen.

Es gibt auch recht wenige Beispiele wo RTC zur Anwendung kommt.

Und Selbst bei Suchmaschinen wie Google kommen bei Berechnungen a) mehrere vernetzte System und b) eigene Frameworks zum Einsatz.

mythology 08.04.14 21:26

Es kommt darauf an was für Funktionen man nutzt und auf die CPU.

Ich beziehe mich jetzt auf SPS Programme dort dauert z.b. auf einer der aktuellsten CPU's eine Bit Operation 1ns und eine Wortoperation (16 Bit) im schnitt 3ns (hängt auch davon ab was für eine Operation gibt genaue Listen dafür)

Ist jetzt nur eine Beispielrechnung also die Werte stimmen nicht ganz.

Vergleiche ich 2 Worte im und nach dem Schema
Und Bit 1
Und Bit 2
Ist Bit 3

Benötige ich 3 Bit Operationen für 1 Bit also x16 ist 48 Operationen sind 48ns

Mache ich das Ganze als Wort
Und Wort1
Und Wort2
Ist Wort 3

Benötige ich 3 Wortoperationen und bin bei 9ns.

Es kommt darauf an wie Maschinennah man Programmiert, wenn eine Programmiersprache Kompiliert wird kann es sich wieder ganz anders verhalten.
Aber am Ende kommt es immer darauf an was für Operationen habe ich und wie schnell kann meine CPU diese bearbeiten.

W47achtel 15.04.14 09:29

Am schnellsten wäre der Code in 0 und 1.Der wäre sehr lang. Es kommt eher darauf an was mit dem Code passiert, welche Sprachen genutzt werden u s w. Daher ist die Aussage kurz = besser für mich nicht richtig.
Gruß

W47achtel 15.04.14 17:59

Kanu willste Haare spalten?
Es geht darum eine gestellte Frage zu beantworten. Soviel zum Inhalt.

Klar Windows, Linux und Co arbeiten natürlich alles gleich schnell ab ;-) .... türlich



[Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]

Schönen Tag noch.

W47achtel 15.04.14 19:01

Betrachte die Frage. Es geht darum ob kürzerer Code IMMER schneller ist. Diskutier doch nicht über die Effizenz von Programmsprachen?!? Es geht doch nicht darum ob ein Prozessor Langsamer arbeitet. Tust du die selbe Sache auf unterschiedliche Weise, brauchst du unterschiedlich Zeit. Es lässt sich aber nicht aus der Länge eines Codes ableiten, wie Effizent oder schnell der Code seine Aufgabe verrichtet.

kernel.panic 15.04.14 20:03

@wachtel: Dass Maschinencode (!= Assembler!) "am schnellsten", dabei jedoch "am längsten" ist, ist zwar formal richtig, aber die Frage betreffend reiner Blödsinn. Wenn, dann müsstest du zwei Stück Code in Maschinencode vergleichen, die exakt das selbe machen, aber eine unterschiedliche Länge haben.

Sinn des Compilers ist es ja u.a., neben der Erzeugung von Maschinencode auch die Optimierung von Code. Es kann also durchaus sein, dass zwei unterschiedlich lange Code Stücke am Ende genauso schnell sind, da sie vom Compiler optimiert und kompiliert werden.

Ich glaube die ursprüngliche These kann mit Ja beantwortet werden, solange kein Gegenbeispiel gefunden ist (was schwierig sein dürfte, aber ich denke keinesfalls unmöglich).

cortez442 16.04.14 18:45

Die Gegenbeispiele sind doch schon da gewesen: Sortieralgorythmen. Bubblesort lässt sich in wenigen Zeilen Code erstellen, ist aber verdammt langsam. Andere Verfahren sind zwar vom Code her länger, werden aber weit schneller abgearbeitet, da sie effizienter sind.

kernel.panic 16.04.14 21:37

Oh, übersehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:02 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.