Seite 2 von 3

Verfasst: 19.02.2009 01:44
von ts-soft
@cxAlex
Dein übertakteter Intel mit dem schnelleren RAM ist tatsächlich etwas
schneller als meiner :allright:
Aber so ein paar ms werde ich überleben :wink:

Verfasst: 19.02.2009 01:46
von alter Mann
hab es noch ein paar mal probiert, scheint abhängig von der Speicherauslastung zu sein, knapp 1GB Speicher ist ja auch kein Pappenstiel

Verhältnis liegt zwischen 1:1.2 und 1:3

Verfasst: 19.02.2009 11:25
von alter Mann
hab noch ein wenig probiert (auf einem Rechner mit mehr Speicher), aber ein besserer als Faktor 1.5 ist nicht dabei rausgekommen

Code: Alles auswählen

Structure AllInt
  StructureUnion
    b.b
    w.w
    l.l
  EndStructureUnion
EndStructure

; Genau wie CRC32Fingerprint()
Procedure CRC32_Mem(*Mem.AllInt, MemSize)
  Protected crc32Result.l = $FFFFFFFF
  Protected Dim Table.l(256)
  Protected F2.l = $FF
  Restore _CRC_Table
  For i=0 To 255 Step 1
    Read Table(i)
  Next i   
  Protected *Ende=*Mem+Memsize
  While *Mem<*Ende
    crc32Result =  Table((crc32Result ! *Mem\b)& F2) ! ((crc32Result>>8)&$FFFFFF)
    *Mem + 1
  Wend
  ProcedureReturn ~crc32Result
EndProcedure

