myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

Kürzerer Code ist immer schneller?

Willkommen

myGully

Links

Forum

 
Antwort
Themen-Optionen Ansicht
Ungelesen 03.02.14, 12:21   #1
Odatas
Erfahrenes Mitglied
 
Registriert seit: Nov 2011
Beiträge: 651
Bedankt: 326
Odatas ist unten durch! | -158 Respekt PunkteOdatas ist unten durch! | -158 Respekt Punkte
Standard 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.
Odatas ist offline   Mit Zitat antworten
Ungelesen 03.02.14, 13:28   #2
spartan-b292
Echter Freak
 
Benutzerbild von spartan-b292
 
Registriert seit: Mar 2010
Ort: /home/spartan-b292
Beiträge: 2.866
Bedankt: 1.700
spartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punkte
Standard

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 Mitglieder sichtbar. Bitte einloggen oder neu 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.
__________________
"They who can give up essential liberty to obtain a little temporary safety, deserve neither liberty nor safety"
spartan-b292 ist offline   Mit Zitat antworten
Ungelesen 03.02.14, 15:01   #3
eitch100
Agnostiker
 
Benutzerbild von eitch100
 
Registriert seit: Dec 2009
Beiträge: 4.203
Bedankt: 4.436
eitch100 leckt gerne myGully Deckel in der Kanalisation! | 1104671402 Respekt Punkteeitch100 leckt gerne myGully Deckel in der Kanalisation! | 1104671402 Respekt Punkteeitch100 leckt gerne myGully Deckel in der Kanalisation! | 1104671402 Respekt Punkteeitch100 leckt gerne myGully Deckel in der Kanalisation! | 1104671402 Respekt Punkteeitch100 leckt gerne myGully Deckel in der Kanalisation! | 1104671402 Respekt Punkteeitch100 leckt gerne myGully Deckel in der Kanalisation! | 1104671402 Respekt Punkteeitch100 leckt gerne myGully Deckel in der Kanalisation! | 1104671402 Respekt Punkteeitch100 leckt gerne myGully Deckel in der Kanalisation! | 1104671402 Respekt Punkteeitch100 leckt gerne myGully Deckel in der Kanalisation! | 1104671402 Respekt Punkteeitch100 leckt gerne myGully Deckel in der Kanalisation! | 1104671402 Respekt Punkteeitch100 leckt gerne myGully Deckel in der Kanalisation! | 1104671402 Respekt Punkte
Standard

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.
__________________
Der Klügere gibt nach... deshalb regieren die Dummen die Welt
eitch100 ist offline   Mit Zitat antworten
Ungelesen 03.02.14, 16:36   #4
ProgMaster
Banned
 
Registriert seit: Mar 2012
Beiträge: 337
Bedankt: 93
ProgMaster ist noch neu hier! | 0 Respekt Punkte
Standard

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.
ProgMaster ist offline   Mit Zitat antworten
Ungelesen 03.02.14, 18:22   #5
Odatas
Erfahrenes Mitglied
 
Registriert seit: Nov 2011
Beiträge: 651
Bedankt: 326
Odatas ist unten durch! | -158 Respekt PunkteOdatas ist unten durch! | -158 Respekt Punkte
Standard

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.
Odatas ist offline   Mit Zitat antworten
Ungelesen 03.02.14, 19:38   #6
NetWebs
Banned
 
Registriert seit: Aug 2012
Beiträge: 223
Bedankt: 68
NetWebs ist noch neu hier! | 0 Respekt Punkte
Standard

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?
NetWebs ist offline   Mit Zitat antworten
Ungelesen 05.02.14, 05:28   #7
inselberg
Anfänger
 
Registriert seit: Dec 2011
Beiträge: 18
Bedankt: 13
inselberg ist noch neu hier! | 0 Respekt Punkte
Standard

Vergleiche einfach mal Such und Sortier-Algorithmen an und du wirst feststellen dass kürzerer Code nicht schneller sein muss.
inselberg ist offline   Mit Zitat antworten
Ungelesen 06.02.14, 20:58   #8
Beat_Junkie
Anfänger
 
Registriert seit: Oct 2010
Beiträge: 3
Bedankt: 2
Beat_Junkie ist noch neu hier! | 0 Respekt Punkte
Standard

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. ;-)
Beat_Junkie ist offline   Mit Zitat antworten
Ungelesen 06.03.14, 14:18   #9
teezett
Greenhorn
 
Benutzerbild von teezett
 
Registriert seit: Oct 2012
Ort: hinter dem Horizont
Beiträge: 0
Bedankt: 360
teezett gewöhnt sich langsam dran | 18 Respekt Punkte
Standard 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).
teezett ist offline   Mit Zitat antworten
Ungelesen 09.03.14, 10:09   #10
lusio333
Anfänger
 
