Hallo!
Ich hab eine Stelle in meinem Algorithmus den ich extrem beschleunigen kann indem ich einen großen Bereich im Speicher auf 0 setz. Ich möchte 640*480 Byte auf 0 setzen und ZeroMemory ist viel zu langsam. Kennt wer eine schnellere Möglichkeit?
Speicher auf 0 setzen
-
-
Hängt von der Plattform ab. Auf PowerPC isses schneller, wenn man das über die Vektoreinheit (AltiVec) macht, weil man dort immer 128 Bits auf einmal bearbeiten kann.
Generell sollten aber diese Bibliotheksfunktionen bereits so gut optimiert sein wie irgendwie möglich, weil dadurch ja jedes Programm automatisch schneller wird. -
Es wäre cool, wenn man den ganzen Block irgendwie in einem auf 0 setzen kann. Vielleicht ist sowas in asm möglich. Die nächste Idee wär da natürlich SIMD.
Es ist unter Windows in C++ -
Wenn du VC++ verwendest und du SSE Optimierung in den Projektoptionen eingeschaltet hast, ist die memset() SSE optimiert.
Bei mingw32/gcc gibts dafuer das Flag -msse(1/2/3) -
Uh danke.. werds dann mal probieren.
-
Hallo nochmal.
Ich find diese Einstellungen nicht. Ich verwende Visual Studio.NET 2005 und ich hab nur herausgefunden, wie man SSE2 aktiviert.. "_set_SSE2_enable(1)", aber da ändert sich nichts. -
SSE Optimization kannst du unter Projektoptionen -> Code Generation -> Enable Enhanced Instruction Set freischalten.
Was meinst du da aendert sich nichts? Wenn ich mir das im Debugger anschaue called er bei mir die memset Funktion, und in der prueft und springt er dann weiter zu einer SSE optimierten Funktion, die die Arbeit macht.
Wenn du lieber gleich die SSE optimierte Funktion habe moechtest -> selbst schreiben. VC++ hat ja eh diese intrinsic Funktionen. InlineAsm is nicht zu empfehlen, da es unter VC++ ab 64bit keinen inline assembler mehr gibt.
btw. wenn du dir das Doom3 od. Quake4 SDK runterlaedst, da is eine memset() optimierte Funktion dabei. Aber nur mit Hilfe von MMX.
-
Naja ich hab die Zeit gemessen und es war ziemlich gleich, wobei da aber ein gewaltiger Unterschied sein müsste. Naja wie gesagt ich hab die SSE2 enabled und nicht die SSE. memset dürfte anscheinend nur auf SSE optimiert sein. Ja die intrinsics hab ich mir schon angesehen, ich werds wahrscheinlich auch mit SSE2 probieren, da hab ich ja 16*8-Bit auf einmal..
Danke -
Es funktioniert einfach nicht.. ich habs aktiviert und dann kam der Fehler, dass diese Option mit /clr: Oldsyntax nicht kompatibel ist. Ich hab dann die Common Language Runtime ausgeschalten, aber so gehts auch nicht. Schade jetzt muss ichs mir selber programmieren..
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!