;{ CRC Data
DataSection
  _CRC_Table:
  Data.l 0
  Data.l $77073096, $EE0E612C, $990951BA, $076DC419, $706AF48F
  Data.l $E963A535, $9E6495A3, $0EDB8832, $79DCB8A4, $E0D5E91E
  Data.l $97D2D988, $09B64C2B, $7EB17CBD, $E7B82D07, $90BF1D91
  Data.l $1DB71064, $6AB020F2, $F3B97148, $84BE41DE, $1ADAD47D
  Data.l $6DDDE4EB, $F4D4B551, $83D385C7, $136C9856, $646BA8C0
  Data.l $FD62F97A, $8A65C9EC, $14015C4F, $63066CD9, $FA0F3D63
  Data.l $8D080DF5, $3B6E20C8, $4C69105E, $D56041E4, $A2677172
  Data.l $3C03E4D1, $4B04D447, $D20D85FD, $A50AB56B, $35B5A8FA
  Data.l $42B2986C, $DBBBC9D6, $ACBCF940, $32D86CE3, $45DF5C75
  Data.l $DCD60DCF, $ABD13D59, $26D930AC, $51DE003A, $C8D75180
  Data.l $BFD06116, $21B4F4B5, $56B3C423, $CFBA9599, $B8BDA50F
  Data.l $2802B89E, $5F058808, $C60CD9B2, $B10BE924, $2F6F7C87
  Data.l $58684C11, $C1611DAB, $B6662D3D, $76DC4190, $01DB7106
  Data.l $98D220BC, $EFD5102A, $71B18589, $06B6B51F, $9FBFE4A5
  Data.l $E8B8D433, $7807C9A2, $0F00F934, $9609A88E, $E10E9818
  Data.l $7F6A0DBB, $086D3D2D, $91646C97, $E6635C01, $6B6B51F4
  Data.l $1C6C6162, $856530D8, $F262004E, $6C0695ED, $1B01A57B
  Data.l $8208F4C1, $F50FC457, $65B0D9C6, $12B7E950, $8BBEB8EA
  Data.l $FCB9887C, $62DD1DDF, $15DA2D49, $8CD37CF3, $FBD44C65
  Data.l $4DB26158, $3AB551CE, $A3BC0074, $D4BB30E2, $4ADFA541
  Data.l $3DD895D7, $A4D1C46D, $D3D6F4FB, $4369E96A, $346ED9FC
  Data.l $AD678846, $DA60B8D0, $44042D73, $33031DE5, $AA0A4C5F
  Data.l $DD0D7CC9, $5005713C, $270241AA, $BE0B1010, $C90C2086
  Data.l $5768B525, $206F85B3, $B966D409, $CE61E49F, $5EDEF90E
  Data.l $29D9C998, $B0D09822, $C7D7A8B4, $59B33D17, $2EB40D81
  Data.l $B7BD5C3B, $C0BA6CAD, $EDB88320, $9ABFB3B6, $03B6E20C
  Data.l $74B1D29A, $EAD54739, $9DD277AF, $04DB2615, $73DC1683
  Data.l $E3630B12, $94643B84, $0D6D6A3E, $7A6A5AA8, $E40ECF0B
  Data.l $9309FF9D, $0A00AE27, $7D079EB1, $F00F9344, $8708A3D2
  Data.l $1E01F268, $6906C2FE, $F762575D, $806567CB, $196C3671
  Data.l $6E6B06E7, $FED41B76, $89D32BE0, $10DA7A5A, $67DD4ACC
  Data.l $F9B9DF6F, $8EBEEFF9, $17B7BE43, $60B08ED5, $D6D6A3E8
  Data.l $A1D1937E, $38D8C2C4, $4FDFF252, $D1BB67F1, $A6BC5767
  Data.l $3FB506DD, $48B2364B, $D80D2BDA, $AF0A1B4C, $36034AF6
  Data.l $41047A60, $DF60EFC3, $A867DF55, $316E8EEF, $4669BE79
  Data.l $CB61B38C, $BC66831A, $256FD2A0, $5268E236, $CC0C7795
  Data.l $BB0B4703, $220216B9, $5505262F, $C5BA3BBE, $B2BD0B28
  Data.l $2BB45A92, $5CB36A04, $C2D7FFA7, $B5D0CF31, $2CD99E8B
  Data.l $5BDEAE1D, $9B64C2B0, $EC63F226, $756AA39C, $026D930A
  Data.l $9C0906A9, $EB0E363F, $72076785, $05005713, $95BF4A82
  Data.l $E2B87A14, $7BB12BAE, $0CB61B38, $92D28E9B, $E5D5BE0D
  Data.l $7CDCEFB7, $0BDBDF21, $86D3D2D4, $F1D4E242, $68DDB3F8
  Data.l $1FDA836E, $81BE16CD, $F6B9265B, $6FB077E1, $18B74777
  Data.l $88085AE6, $FF0F6A70, $66063BCA, $11010B5C, $8F659EFF
  Data.l $F862AE69, $616BFFD3, $166CCF45, $A00AE278, $D70DD2EE
  Data.l $4E048354, $3903B3C2, $A7672661, $D06016F7, $4969474D
  Data.l $3E6E77DB, $AED16A4A, $D9D65ADC, $40DF0B66, $37D83BF0
  Data.l $A9BCAE53, $DEBB9EC5, $47B2CF7F, $30B5FFE9, $BDBDF21C
  Data.l $CABAC28A, $53B39330, $24B4A3A6, $BAD03605, $CDD70693
  Data.l $54DE5729, $23D967BF, $B3667A2E, $C4614AB8, $5D681B02
  Data.l $2A6F2B94, $B40BBE37, $C30C8EA1, $5A05DF1B, $2D02EF8D
EndDataSection
;}

*test = AllocateMemory(1000000000)


start = ElapsedMilliseconds()
test1 = CRC32Fingerprint(*test,1000000000)
Zeit1 = ElapsedMilliseconds()-start

start = ElapsedMilliseconds()
test2 = CRC32_Mem(*test,1000000000)
Zeit2 = ElapsedMilliseconds()-start


OpenConsole()
PrintN("Test 1 : "+Str(test1)+"  Zeit : "+Str(Zeit1))
PrintN("Test 2 : "+Str(test2)+"  Zeit : "+Str(Zeit2))
Faktor.d = Zeit2
Faktor / Zeit1
PrintN("Faktor : "+StrD(Faktor,4))

