Frage

Wenn Moores Gesetz gilt, und CPUs / GPUs werden immer schneller wird die Software (und durch Assoziation, Sie Software-Entwickler) schieben immer noch die Grenzen in dem Maße, dass Sie noch brauchen, um Ihren Code zu optimieren? Oder wird eine naive faktorielles Lösung für Ihren Code gut genug sein (usw.)?

War es hilfreich?

Lösung

Schlechter Code kann immer CPU-Geschwindigkeit überwinden.

Für ein hervorragendes Beispiel, gehen Sie zu diesem Coding Horror Spalte und blättern bis auf den Abschnitt beschreibt das Buch Programmierung Pearls . Reproduzierte ein Diagramm zeigt, wie für einen bestimmten Algorithmus, ein TRS-80 mit einem 4.77MHz 8-Bit-Prozessor, der einen 32-Bit-Alpha-Chip schlagen kann.

Der aktuelle Trend in speedups ist mehr Kerne hinzuzufügen, denn machen einzelne Kerne schneller gehen ist hart . So Aggregat Geschwindigkeit nach oben geht, aber lineare Aufgaben nicht immer profitieren.

Der Spruch „gibt es kein Problem, dass rohe Gewalt und Ignoranz nicht überwinden können“ ist nicht immer wahr.

Andere Tipps

2x die Rechenleistung nicht viel tun, um die Schrecklichkeit der lausigen n ^ 2 Suche zu verbessern.

Die schnelleren Computer werden, desto mehr wir erwarten, dass sie tun.

Ob es schneller Code für mehr Polygone in einem Videospiel oder schnellere Algorithmen für die Finanzmärkte den Handel, wenn es ein Wettbewerbsvorteil ist, schneller zu sein, Optimierung wird immer noch von Bedeutung sein. Sie müssen nicht den Löwen outrace, die Sie und Ihr Kumpel jagt -. Sie müssen nur Ihre Kumpel outrace

Bis alle Programmierer optimalen Code zum ersten Mal schreiben um, wird es immer ein Platz für die Optimierung sein. Inzwischen hat die eigentliche Frage ist diese: Was sollten wir zuerst optimieren

Moores Gesetz spricht darüber, wie viele Transistoren wir auf einem Chip packen können - es hat nichts zu sagen über diese Transistoren als zunehmend schnelle Geschwindigkeit schalten zu können. Tatsächlich haben mehr in den letzten Jahren Taktfrequenzen oder weniger stagnieren - wir halten nur mehr und mehr „Kern“ (vollständigen CPUs, im Wesentlichen) bekommen pro Chip. Um die Vorteile, dass die Parallelisierung des Codes erfordert, so dass, wenn Sie schreiben „naiv“ der magische Optimierer der Zukunft wird im Code versteckt Parallelität herauszufinden, beschäftigt sein, so dass es es an mehreren Kern Farm kann (realistische, für die absehbaren Zukunft, werden Sie Ihre Compiler viel zu helfen, haben aus; -).

Wirth Gesetz :

  

Software wird immer langsamer schneller als Hardware wird schneller.

P. S. Auf einer ernsteren Anmerkung: Da das Rechenmodell Verarbeitung parallel bewegt, wird Code-Optimierung wichtiger. Wenn Sie Ihren Code 2x optimieren und es läuft 5 min anstelle von 10 min auf 1 einzige Box, kann es nicht so beeindruckend sein. Der nächste Rechner mit 2-facher Geschwindigkeit wird dies kompensieren. Aber stellen Sie von Ihnen führen Sie Ihr Programm auf 1000 CPUs. Dann speichert jede Optimierung VIEL Maschinenzeit. Und Strom. Optimieren und die Erde retten! :)

scheinen Computational Aufgaben in etwa zwei große Gruppen unterteilt werden.

  1. Probleme mit beschränktem Rechenbedarf.
  2. Probleme mit unbeschränktem Rechenbedarf.

