Willkommen |
|
myGully |
|
Links |
|
Forum |
|
|
|
 |
03.02.14, 12:21
|
#1
|
Erfahrenes Mitglied
Registriert seit: Nov 2011
Beiträge: 648
Bedankt: 326
|
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.
|
|
|
03.02.14, 13:28
|
#2
|
Echter Freak
Registriert seit: Mar 2010
Ort: /home/spartan-b292
Beiträge: 2.856
Bedankt: 1.701
|
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"
|
|
|
03.02.14, 15:01
|
#3
|
Agnostiker
Registriert seit: Dec 2009
Beiträge: 4.429
Bedankt: 4.845
|
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
|
|
|
03.02.14, 16:36
|
#4
|
Banned
Registriert seit: Mar 2012
Beiträge: 337
Bedankt: 93
|
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.
|
|
|
03.02.14, 18:22
|
#5
|
Erfahrenes Mitglied
Registriert seit: Nov 2011
Beiträge: 648
Bedankt: 326
|
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.
|
|
|
03.02.14, 19:38
|
#6
|
Banned
Registriert seit: Aug 2012
Beiträge: 223
Bedankt: 68
|
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?
|
|
|
05.02.14, 05:28
|
#7
|
Anfänger
Registriert seit: Dec 2011
Beiträge: 19
Bedankt: 16
|
Vergleiche einfach mal Such und Sortier-Algorithmen an und du wirst feststellen dass kürzerer Code nicht schneller sein muss.
|
|
|
06.02.14, 20:58
|
#8
|
Anfänger
Registriert seit: Oct 2010
Beiträge: 3
Bedankt: 2
|
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
1 LOC; 4 CPU-cycles
Das Beste: die Anzahl der Cycles hängt auch noch komplett vom verwendeten Prozessormodell ab. ;-)
|
|
|
06.03.14, 14:18
|
#9
|
Greenhorn
Registriert seit: Oct 2012
Ort: hinter dem Horizont
Beiträge: 0
Bedankt: 360
|
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).
|
|
|
09.03.14, 10:09
|
#10
|
Anfänger
Registriert seit: Feb 2013
Beiträge: 10
Bedankt: 3
|
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.
|
|
|
08.04.14, 21:26
|
#11
|
Stammi
Registriert seit: Aug 2010
Beiträge: 1.142
Bedankt: 589
|
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.
|
|
|
15.04.14, 09:29
|
#12
|
Erfahrener Newbie
Registriert seit: Sep 2013
Beiträge: 98
Bedankt: 61.892
|
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
|
|
|
15.04.14, 17:59
|
#13
|
Erfahrener Newbie
Registriert seit: Sep 2013
Beiträge: 98
Bedankt: 61.892
|
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
|
|
|
15.04.14, 19:01
|
#14
|
Erfahrener Newbie
Registriert seit: Sep 2013
Beiträge: 98
Bedankt: 61.892
|
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
|
|
|
15.04.14, 20:03
|
#15
|
Erfahrener Newbie
Registriert seit: Nov 2011
Beiträge: 147
Bedankt: 23
|
@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).
|
|
|
16.04.14, 18:45
|
#16
|
Nur der Hamburger SV
Registriert seit: Oct 2009
Beiträge: 476
Bedankt: 293
|
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.
|
|
|
16.04.14, 21:37
|
#17
|
Erfahrener Newbie
Registriert seit: Nov 2011
Beiträge: 147
Bedankt: 23
|
Oh, übersehen.
|
|
|
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
HTML-Code ist Aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:05 Uhr.
().
|