Registriert seit: Feb 2013
Beiträge: 10
Bedankt: 3
lusio333 ist noch neu hier! | 0 Respekt Punkte
Standard

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.
lusio333 ist offline   Mit Zitat antworten
Ungelesen 08.04.14, 21:26   #11
mythology
Stammi
 
Registriert seit: Aug 2010
Beiträge: 1.145
Bedankt: 589
mythology putzt sich die Zähne mit Knoblauch. | 4672 Respekt Punktemythology putzt sich die Zähne mit Knoblauch. | 4672 Respekt Punktemythology putzt sich die Zähne mit Knoblauch. | 4672 Respekt Punktemythology putzt sich die Zähne mit Knoblauch. | 4672 Respekt Punktemythology putzt sich die Zähne mit Knoblauch. | 4672 Respekt Punktemythology putzt sich die Zähne mit Knoblauch. | 4672 Respekt Punktemythology putzt sich die Zähne mit Knoblauch. | 4672 Respekt Punktemythology putzt sich die Zähne mit Knoblauch. | 4672 Respekt Punktemythology putzt sich die Zähne mit Knoblauch. | 4672 Respekt Punktemythology putzt sich die Zähne mit Knoblauch. | 4672 Respekt Punktemythology putzt sich die Zähne mit Knoblauch. | 4672 Respekt Punkte
Standard

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.
mythology ist offline   Mit Zitat antworten
Ungelesen 15.04.14, 09:29   #12
W47achtel
Erfahrener Newbie
 
Benutzerbild von W47achtel
 
Registriert seit: Sep 2013
Beiträge: 98
Bedankt: 61.892
W47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt PunkteW47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt PunkteW47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt PunkteW47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt PunkteW47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt PunkteW47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt PunkteW47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt PunkteW47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt PunkteW47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt PunkteW47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt PunkteW47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt Punkte
Standard

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ß
__________________
Keine Passwörter
Keine Crypter Captcha
W47achtel ist offline   Mit Zitat antworten
Ungelesen 15.04.14, 17:59   #13
W47achtel
Erfahrener Newbie
 
Benutzerbild von W47achtel
 
Registriert seit: Sep 2013
Beiträge: 98
Bedankt: 61.892
W47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt PunkteW47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt PunkteW47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt PunkteW47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt PunkteW47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt PunkteW47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt PunkteW47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt PunkteW47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt PunkteW47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt PunkteW47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt PunkteW47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt Punkte
Standard

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 Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]

Schönen Tag noch.
__________________
Keine Passwörter
Keine Crypter Captcha
W47achtel ist offline   Mit Zitat antworten
Ungelesen 15.04.14, 19:01   #14
W47achtel
Erfahrener Newbie
 
Benutzerbild von W47achtel
 
Registriert seit: Sep 2013
Beiträge: 98
Bedankt: 61.892
W47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt PunkteW47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt PunkteW47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt PunkteW47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt PunkteW47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt PunkteW47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt PunkteW47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt PunkteW47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt PunkteW47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt PunkteW47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt PunkteW47achtel leckt gerne myGully Deckel in der Kanalisation! | 14331247 Respekt Punkte
Standard

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.
__________________
Keine Passwörter
Keine Crypter Captcha
W47achtel ist offline   Mit Zitat antworten
Ungelesen 15.04.14, 20:03   #15
kernel.panic
Erfahrener Newbie
 
Registriert seit: Nov 2011
Beiträge: 147
Bedankt: 23
kernel.panic ist noch neu hier! | 0 Respekt Punkte
Standard

@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).
kernel.panic ist offline   Mit Zitat antworten
Ungelesen 16.04.14, 18:45   #16
cortez442
Nur der Hamburger SV
 
Benutzerbild von cortez442
 
Registriert seit: Oct 2009
Beiträge: 476
Bedankt: 293
cortez442 ist unten durch! | -165 Respekt Punktecortez442 ist unten durch! | -165 Respekt Punkte
Standard

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.
__________________
Ein Fehler ist aufgetreten: der Vorgang wurde erfolgreich ausgeführt.
cortez442 ist offline   Mit Zitat antworten
Ungelesen 16.04.14, 21:37   #17
kernel.panic
Erfahrener Newbie
 
Registriert seit: Nov 2011
Beiträge: 147
Bedankt: 23
kernel.panic ist noch neu hier! | 0 Respekt Punkte
Standard

Oh, übersehen.
kernel.panic ist offline   Mit Zitat antworten
Antwort


Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:26 Uhr.


Sitemap

().