Die meisten Probleme fit in dieser ersten Kategorie. Zum Beispiel Echtzeit-3D-Rasterung. Für eine gute lange Zeit, dieses Problem war, außerhalb der Reichweite von typischer Unterhaltungselektronik. Keine überzeugenden 3D-Spiele oder andere Programme bestanden, dass Echtzeit-Welten auf einem Apple] [produzieren könnte. Schließlich fing aber, Technologie, und jetzt ist dieses Problem erreichbar. Ein ähnliches Problem ist die Simulation der Proteinfaltung. Bis vor kurzem war es unmöglich, eine Know-Peptidsequenz in das resultierenden Protein-Molekül zu transformieren, aber die moderne Hardware ermöglicht dies in wenigen Stunden oder Minuten der Verarbeitung.

Es gibt ein paar Probleme aber, dass die ihrer Natur nach zur Verfügung alle die Rechenressourcen aufnehmen kann. Die meisten davon sind dynamische physikalische Simulationen. Offensichtlich sein mögliches ein Rechenmodell von, sagen wir, das Wetter auszuführen. Wir haben das getan, fast so lange, wie wir Computer gehabt haben. Jedoch ist ein solches komplexes System profitiert von erhöhter Genauigkeit. Simulation in immer feineren Raum und Zeitauflösung verbessert die Vorhersagen Bit-für-Bit. Aber egal, wie viel Genauigkeit jede gegebene Simulation hat, gibt es Raum für mehr Genauigkeit, mit Vorteile, die folgt.

Beiden Arten von Problemen haben einen sehr großen Einsatz für die Optimierung aller Art. Der zweite Typ ist ziemlich offensichtlich. Wenn das Programm die Simulation zu tun ein wenig verbessert wird, dann läuft es etwas schneller, die Ergebnisse ein wenig früher oder mit etwas mehr Genauigkeit zu geben.

Die erste ist ein bisschen subtiler, though. Für einen bestimmten Zeitraum, ist kein Betrag der Optimierung lohnt sich, da gibt es keine Computer, dass es schnell genug ist. Nach einer Weile ist die Optimierung etwas sinnlos, da die Hardware, die es läuft ein Vielfaches schneller als nötig ist. Aber es gibt ein schmales Fenster, in dem eine optimale Lösung in akzeptabler Weise auf aktuelle Hardware ausgeführt werden, sondern eine suboptimale Lösung gewohnt. während dieser Zeit kann sorgfältig in Betracht gezogen Optimierung der Unterschied zwischen einem First-to-Market zu gewinnen Produkt und ein lief auch.

Es gibt mehr zu Optimierung als die Geschwindigkeit. Moores Gesetz gilt nicht für Computerspeicher. Auch Optimierung ist oft der Prozess Ihren Code zu kompilieren Vorteil der CPU-spezifischen Anweisungen zu nehmen. Dies sind nur einige der viele Optimierungen ich daran denken kann, nicht durch schnelleren CPUs gelöst werden.

Die Optimierung wird immer notwendig sein, denn der mildernden Umstand zu Moores Gesetz ist Bloatware .

Andere Antworten scheinen auf der Geschwindigkeit Seite des Problems zu konzentrieren. Das ist gut. Das eigentliche Problem, das ich sehe, ist, dass, wenn Sie Ihren Code optimieren, es wird weniger Energie nehmen, um sie auszuführen. Ihr Rechenzentrum läuft kühles, Laptop- oder länger dauert, Ihr Telefon für mehr geht als einen Tag auf einer Gebühr. Es ist ein echter Selektionsdruck an diesem Ende des Markts.

Die Optimierung wird auch weiterhin in vielen Situationen benötigt werden, insbesondere:

  • Echtzeit-Systeme, bei denen CPU-Zeit an einer Prämie

  • Embedded Systeme, bei denen Speicher Speicher an einer Prämie ist

  • Server, in dem viele Prozesse Aufmerksamkeit fordern gleichzeitig

  • Spiele, in denen 3-D-Raytracing, Audio, AI und Vernetzung können für ein sehr anspruchsvolles Programm machen

Die Welt verändert sich, und wir müssen mit ihr ändern. Als ich begann, war ein guter Programmierer zu sein alles über all die kleinen Mikro-Optimierungen zu wissen, was Sie tun könnten ein weiteres 0,2% aus einer Routine zu quetschen durch Zeiger in C, und anderen Dingen wie die Manipulation. Jetzt verbringe ich viel von meiner Zeit arbeiten daran, Algorithmen mehr verständlich, da auf lange Sicht, dass mehr wert ist. Aber - es gibt immer Dinge zu optimieren und immer Engpässe. Mehr Ressourcen bedeuten, dass Menschen mehr von ihren Systemen erwarten, so nachlässig zu sein, ist keine gültige Option zu einem professionellen.

Optimierungsstrategien ändern, wie Sie mehr Geschwindigkeit / Speicher / Ressourcen hinzufügen, mit zu arbeiten, though.

Einige Optimierung hat nichts mit Geschwindigkeit zu tun. Wenn zum Beispiel Multi-Thread-Algorithmen zu optimieren, können Sie eine Verringerung der Gesamtzahl der gemeinsamen Sperren werden optimiert. Das Hinzufügen von mehr Rechenleistung in Form von Geschwindigkeit (oder noch schlimmer, Prozessoren) kann keine Auswirkungen, wenn Ihre aktuelle Verarbeitungsleistung auf Sperren ausgegeben wartet .... Prozessoren hinzufügen kann sogar Ihren gesamten Leistungsabfall, wenn Sie Dinge tun falsch . Optimierung bedeutet in diesem Fall versuchen, die Anzahl der Sperren zu reduzieren, und hält sie so fein wie möglich körnigen anstatt zu versuchen, die Anzahl von Befehlen zu reduzieren.

Solange einige Leute langsam Code schreiben, die übermäßigen Ressourcen nutzt, andere haben ihren Code optimieren schneller diese Ressourcen zur Verfügung zu stellen und die Geschwindigkeit zurück.

Ich finde es erstaunlich, wie kreativ einige Entwickler können suboptimalen Code erhalten zu schreiben. Bei meinem vorherigen Job, schrieb ein Mann eine Funktion, um die Zeit zwischen zwei Daten zu berechnen, indem continuning zum Beispiel eines Datum und zu vergleichen, zu erhöhen.

Die Geschwindigkeit des Computers kann nicht immer menschliche Fehler überwinden. Die Fragen könnten formuliert werden „ Will CPUs werden ausreichend schnell , dass Compiler die Zeit nehmen können fangen (und fix) Umsetzungsprobleme .“ Offensichtlich wird Code-Optimierung benötigt werden (für die absehbare Zukunft) zu beheben Shlemiel den Maler -Typ Probleme.

Software-Entwicklung ist nach wie vor darum, den Computer zu sagen genau was zu tun ist. Was „immer schneller“ CPUs wird uns geben, ist die Fähigkeit, Design zunehmend abstrakt und natürliche Programmiersprachen , was schließlich zu dem Punkt, in den Computer unsere Absichten nehmen und umzusetzen all Low-Level-Details ... einen Tag .

Genießen,

Robert C. Cartaino

Ein Computer ist wie ein Jugendzimmer.

Es wird nie groß genug sein alle Junk zu halten.

ich denke, das Ergebnis von all dem ist, dass Rechenleistung wird immer billiger, so dass der Programmierer weniger Zeit, um eine bestimmte Aufgabe zu erfüllen verbringen können. Zum Beispiel höhere Programmiersprachen wie Java oder Python, sind fast immer langsamer als untere Sprachen wie Versammlung. Aber es ist so viel einfacher für die Programmierer, die neuen Dinge möglich sind. Ich denke, das Ziel-Ende wird sein, dass Computer in der Lage sein werden, direkt mit den Menschen zu kommunizieren, und kompiliert die menschliche Sprache in Byte-Code. Dann wird nicht mehr Programmierer existieren. (Und Computer der Welt übernehmen könnten)

Richtig oder falsch, es passiert schon meiner Meinung nach, und es ist nicht immer unbedingt eine schlechte Sache. Bessere Hardware tut vorhanden Möglichkeit für die Entwickler auf die Lösung des Problems auf der Hand, mehr Energie zu konzentrieren, als sich Gedanken über die zusätzlichen 10% der Speicherauslastung.

Die Optimierung ist inarguable, aber nur, wenn es gebraucht wird. Ich denke, die zusätzliche Hardware Leistung einfach ist die Instanzen abnimmt, wo sie wirklich benötigt wird. Doch wer schreibt die Software den Space-Shuttle zum Mond starten besser haben seinen Code optimiert:)