Input()

FreeMemory(*test)
CloseConsole() 

Verfasst: 19.02.2009 11:36
von cxAlex
Also ich hab deinen Code jetzt getestet mit folgendem Ergebniss:

Test 1 : 1676957506 Zeit : 2781
Test 2 : 1676957506 Zeit : 4453
Faktor : 1.6012

1.6

Auslastung zur Zeit des Tests:

0% CPU/ 41 Prozesse
1,8 GB Ram / 4 GB (1 GB RamDisk)

Da muss doch noch was zu machen sein.....

[ot]
@ts-soft:

Was für ein System hast du den? Die Ausstattung in deinem Profil zeigt noch nen AMD.

[/ot]

Verfasst: 19.02.2009 15:40
von freak
> Da muss doch noch was zu machen sein.....

Du wirst mit reinem PB Code nicht an die PB Funktion rankommen:

Code: Alles auswählen

crc32Result = ((crc32Result>>8)&$FFFFFF) ! *Table\Entry[(crc32Result & $FF) ! *Mem\b]
Ein Problem sind diese "& $FFFFFF"-Operationen. Die kann man nicht loswerden weil PB mit signed Typen arbeitet und desshalb ein shift bzw. das laden eines bytes in einen größeren Typ das sign-bit vervielfältigt. Die PB Funktion deklariert da einfach "unsigned char *" und kann dann auf dieses Masking verzichten. Das ist einer der wirklich seltenen Punkte wo unsigned Typen mal sinnvoll sind.

Ein zweites Problem ist das PB die crc32Result Variable nicht in einem Register hält und das natürlich langsamer ist.

Ich würde dir empfehlen das Ganze in Asm zu machen. CRC32 ist da ein guter Kandidat dafür weil die Funktion schön klein ist und man alles in Register kriegt.
Die Funktion von hier kann mit der PB Funktion mithalten: http://www.purebasic.fr/german/viewtopic.php?t=10197

Achtung: Der Code im Link sichert nicht genug Register (das hat mit Versionen < 4.00 noch funktioniert). Ich hab das mal für 4.30 angepasst:

Code: Alles auswählen

Procedure CRC32compute(*mem_,size_,crc_=0)
  EnableASM
  MOV Ecx,*mem_
  MOV Edx,size_
  MOV Eax,crc_
  Not Eax
  Push Ebx
  !.rpt_EDX:
  XOr Ebx,Ebx
  MOV BL,AL
  XOr BL,[Ecx]
  SHL Ebx,2
  SHR Eax,8
  XOr Eax,[l__crc_table+Ebx]
  INC Ecx
  DEC Edx
  !JNZ .rpt_EDX
  Pop Ebx
  Not Eax  
  ProcedureReturn ;EAX
  DisableASM
EndProcedure 

;{ CRC Data
DataSection
  _CRC_Table:
  Data.l 0
  Data.l $77073096, $EE0E612C, $990951BA, $076DC419, $706AF48F
  Data.l $E963A535, $9E6495A3, $0EDB8832, $79DCB8A4, $E0D5E91E
  Data.l $97D2D988, $09B64C2B, $7EB17CBD, $E7B82D07, $90BF1D91
  Data.l $1DB71064, $6AB020F2, $F3B97148, $84BE41DE, $1ADAD47D
  Data.l $6DDDE4EB, $F4D4B551, $83D385C7, $136C9856, $646BA8C0
  Data.l $FD62F97A, $8A65C9EC, $14015C4F, $63066CD9, $FA0F3D63
  Data.l $8D080DF5, $3B6E20C8, $4C69105E, $D56041E4, $A2677172
  Data.l $3C03E4D1, $4B04D447, $D20D85FD, $A50AB56B, $35B5A8FA
  Data.l $42B2986C, $DBBBC9D6, $ACBCF940, $32D86CE3, $45DF5C75
  Data.l $DCD60DCF, $ABD13D59, $26D930AC, $51DE003A, $C8D75180
  Data.l $BFD06116, $21B4F4B5, $56B3C423, $CFBA9599, $B8BDA50F
  Data.l $2802B89E, $5F058808, $C60CD9B2, $B10BE924, $2F6F7C87
  Data.l $58684C11, $C1611DAB, $B6662D3D, $76DC4190, $01DB7106
  Data.l $98D220BC, $EFD5102A, $71B18589, $06B6B51F, $9FBFE4A5
  Data.l $E8B8D433, $7807C9A2, $0F00F934, $9609A88E, $E10E9818
  Data.l $7F6A0DBB, $086D3D2D, $91646C97, $E6635C01, $6B6B51F4
  Data.l $1C6C6162, $856530D8, $F262004E, $6C0695ED, $1B01A57B
  Data.l $8208F4C1, $F50FC457, $65B0D9C6, $12B7E950, $8BBEB8EA
  Data.l $FCB9887C, $62DD1DDF, $15DA2D49, $8CD37CF3, $FBD44C65
  Data.l $4DB26158, $3AB551CE, $A3BC0074, $D4BB30E2, $4ADFA541
  Data.l $3DD895D7, $A4D1C46D, $D3D6F4FB, $4369E96A, $346ED9FC
  Data.l $AD678846, $DA60B8D0, $44042D73, $33031DE5, $AA0A4C5F
  Data.l $DD0D7CC9, $5005713C, $270241AA, $BE0B1010, $C90C2086
  Data.l $5768B525, $206F85B3, $B966D409, $CE61E49F, $5EDEF90E
  Data.l $29D9C998, $B0D09822, $C7D7A8B4, $59B33D17, $2EB40D81
  Data.l $B7BD5C3B, $C0BA6CAD, $EDB88320, $9ABFB3B6, $03B6E20C
  Data.l $74B1D29A, $EAD54739, $9DD277AF, $04DB2615, $73DC1683
  Data.l $E3630B12, $94643B84, $0D6D6A3E, $7A6A5AA8, $E40ECF0B
  Data.l $9309FF9D, $0A00AE27, $7D079EB1, $F00F9344, $8708A3D2
  Data.l $1E01F268, $6906C2FE, $F762575D, $806567CB, $196C3671
  Data.l $6E6B06E7, $FED41B76, $89D32BE0, $10DA7A5A, $67DD4ACC
  Data.l $F9B9DF6F, $8EBEEFF9, $17B7BE43, $60B08ED5, $D6D6A3E8
  Data.l $A1D1937E, $38D8C2C4, $4FDFF252, $D1BB67F1, $A6BC5767
  Data.l $3FB506DD, $48B2364B, $D80D2BDA, $AF0A1B4C, $36034AF6
  Data.l $41047A60, $DF60EFC3, $A867DF55, $316E8EEF, $4669BE79
  Data.l $CB61B38C, $BC66831A, $256FD2A0, $5268E236, $CC0C7795
  Data.l $BB0B4703, $220216B9, $5505262F, $C5BA3BBE, $B2BD0B28
  Data.l $2BB45A92, $5CB36A04, $C2D7FFA7, $B5D0CF31, $2CD99E8B
  Data.l $5BDEAE1D, $9B64C2B0, $EC63F226, $756AA39C, $026D930A
  Data.l $9C0906A9, $EB0E363F, $72076785, $05005713, $95BF4A82
  Data.l $E2B87A14, $7BB12BAE, $0CB61B38, $92D28E9B, $E5D5BE0D
  Data.l $7CDCEFB7, $0BDBDF21, $86D3D2D4, $F1D4E242, $68DDB3F8
  Data.l $1FDA836E, $81BE16CD, $F6B9265B, $6FB077E1, $18B74777
  Data.l $88085AE6, $FF0F6A70, $66063BCA, $11010B5C, $8F659EFF
  Data.l $F862AE69, $616BFFD3, $166CCF45, $A00AE278, $D70DD2EE
  Data.l $4E048354, $3903B3C2, $A7672661, $D06016F7, $4969474D
  Data.l $3E6E77DB, $AED16A4A, $D9D65ADC, $40DF0B66, $37D83BF0
  Data.l $A9BCAE53, $DEBB9EC5, $47B2CF7F, $30B5FFE9, $BDBDF21C
  Data.l $CABAC28A, $53B39330, $24B4A3A6, $BAD03605, $CDD70693
  Data.l $54DE5729, $23D967BF, $B3667A2E, $C4614AB8, $5D681B02
  Data.l $2A6F2B94, $B40BBE37, $C30C8EA1, $5A05DF1B, $2D02EF8D
EndDataSection
;}

