Speicherbereich mit nullen füllen
-
thx!
Werde es gleich mal testen
-
auf der AMD seite ist ein paper in dem sie viele verschiedene möglichkeiten den buffer zu füllen bzw. zu kopieren demonstrieren
dabei gehen die auf die einzelnen caches/rambereiche ein usw.
ist schon länger her dass ich das da las, hat was mit mmx zu tun gehabt.
rapso->greets();
-
Wie dem auch sei, grundsaetzlich kann man noch sagen, dass die 32Bit Stringcodes (stosd) am schnellsten arbeiten, wenn man sie auf durch 4 teilbare Addressen loslaesst.
-
Nobuo T schrieb:
Wie dem auch sei, grundsaetzlich kann man noch sagen, dass die 32Bit Stringcodes (stosd) am schnellsten arbeiten, wenn man sie auf durch 4 teilbare Addressen loslaesst.
???
versteh ich da was falsch oder kann denn das nen Speedgewinn bringen:NULL_BUFFER_off = new char[BUFFER_SIZE+4); NULL_BUFFER = NULL_BUFFER_off; while(NULL_BUFFER%4) NULL_BUFFER++; _workBuffer_off = new char[BUFFER_SIZE+4); _workBuffer = _workBuffer_off; while(_workBuffe%4) _workBuffer++;
mit den offsets mache ich nix mehr, die bleiben nur damit später alles wieder freigeben kann.. ich abreite jetzt mit der nächten Adress im Speichblock die durch 4 Teilbar ist.
Hab ich das jetzt ganz verstanden, oder kann ich das so einbauen?
-
Im Prinzip ist das richtig was du daq schreibst, ich würde aber ganz stark davon ausgehen, dass jeder aktuelle Compiler das automatisch auf 4 aligned. In dem Fall verbraucht dein Check mehr Zeit
Check einfach mal aus, welche Adressen dir new gibt, wenn die sich ständig durch 4 teilen lassen, dannwürde ihc den extracode nicht nehmen, neben der Überflüssigkeit fördert das nämlich nicht die Lesbarkeit.
-
das würde sowieso in die initialiesrung kommen.. da kann daueren so lagen sie will.. wichtig ist nur der code der arbeiten muss schnell ist
-
am schnellsten sind MMX-mov befehle laut AMD
naja in dem paper sind die für copy und nicht 'nur' zum füllen von speicher, aber trotzdem vielleicht nen vesuch wert:
http://cdrom.amd.com/devconn/events/gdc_2002_amd.pdf
rapso->greets();
-
WOW! in den pdf stehen ein paar interessante dinge :))
-
sag isch doch
die erbauerfirmen haben die bestern sourcen für sowat :D:D:D
woher nur?rapso->greets();
-
Irgendwie ist die Seite passwort geschützt.
-
war heute mittag irgendwie noch nicht
*wundertsich*rapso->greets();
-
es gibt nen guten trick für sowas:
... mov ecx,size ; lade die grösse shr ecx,1 ; teile grösse durch 2, falls size ungerade ist cf = 1 rep stosw ; schreibe die worte adc ecx,0 ; addiere das carryflag rep stosb ; falls size ungerade war, schreibe noch ein byte
eigentlich müsste auch das hier für 32bit klappen, habs noch nicth ausprobiert
... mov ecx,size ; lade die grösse shr ecx,1 ; teile grösse durch 2, falls size ungerade ist cf = 1 pushf ; flags sichern shr ecx,1 ; nochmal teilen gucken ob gerade anzahl von worten da ist rep stosd ; schreibe die doppelworte adc ecx,0 ; addiere das carryflag rep stosw ; falls size ungerade war, schreibe noch ein wort popf ; flags nochmal laden adc ecx,0 ; wenn byteanzahl ungerade war rep stosb ; dann schreibe noch ein byte
könnte fehlerhaft sein, ist immerhin schon spät muss in heia ...