LockedPixels - Write-/ReadPixelBank - Community Benchmark

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

hazumu-kun

Betreff: LockedPixels - Write-/ReadPixelBank - Community Benchmark

BeitragMo, März 15, 2010 22:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich rufe zum Benchmark auf!

Folgender Code misst 4 Zeiten:
WritePixelFast / ReadPixelfast
+
Die zugehörigen Zeiten für meinen low-level Zugriff
(BlitzPlus sourcecode)
BlitzBasic: [AUSKLAPPEN]
; #### RAWMEM-GFX Variables
Global RMG_buffer_bank
Global RMG_buffer_format
Global RMG_buffer_pitch
; ****

Const gfx_w=1280
Const gfx_h=1024

Local i,x,y
Local value

SetGfxDriver 1

AppTitle "Lockedpixels Test"
Graphics gfx_w,gfx_h,32;,2
LockBuffer()
RAWMEM_GFX_Init ()

;[Block] WritePixel
; WritePixelFast
value= 0 Or (255 Shl 8) Or (0 Shl 16)

startfast= MilliSecs()
For i= 0 To 9
For y= 0 To gfx_h-1
For x= 0 To gfx_w-1
WritePixelFast (x,y,value)
Next
Next
Next
timefast= MilliSecs()-startfast

; WritePixelBank
value= 255 Or (0 Shl 8) Or (255 Shl 16)
startbank= MilliSecs()
For i= 0 To 9
For y= 0 To gfx_h-1
For x= 0 To gfx_w-1
WritePixelBank (x,y,value)
Next
Next
Next
timebank= MilliSecs()-startbank

Notify "10mal "+(gfx_w*gfx_w)+"Pixel zeichnen:"+Chr$(10)+"WritePixelFast: "+timefast+"ms"+Chr$(10)+"WritePixelBank: "+timebank+"ms"
;[End]

;[Block] ReadPixel
; ReadPixelFast
value= 0 Or (255 Shl 8) Or (0 Shl 16)

startfast= MilliSecs()
For i= 0 To 9
For y= 0 To gfx_h-1
For x= 0 To gfx_w-1
WritePixelFast (x,y,value)
Next
Next
Next
timefast= MilliSecs()-startfast

; ReadPixelBank
value= 255 Or (0 Shl 8) Or (255 Shl 16)
startbank= MilliSecs()
For i= 0 To 9
For y= 0 To gfx_h-1
For x= 0 To gfx_w-1
WritePixelBank (x,y,value)
Next
Next
Next
timebank= MilliSecs()-startbank

Notify "10mal "+(gfx_w*gfx_w)+"Pixel lesen:"+Chr$(10)+"ReadPixelFast: "+timefast+"ms"+Chr$(10)+"ReadPixelBank: "+timebank+"ms"
;[End]

UnlockBuffer FrontBuffer()
EndGraphics
End

; #### Functions - developing RAWMEM-GFX
Function RAWMEM_GFX_Init (buffer=0)
; Initiates a buffer for working with it on a low-öevel basis.
; @param:
; buffer - Buffer this operation should aply to, standard is current buffer
; @return:
; int 1 indicates success, 0 indicates an error.
If buffer=0 Then buffer= GraphicsBuffer()

RMG_buffer_bank= LockedPixels(buffer)
RMG_buffer_format= LockedFormat(buffer)
RMG_buffer_pitch= LockedPitch(buffer)

If RMG_buffer_bank Then
Return 1
Else
Return 0
EndIf
End Function

Function ReadPixelBank (x,y)
; Reads pixeldata from a bufferbank.
; @param:
; x - X-Koordinate
; y - Y-Koordinate
; @return:
; int RGB value as it is used by ReadPixel/-Fast
Local i
Local value
Local buffer_offset

If RMG_buffer_format=3 Then
buffer_offset= y*RMG_buffer_pitch+x*3

value= PeekByte(RMG_buffer_bank,buffer_offset) Shl 16
value= value+ PeekByte(RMG_buffer_bank,buffer_offset+1) Shl 8
value= value+ PeekByte(RMG_buffer_bank,buffer_offset+2)
ElseIf RMG_buffer_format=4 Then
value= PeekInt (RMG_buffer_bank,y*RMG_buffer_pitch+(x Shl 2))
Else
AppTitle "bitdepht error"
RuntimeError "Something got really fucked up,"+Chr$(10)+"and you managed to create a 16bit buffer on this system, weird!"
EndIf