Verfasst: 19.02.2009 15:57
von cxAlex
@freak: THX

Ich hab den ASM Code jetzt mal in die Vergleichsroutine gepackt:

Test 1 : 1676957506 Zeit : 2781
Test 2 : 1676957506 Zeit : 2594
Faktor : 0.9328

schneller als die PB Version :D

Schade nur dass man das mit PB nativ nicht hinkriegt. Wird Zeit für unsigned Types für PB! :mrgreen:

Verfasst: 19.02.2009 22:20
von Helle
Da kann ich mir natürlich eine Mini-Version nicht verkneifen :mrgreen: :

Code: Alles auswählen

Buffer.i = AllocateMemory($10000000)

Procedure CRC32(Mem, MemSize, Table)
  !mov edi,[p.v_Table] 
  !mov edx,[p.v_MemSize]
  !mov esi,[p.v_Mem]
  !mov eax,0FFFFFFFFh
!@@:
  !movzx ecx,byte[esi]
  !xor cl,al
  !shr eax,8
  !xor eax,dword[edi+ecx*4]
  !inc esi
  !dec edx
  !jnz @b
  !not eax
  ProcedureReturn
EndProcedure 

A = ElapsedMilliseconds()
CRC32 = CRC32(Buffer, $10000000, ?_CRC_Table)
E = ElapsedMilliseconds() - A

MessageRequester("CRC32", Str(CRC32) + " in " + Str(E) + " ms")

;DataSection wie gehabt (s.o.)
Interessant wäre ein Test mit z.B. Intels i7-Prozi, der mit SSE4.2 eine spezielle CRC32-Instruction enthält. Leider hatte ich so´n Ding noch nicht in den Fingern...

Gruß
Helle

Verfasst: 19.02.2009 22:27
von ts-soft
cxAlex hat geschrieben: [ot]
@ts-soft:

Was für ein System hast du den? Die Ausstattung in deinem Profil zeigt noch nen AMD.

[/ot]
Mein Profil stimmt, hab extra nachgesehen, gibt auch keine Grund für mich
Aufzurüsten, für meine Bedürfnisse ist der viel zu schnell :mrgreen: noch

Verfasst: 19.02.2009 22:31
von cxAlex
Hier noch mal ein Vergleichstest mit allen Versionen:

Code: Alles auswählen

Structure AllInt
  StructureUnion
    b.b
    w.w
    l.l
  EndStructureUnion
EndStructure

; Genau wie CRC32Fingerprint()
Procedure CRC32_AlterMann(*Mem.AllInt, MemSize)
  Protected crc32Result.l = $FFFFFFFF
  Protected Dim Table.l(256)
  Protected F2.l = $FF
  Restore _CRC_Table
  For i=0 To 255 Step 1
    Read Table(i)
  Next i   
  Protected *Ende=*Mem+Memsize
  While *Mem<*Ende
    crc32Result =  Table((crc32Result ! *Mem\b)& F2) ! ((crc32Result>>8)&$FFFFFF)
    *Mem + 1
  Wend
  ProcedureReturn ~crc32Result
EndProcedure

Procedure CRC32_freak(*mem_,size_,crc_=0)
  EnableASM
  MOV Ecx,*mem_
  MOV Edx,size_
  MOV Eax,crc_
  Not Eax
  Push Ebx
  !.rpt_EDX:
  XOr Ebx,Ebx
  MOV BL,AL
  XOr BL,[Ecx]
  SHL Ebx,2
  SHR Eax,8
  XOr Eax,[l__crc_table+Ebx]
  INC Ecx
  DEC Edx
  !JNZ .rpt_EDX
  Pop Ebx
  Not Eax 
  ProcedureReturn ;EAX
  DisableASM