Da Computer etwa tausendmal schneller sind, als sie vor einigen Jahrzehnten waren, aber im Allgemeinen nicht viel schneller erscheinen, würde ich sagen, dass wir einen langen Weg zu gehen, bevor wir über die Optimierung aufhören, sich Sorgen. Das Problem ist, dass Computer immer leistungsfähiger werden, haben wir die Computer für uns mehr und mehr Arbeit zu tun, so dass wir auf einer höheren Abstraktionsebene arbeiten können. Optimierung auf jeder Ebene der Abstraktion bleibt wichtig.

Ja, Computer tun viele Dinge viel schneller: Sie können eine Mandelbrot in Minuten ziehen die Tage Rechenzeit benötigen verwendet. Ein GIF lädt nahezu augenblicklich, anstatt sichtbar Sekunden unter auf dem Bildschirm gezeichnet werden. Viele Dinge sind schneller. Aber Browsing, zum Beispiel, ist das nicht viel schneller. Textverarbeitung ist nicht so viel schneller. Da Computer leistungsfähiger zu bekommen, wir einfach mehr erwarten, und wir machen Computer tun mehr.

Die Optimierung wird für die absehbare Zukunft wichtig sein. Allerdings Mikro-Optimierungen ist weit weniger wichtig als früher sein. Die wichtigste Optimierung in diesen Tagen kann Wahl des Algorithmus sein. Sie arbeiten im O wählen (n log n) oder O (n ^ 2) .... etc.

