Speicher auf 0 setzen

  • 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?

    640K ought to be enough for anybody. :eek2:

  • 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.

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • 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++

    640K ought to be enough for anybody. :eek2:

  • 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.

    640K ought to be enough for anybody. :eek2:

  • 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

    640K ought to be enough for anybody. :eek2:

  • 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..

    640K ought to be enough for anybody. :eek2:

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!