EndProcedure


Procedure CRC32_helle(Mem, MemSize)
  !mov edi,l__crc_table
  !mov edx,[p.v_MemSize]
  !mov esi,[p.v_Mem]
  !mov eax,0FFFFFFFFh
!@@:
  !movzx ecx,byte[esi]
  !xor cl,al
  !shr eax,8
  !xor eax,dword[edi+ecx*4]
  !inc esi
  !dec edx
  !jnz @b
  !not eax
  ProcedureReturn
EndProcedure 

;{ CRC Data
DataSection
  _CRC_Table:
  Data.l 0
  Data.l $77073096, $EE0E612C, $990951BA, $076DC419, $706AF48F
  Data.l $E963A535, $9E6495A3, $0EDB8832, $79DCB8A4, $E0D5E91E
  Data.l $97D2D988, $09B64C2B, $7EB17CBD, $E7B82D07, $90BF1D91
  Data.l $1DB71064, $6AB020F2, $F3B97148, $84BE41DE, $1ADAD47D
  Data.l $6DDDE4EB, $F4D4B551, $83D385C7, $136C9856, $646BA8C0
  Data.l $FD62F97A, $8A65C9EC, $14015C4F, $63066CD9, $FA0F3D63
  Data.l $8D080DF5, $3B6E20C8, $4C69105E, $D56041E4, $A2677172
  Data.l $3C03E4D1, $4B04D447, $D20D85FD, $A50AB56B, $35B5A8FA
  Data.l $42B2986C, $DBBBC9D6, $ACBCF940, $32D86CE3, $45DF5C75
  Data.l $DCD60DCF, $ABD13D59, $26D930AC, $51DE003A, $C8D75180
  Data.l $BFD06116, $21B4F4B5, $56B3C423, $CFBA9599, $B8BDA50F
  Data.l $2802B89E, $5F058808, $C60CD9B2, $B10BE924, $2F6F7C87
  Data.l $58684C11, $C1611DAB, $B6662D3D, $76DC4190, $01DB7106
  Data.l $98D220BC, $EFD5102A, $71B18589, $06B6B51F, $9FBFE4A5
  Data.l $E8B8D433, $7807C9A2, $0F00F934, $9609A88E, $E10E9818
  Data.l $7F6A0DBB, $086D3D2D, $91646C97, $E6635C01, $6B6B51F4
  Data.l $1C6C6162, $856530D8, $F262004E, $6C0695ED, $1B01A57B
  Data.l $8208F4C1, $F50FC457, $65B0D9C6, $12B7E950, $8BBEB8EA
  Data.l $FCB9887C, $62DD1DDF, $15DA2D49, $8CD37CF3, $FBD44C65
  Data.l $4DB26158, $3AB551CE, $A3BC0074, $D4BB30E2, $4ADFA541
  Data.l $3DD895D7, $A4D1C46D, $D3D6F4FB, $4369E96A, $346ED9FC
  Data.l $AD678846, $DA60B8D0, $44042D73, $33031DE5, $AA0A4C5F
  Data.l $DD0D7CC9, $5005713C, $270241AA, $BE0B1010, $C90C2086
  Data.l $5768B525, $206F85B3, $B966D409, $CE61E49F, $5EDEF90E
  Data.l $29D9C998, $B0D09822, $C7D7A8B4, $59B33D17, $2EB40D81
  Data.l $B7BD5C3B, $C0BA6CAD, $EDB88320, $9ABFB3B6, $03B6E20C
  Data.l $74B1D29A, $EAD54739, $9DD277AF, $04DB2615, $73DC1683
  Data.l $E3630B12, $94643B84, $0D6D6A3E, $7A6A5AA8, $E40ECF0B
  Data.l $9309FF9D, $0A00AE27, $7D079EB1, $F00F9344, $8708A3D2
  Data.l $1E01F268, $6906C2FE, $F762575D, $806567CB, $196C3671
  Data.l $6E6B06E7, $FED41B76, $89D32BE0, $10DA7A5A, $67DD4ACC
  Data.l $F9B9DF6F, $8EBEEFF9, $17B7BE43, $60B08ED5, $D6D6A3E8
  Data.l $A1D1937E, $38D8C2C4, $4FDFF252, $D1BB67F1, $A6BC5767
  Data.l $3FB506DD, $48B2364B, $D80D2BDA, $AF0A1B4C, $36034AF6
  Data.l $41047A60, $DF60EFC3, $A867DF55, $316E8EEF, $4669BE79
  Data.l $CB61B38C, $BC66831A, $256FD2A0, $5268E236, $CC0C7795
  Data.l $BB0B4703, $220216B9, $5505262F, $C5BA3BBE, $B2BD0B28
  Data.l $2BB45A92, $5CB36A04, $C2D7FFA7, $B5D0CF31, $2CD99E8B
  Data.l $5BDEAE1D, $9B64C2B0, $EC63F226, $756AA39C, $026D930A
  Data.l $9C0906A9, $EB0E363F, $72076785, $05005713, $95BF4A82
  Data.l $E2B87A14, $7BB12BAE, $0CB61B38, $92D28E9B, $E5D5BE0D
  Data.l $7CDCEFB7, $0BDBDF21, $86D3D2D4, $F1D4E242, $68DDB3F8
  Data.l $1FDA836E, $81BE16CD, $F6B9265B, $6FB077E1, $18B74777
  Data.l $88085AE6, $FF0F6A70, $66063BCA, $11010B5C, $8F659EFF
  Data.l $F862AE69, $616BFFD3, $166CCF45, $A00AE278, $D70DD2EE
  Data.l $4E048354, $3903B3C2, $A7672661, $D06016F7, $4969474D
  Data.l $3E6E77DB, $AED16A4A, $D9D65ADC, $40DF0B66, $37D83BF0
  Data.l $A9BCAE53, $DEBB9EC5, $47B2CF7F, $30B5FFE9, $BDBDF21C
  Data.l $CABAC28A, $53B39330, $24B4A3A6, $BAD03605, $CDD70693
  Data.l $54DE5729, $23D967BF, $B3667A2E, $C4614AB8, $5D681B02
  Data.l $2A6F2B94, $B40BBE37, $C30C8EA1, $5A05DF1B, $2D02EF8D
EndDataSection
;}

