Aktuelle Zeit: 18.11.2017 21:37

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 22 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags: Re: [gelöst] PureBasic nach (Inline -)FASM (Prozentrechnen)
BeitragVerfasst: 02.09.2017 21:02 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
@Mijikai:

Ja so ist es besser! :mrgreen: :allright:

So kann man auch unter Linux etwas damit anfangen.

Aber deine ASM-Funktion ist trotzdem langsamer als die "normale" Variante.

Kann man da noch optimieren?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [gelöst] PureBasic nach (Inline -)FASM (Prozentrechnen)
BeitragVerfasst: 02.09.2017 21:12 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
ccode_new hat geschrieben:
...
Kann man da noch optimieren?


Ja, der Code der reinen Purebasic Funktion z.B.
läd den Float Wert direkt ohne ihn umwandeln zu müssen fdiv
ist zudem schneller als fdivp da fdivp den stack manipuliert.

Was noch alles möglich ist kann ich nicht sagen :roll:

Das sind meine ersten Gehversuche mit der FPU :freak:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [gelöst] PureBasic nach (Inline -)FASM (Prozentrechnen)
BeitragVerfasst: 02.09.2017 21:15 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
Ach noch etwas:

Ich habe die Procedure "Processed" (Also die "Normale") und die Procedure "ASM_Processed" mal mit ElapsedMilliseconds() und einer laaangen FOR-Schleife getestet.

Dabei sind mir zwei Dinge aufgefallen:

1. Die Proceduren sind "fast" gleich schnell. (Die "normale" ist bei mir nur 1ms schneller als die Assemblervariante)

2. Es kommt bei der Assemblervariante zu einem Bug.

Ich habe mal folgende Beispielwerte getestet:

Code:
go1 = ElapsedMilliseconds()

For i = 0 To 10000
  Debug ASM_Processed(10,20)
Next i

Debug ElapsedMilliseconds() - go1


Ab dem 7. Durchlauf liefert nur die Assembler-Variante einen Bug.

Hier der Debug:
200
200
200
200
200
200
-9223372036854775808
-9223372036854775808
...und so weiter


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [gelöst] PureBasic nach (Inline -)FASM (Prozentrechnen)
BeitragVerfasst: 02.09.2017 21:40 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
Wahrscheinlich ein Problem mit dem Stack durch 'fld st1'.

Tritt der Fehler auch damit auf?
Code:
Procedure.i ASM_Processed(Bytes.i,BytesProcessed.i)
  !fild qword[p.v_Bytes]
  !mov qword[p.v_Bytes],64h
  !fild qword[p.v_Bytes]
  !fdivp
  ;...
  !fistp qword[p.v_Bytes]
  !mov rax,[p.v_Bytes]
  ProcedureReturn
EndProcedure


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [gelöst] PureBasic nach (Inline -)FASM (Prozentrechnen)
BeitragVerfasst: 02.09.2017 21:57 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
Ähm Nö!
So tritt der Fehler nicht auf, aber die "Procedure" liefert aber auch nur "0" als Rückgabewert.

Can you find the error?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [gelöst] PureBasic nach (Inline -)FASM (Prozentrechnen)
BeitragVerfasst: 02.09.2017 22:10 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
Neue Version :D
Code:
Procedure.i ASM_Processed(Bytes.i,BytesProcessed.i)
  !fild qword[p.v_Bytes]
  !fdiv dword[_FLT]
  !fstp qword[p.v_Bytes]
  !fild qword[p.v_BytesProcessed]
  !fdiv qword[p.v_Bytes]
  !fistp qword[p.v_Bytes]
  !mov rax,[p.v_Bytes]
  ProcedureReturn
  !_FLT:
  !dd 42C80000h
EndProcedure


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [gelöst] PureBasic nach (Inline -)FASM (Prozentrechnen)
BeitragVerfasst: 02.09.2017 22:17 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
Cool!
So funktioniert die Prozedur.

Aber die Funktion ist trotzdem bei mir noch 1 bis 3 ms langsamer als die "normale" Variante.

Mmmh, eigentlich sind beide Varianten eben fast gleich schnell. (Manchmal sogar gleich schnell im ms-Bereich)

Also müsste die "Procedure" noch weiter optimiert werden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [gelöst] PureBasic nach (Inline -)FASM (Prozentrechnen)
BeitragVerfasst: 02.09.2017 22:47 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
Bei mir ist die Inline Variante schneller.

Testcode:
Code:


Procedure.i Processed(Bytes.i,BytesProccessed)
  Protected Factor.f = Bytes / 100
  ProcedureReturn BytesProccessed / Factor
EndProcedure

Procedure.i ASM_Processed(Bytes.i,BytesProcessed.i)
  !fild qword[p.v_Bytes]
  !fdiv dword[_FLT]
  !fstp qword[p.v_Bytes]
  !fild qword[p.v_BytesProcessed]
  !fdiv qword[p.v_Bytes]
  !fistp qword[p.v_Bytes]
  !mov rax,[p.v_Bytes]
  ProcedureReturn
  !_FLT:
  !dd 42C80000h
EndProcedure

sequence = 10000000

start1 = ElapsedMilliseconds()           
For t = 1 To sequence
  ASM_Processed(500,33)
Next
end1 = ElapsedMilliseconds() - start1

start2 = ElapsedMilliseconds()           
For t = 1 To sequence
  Processed(500,33)
Next
end2 = ElapsedMilliseconds() - start2

MessageRequester("Ergebnis","Inline: " + StrF(end1) +" ms" + Chr(13) + "PureBasic: " + StrF(end2) +" ms")




Zuletzt geändert von Mijikai am 02.09.2017 23:08, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [gelöst] PureBasic nach (Inline -)FASM (Prozentrechnen)
BeitragVerfasst: 02.09.2017 23:02 
Offline

Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge
Mmmh ich revidiere meine Aussage.
Die Inline-Variante ist doch "etwas" schneller.

Wie groß ist die Differenz bei dir ?

Bei mir max. 300 ms. (Debugger) (Inline is the winner :o )

->max. 7 ms (ohne Debugger) (nach 20 Versuchen)


Zuletzt geändert von ccode_new am 02.09.2017 23:11, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: [gelöst] PureBasic nach (Inline -)FASM (Prozentrechnen)
BeitragVerfasst: 02.09.2017 23:07 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
Die Inline Variante ist bei mir mit Debugger ca. 200 ms schneller
und ohne ca. 10 ms schneller.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 22 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye