Seite 3 von 3

Re: ASM - Hilfe bei Optimierung, x64?

Verfasst: 28.07.2010 21:58
von inc.
cxAlex hat geschrieben:Ich optimiere gerade ein bisschen am Speed meines Hashtable-Includes und übersetzte einige Teile von Hand in Assembler da mir der PB - Compiler nicht genug optimiert. Nun hab ich aber irgendwie einen Fehler in meiner Übersetzung, sieht einer der ASM - Gurus wo ich danebenhaue, bzw. kenn jemand noch ein paar Tricks das ganze unter x64 zu beschleunigen?

Code: Alles auswählen

Macro _DoQuad()
  CompilerIf #True
    counter + 1
    hash + ((counter/2)*(counter/2))*(-1 + (r*2))
    hash%*hMap\Mapsize
    If hash<0 : hash + *hMap\Mapsize : EndIf
  CompilerElse
    mapsize = *hMap\mapsize
    !INC dword[p.v_counter]
    !MOV EAX,dword[p.v_counter]
    !MOV EBX, dword[p.v_mapsize]
    !MOV ECX,2
    !CDQ
    !DIV ECX ; counter/2
    !IMUL EAX,EAX ; ((counter/2)*(counter/2))
    !MOV ESI, dword[p.v_r]
    !ADD ESI, ESI ; r*2
    !DEC ESI ; -1
    !IMUL EAX,ESI
    !ADD EAX, dword[p.v_hash] ; hash + rest
    !CDQ
    !DIV EBX ;hash%*hMap\mapsize
    !MOV EAX, EDX
    ; If hash<0 : hash + *hMap\Mapsize : EndIf
    !AND EAX,EAX
    !JGE @f
    !ADD EDX,EBX
    !@@:
    !MOV dword[p.v_hash], EDX
    ; r ! 1
    !XOR dword[p.v_r], 1
  CompilerEndIf
EndMacro
Gruß, Alex
Du hast oben im PureBasic Code vergessen das Bitweises XOR "r ! 1" vorzunehmen, wie ich es im Originalcode kommentiert hatte und wie du es unten in der ASM Commented Ausgabe ebenfalls zeigst, denn das ist für die quadratische Sondierung obligatorisch. So wie oben funktioniert das Macro im Basic-Teil nicht. Und es ist wichtig, wenn du vom nativem Basic-Teil dies wie hier gewünscht von Grund auf in ASM übersetzen lassen möchtest.
http://purebasic-lounge.com/viewtopic.php?p=55177#55177
Hier der komplette "Kern" der quadratischen Sondierung aus dem o.g. Link:

Code: Alles auswählen

Else ; // quadratic probe 
  counter + 1 
  hash + ((counter/2)*(counter/2))*(-1 + (r*2)) 
  hash%*object\Mapsize 
  If hash<0 : hash + *object\Mapsize : EndIf 
  r ! 1 ; <------------------------------------// Swap bool !!
EndIf 

Re: ASM - Hilfe bei Optimierung, x64?

Verfasst: 28.07.2010 23:57
von Thorium
Um das wirklich zu optimieren bräuchte man die ganze Schleife. Am besten ein lauffähiger Testcode damit man direkt die performance und funktionstüchtigkeit messen kann.

Re: ASM - Hilfe bei Optimierung, x64?

Verfasst: 29.07.2010 10:35
von inc.
Thorium hat geschrieben:Um das wirklich zu optimieren bräuchte man die ganze Schleife. Am besten ein lauffähiger Testcode damit man direkt die performance und funktionstüchtigkeit messen kann.
Hier drüber in meinem Post findest du den Link mit der Hastabelle, dort kannst du die Schleife und den Algorhythmus der quadratischen Sondierung entnehmen.

Re: ASM - Hilfe bei Optimierung, x64?

Verfasst: 29.07.2010 18:14
von Helle
Nachdem das düstere Geheimnis von r gelüftet wurde :mrgreen: , habe ich meinen Code (s.o.) überarbeitet. Ich dachte mir ja gleich, das es "nur" um Vorzeichen-Bildung geht.
Gruß
Helle