Return value
End Function

Function WritePixelBank (x,y,col_int)
; Writes pixeldata to a buffer bank
; @param:
; x - X-Koordinate
; y - Y-Koordinate
; col_int - New color of specified pixel
Local buffer_offset
Local buffer_bank= RMG_buffer_bank

If RMG_buffer_format= 3 Then
buffer_offset= y*RMG_buffer_pitch+x*3

PokeByte (buffer_bank,buffer_offset,col_int Shr 16) ; Red
PokeByte (buffer_bank,buffer_offset+1,col_int Shr 8); Green
PokeByte (buffer_bank,buffer_offset+2,col_int) ; Blue

ElseIf RMG_buffer_format= 4
PokeInt buffer_bank,y*RMG_buffer_pitch+(x Shl 2),col_int
Else
AppTitle "bitdepht error"
RuntimeError "Something got really fucked up,"+Chr$(10)+"and you managed to create a 16bit buffer on this system, weird!"
EndIf
End Function
; ****


Ich habe schon mit 2 Freunden etwas getestet, dabei ist bemerkenswerterweise bei Person 2 folgendes rausgekommen:
Code: [AUSKLAPPEN]
#### Person 2 ####
Versuch 1:
   10mal 1638400Pixel zeichnen:
   WritePixelFast: 434ms
   WritePixelBank: 375ms
   
   10mal 1638400Pixel lesen:
   ReadPixelFast: 259ms
   ReadPixelBank: 353ms
   
Versuch 2:
   10mal 1638400Pixel zeichnen:
   WritePixelFast: 413ms
   WritePixelBank: 369ms
   
   10mal 1638400Pixel lesen:
   ReadPixelFast: 256ms
   ReadPixelBank: 371ms


Ich dachte ernsthaft meine Methode wäre immer langsammer, deswegen brauche ich mehr Testergebnisse!

Für die ohne B+ hier das Kompilat: https://www.blitzforum.de/upload/file.php?id=8175

MFG, hazumu.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

Xaymar

ehemals "Cgamer"

BeitragMo, März 15, 2010 22:21
Antworten mit Zitat
Benutzer-Profile anzeigen
WritePixelFast: 236ms
WritePixelBuffer: 542ms
ReadPixelFast: 241ms
ReadPixelBuffer: 376ms

Auf nach 10 Versuchen wird deine Funktion nicht schneller:)
Warbseite

hazumu-kun

BeitragMo, März 15, 2010 22:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber bei der einen bestimmten Person lief das Schreiben schneller, komischerweise, auch beim 20ten Versuch...

Scheint dich nicht zu betreffen.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent
 

Dreamora

BeitragDi, März 16, 2010 10:02
Antworten mit Zitat
Benutzer-Profile anzeigen
je mieser die grafikkarte desto besser kommt der buffer ansatz im verhältnis dazu weg.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

TimBo

BeitragDi, März 16, 2010 13:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
WritePixelFast  : 238
WritePixelBank  : 301
 
ReadPixelFast   : 213
ReadPixelBank   : 305
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

Thunder

BeitragDi, März 16, 2010 13:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Programm hat Folgendes geschrieben:
WritePixelFast: 407 ms
WritePixelBank: 704 ms

WritePixelFast: 396 ms
WritePixelBank: 705 ms
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

hazumu-kun

BeitragDi, März 16, 2010 18:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay, ich danke euch soweit. Bei besagter Messung handelte es sich um eine Notebook on board chip, Hersteller weiß ich (noch) nicht, das Teil ist aber relativ neu.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

ozzi789

BeitragDi, März 16, 2010 18:51
Antworten mit Zitat
Benutzer-Profile anzeigen
219 ms
357 ms

219 ms
308 ms

(siehe sig @home)
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

hazumu-kun

BeitragDi, März 16, 2010 18:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Immerhin hab ich die 2 Funktionen jetz mal fertig, vielleicht kann man die noch für was anderes besser gebrauchen als WritePixel
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group