Die Kosten für die Optimierung ist sehr gering, so bezweifle ich, wird es notwendig, es fallen zu lassen. Das eigentliche Problem ist, Aufgaben zu finden, die Rechen aller Macht zu nutzen, die es gibt - so anstatt Optimierung zu fallen, werden wir unsere Fähigkeit, werden die Optimierung Dinge zu tun, in parallel .

Schließlich werden nicht wir in der Lage sein, schneller zu bekommen, schließlich werden wir daher durch den Raum begrenzt, warum Sie neue Prozessoren unter 3GHZ und Multi-Core .. Also ja Optimierung ist immer noch ein neccessity.

siehe

Optimierung Code wird immer bis zu einem gewissen Grad erforderlich sein und nicht nur die Ausführungsgeschwindigkeit zu beschleunigen und untere Speichernutzung. Das Finden der optimalen energieeffizienten Verfahren zur Verarbeitung von Informationen wird eine wichtige Anforderung in Datenzentren zum Beispiel. Profilierungs Fähigkeiten werden viel wichtiger werden!

Ja, wir sind an dem Punkt, wo Optimierungsfragen und wird in absehbarer Zeit da sein. Denn:

  • RAM-Geschwindigkeiten erhöhen bei geringerem Tempo als CPU-Geschwindigkeiten. So gibt es eine noch breite werdende Leistungslücke zwischen CPU und RAM, und wenn Ihr Programm greift vielen RAM, müssen Sie Zugriffsmuster optimieren Cache effizient zu nutzen. Ansonsten ist die superschnelle CPU im Leerlauf 90% der Zeit sein wird, die nur darauf wartet für die Daten zu gelangen.
  • Die Anzahl der Kerne steigt und steigt. Gibt es in Ihrem Code Nutzen von jedem hinzugefügt Kern oder auf einem einzelnen Kern läuft? Hier Optimierung bedeutet, Parallelisierung und in Abhängigkeit von der Aufgabe in der Hand, kann es schwierig sein.
  • CPU-Geschwindigkeiten werden nie mit exponentiellen Algorithmen und anderen Brute-Force-Arten von Dingen aufholen. Wie schön dieses beantworten .

Lassen Sie uns hoffen Netzwerk-Geschwindigkeiten Schritt halten, damit wir genügend Daten über den Draht schaufeln mit den CPUs zu halten ...

Wie bereits erwähnt, wird es immer Engpässe

Angenommen, Ihre CPU so viele Transistoren wie die Anzahl der subatomaren Teilchen im Universum hat, und seine Uhr läuft bei der Frequenz von harten kosmischen Strahlung, man kann es immer noch schlagen.

Wenn Sie vor dem neuesten CPU-Takt zu bleiben, fügen Sie einfach eine andere Ebene der Verschachtelung in Loops oder einem anderen Ebene der Verschachtelung in Ihrem Subroutinenaufrufe hinzuzufügen.

Oder wenn Sie wirklich professionell sein wollen, fügen Sie eine weitere Abstraktionsebene.

Es ist nicht schwer: -)

Auch wenn CPUs schneller und schneller, können Sie immer optimieren

  • Netzwerkdurchsatz,
  • Platte sucht,
  • Festplattennutzung,
  • Speichernutzung,
  • Datenbank-Transaktionen,
  • Anzahl der Systemaufrufe,
  • Scheduling und Verriegelungs Granularität,
  • Garbage Collection.

(das ist die reale Welt Beispiele, die ich während der letzten Hälfte gesehen habe im Jahr).

Verschiedene Teile von komplexen Computersystemen an verschiedenen Stellen der Rechen Geschichte teuer angesehen. Sie müssen die Engpässe zu messen und zu beurteilen, wo die Bemühung setzen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top