Verschnellerung von Schleifen?
-
Hi!
Ich habe in meinem Quellcode folgende Zeilen an verschiedenen stelleb benutzt:for (int i=0; i<4096-Len; i++) Last[i] = Last[i+Len];
for (int i=0; i<4095; i++) Last[i] = Last[i+1];
Gibt es eine Möglichkeit beide oder eine der beiden Zeilen zu verschnellen - Es kommt bei dem Programm nämlich auf Geschwindkeit an und es ist ziemlich langsam.
-
ich würd mal sagen in Assembler sieht das alles gleich aus.
-
Hey,
Generell sind PreInkrements Resourcen schonender als die Post's, weil keine zusätzliche Speicherstelle für den Vergleich angelegt werden muß, ob sie schneller sind weiß ich nicht... probiers aus mit for(ctr=-1;ctr<Anzahl;++ctr) usw.
Wenn Du eine Mehrprozessor Maschine hast, dann bietet sich die Splitterung in weitere For Schleifen an, also aus zwei mach vier oder aus zwei mach acht. Dabei sind die Übergänge heikel, müssen also besonders beachtet werden.
Und natürlich noch die Optimierungs Einstellungen des Compilers selber, dazu müßte man aber wissen welchen Compiler Du nutzt und welches OS Du hast ?!
Gruß Winn
-
schau dir mal memmove aus der <cstdlib> an -> die library funktionen sind meistens handoptimierte assembler funktionen -> dh die wird uU schneller sein als deine schleife (aber garantiert nicht langsamer)
-
Also generel ist die ganze funktion überhaupt für eine LZ77 decodierung gewesen und funktioniert auch - nur da das ganze später in ein Spiel soll, sollte es schneller werden.
Die ZLIB hab ich nämlich nicht zum laufen gekriegt (bzw. nicht zum decodieren) deswegen hatte ich alles selber geschrieben.Die Funktionen der <cstdlib> guck ich mir gleich mal an.
Ich benutze den Borland C++ Builder 5.0 und hab Win2k.
-
Bei der zweiten Schleife kannst du noch optimieren, indem du statt
for (int i=0; i<4095; i++) Last[i] = Last[i+1];
das hier schreibst:
for (int i=0; i<4095; ) Last[i] = Last[++i];
Ich weiß aber nicht, obs um so viel schneller wird. Musst du halt ausprobieren.
-
Mir ist auch noch was zur ersten Schleife eingefallen:
for (int i=0; i<4096-Len;) Last[i] = Last[i+++Len];
-
@Gary:
das ist alles das selbe.Sinn würde es machen i runter zu zählen - das könnte uU schneller sein (aber kaum merklich) - memove ist die einzige möglichkeit da noch was rauszuholen - oder eben den Intel C++ Compiler verwenden.
Aber ich würde sowieso woanders optimieren - diese schleifen sind doch in 0, nix ausgeführt.
-
Arbeite nicht mit Array - nimm Zeiger!
Zeiger sollen schneller sein als Indexzugriffe in Arrays (???)
-
Original erstellt von DerAltenburger:
**Arbeite nicht mit Array - nimm Zeiger!Zeiger sollen schneller sein als Indexzugriffe in Arrays (???)**
schon lange nicht mehr, außer du benutzt historische compilier