*test = AllocateMemory(1000000000)


start = ElapsedMilliseconds()
test1 = CRC32Fingerprint(*test,1000000000)
Zeit1 = ElapsedMilliseconds()-start

start = ElapsedMilliseconds()
test2 = CRC32_AlterMann(*test,1000000000)
Zeit2 = ElapsedMilliseconds()-start

start = ElapsedMilliseconds()
test3 = CRC32_freak(*test,1000000000)
Zeit3 = ElapsedMilliseconds()-start

start = ElapsedMilliseconds()
test4 = CRC32_Helle(*test,1000000000)
Zeit4 = ElapsedMilliseconds()-start

OpenConsole()
PrintN("PB         : "+Str(test1)+"  Zeit : "+Str(Zeit1))
PrintN("Alter Mann : "+Str(test2)+"  Zeit : "+Str(Zeit2))
PrintN("freak      : "+Str(test3)+"  Zeit : "+Str(Zeit3))
PrintN("Helle      : "+Str(test4)+"  Zeit : "+Str(Zeit4))

Input()

FreeMemory(*test)
CloseConsole()
PB : 1676957506 Zeit : 2781
Alter Mann : 1676957506 Zeit : 4454
freak : 1676957506 Zeit : 2593
Helle : 1676957506 Zeit : 2000

bei mir ist Helle der schnellste mit 2.0 Sekunden!

Verfasst: 19.02.2009 22:37
von freak
Helle: Du musst EDI und ESI sichern bevor du sie verwendest. Nur EAX, EDX und ECX stehen in PB zur freien Verfügung.