Schnelligkeit von While ?

Hallo,

ist es irgendwie möglich, die Geschwindigkeit von der While Schlaufe zu erhöhen?
(Ich habe ein Programm programmiert, das gibt ganz viele Zahlen aus, und das dauert. geht das auch schneller?)

Bitte helft mir!

mfg

Doran

Als erstes seien mal die Grundsachen zum optimieren einer schleife zu beachten.

http://de.wikipedia.org/wiki/Compiler#Optimierung_vo…

_Optimierung von Schleifen [Bearbeiten]

Insbesondere Schleifen versucht man zu optimieren, indem man z. B.

* möglichst viele Variablen in Registern hält (normalerweise mindestens die Schleifenvariable).
* statt eines Index, mit dem auf Elemente eines Feldes (englisch array) zugegriffen wird, Zeiger auf die Elemente verwendet. Dadurch wird der Aufwand beim Zugriff auf Feldelemente geringer.
* Berechnungen innerhalb der Schleife, die in jedem Durchlauf dasselbe Ergebnis liefern, nur einmal vor der Schleife ausführt.
* zwei Schleifen, die über denselben Wertebereich gehen, zu einer Schleife zusammenfasst. Damit fällt der Verwaltungsaufwand für die Schleife nur einmal an.
* die Schleife teilweise oder (bei Schleifen mit konstanter, niedriger Durchlaufzahl) komplett auflöst (englisch loop unrolling), sodass die Anweisungen innerhalb der Schleife mehrfach direkt hintereinander ausgeführt werden, ohne dass jedesmal nach den Anweisungen eine Prüfung der Schleifenbedingung und ein Sprung zum Schleifenbeginn erfolgen.
* die Schleife (vor allem bei Zählschleifen mit for) umgedreht wird, da beim Herunterzählen auf 0 effiziente Sprungbefehle (Jump-Not-Zero) benutzt werden können.
* die Schleife umformt, damit die Überprüfung der Abbruchbedingung am Ende der Schleife durchgeführt wird (Schleifen mit Anfangsüberprüfung haben stets eine bedingte und eine unbedingte Sprunganweisung, während Schleifen mit Endüberprüfung nur eine bedingte Sprunganweisung haben).
* wenn eine Schleife (nach einigen Optimierungen) einen leeren Rumpf besitzt, sie ganz entfernen kann. Dies kann allerdings dazu führen, dass Warteschleifen, die ein Programm absichtlich verlangsamen sollen, entfernt werden. Allerdings sollten für diesen Zweck, soweit möglich, sowieso möglichst Funktionen des Betriebssystems benutzt werden._

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

ist es irgendwie möglich, die Geschwindigkeit von der While
Schlaufe zu erhöhen?
(Ich habe ein Programm programmiert,

Wo denn? Ich habe gar keines gefunden?

das gibt ganz viele
Zahlen aus, und das dauert. geht das auch schneller?)
Bitte helft mir!

Grüße

CMБ

Hallo Doran,

ist es irgendwie möglich, die Geschwindigkeit von der While
Schlaufe zu erhöhen?
(Ich habe ein Programm programmiert, das gibt ganz viele
Zahlen aus, und das dauert. geht das auch schneller?)

Ziemlich mau Deine Angabe (Beispielprogramm, Kompiler, Betriebssystem)

Bei mir (gcc-4.0.3, GNU/Linux) ist der Knackpunkt der Ausgabe nicht die Schleife (Test mir for) sondern die Darstellung auf dem Bildschirm:

$ cat zaehle\_bis\_10000.c
#include 
int main(){int i;for(i=0;i/dev/null
real 0m0.025s
user 0m0.008s
sys 0m0.008s

Um den Schleifendurchlauf zu verschnellern hilft es, keine Schleife zu verwenden sondern die Befehle hintereinander zu schreiben. Der gcc unterstützt das, suche in der Dokumentation nach ‚-funroll-loops‘

Gruß
Diether