Geschwindigkeit von WritePixelFast

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Plasma(alt)

Betreff: Geschwindigkeit von WritePixelFast

BeitragDo, Dez 25, 2003 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Graphics3D 1024,768,32,2

O_image = CreateImage (1024,1024)
Delay 1000

m = MilliSecs()
SetBuffer ImageBuffer(o_image)
LockBuffer
For r = 1 To 1024
For i = 1 To 1024
WritePixelFast r,i,0
Next
Next
UnlockBuffer
Print MilliSecs()-m +" ms for write"

Delay 1000

m = MilliSecs()
SetBuffer ImageBuffer(o_image)
LockBuffer
For r = 1 To 1024
For i = 1 To 1024
a =ReadPixelFast (r,i)
Next
Next
UnlockBuffer
Print
Print
Print MilliSecs()-m +" ms for read"

Waitkey()

76 ms write
813 ms read

Mr.Keks

BeitragDo, Dez 25, 2003 20:23
Antworten mit Zitat
Benutzer-Profile anzeigen
ja und? nix wirklich neues ^^

... oder habe ich deinen ausführlichen kommentar falsch verstanden? Smile Rolling Eyes

ich lasse dir etwas zeit, zu antworten, was die aussage sein sollte, dann schiebe ich es nach allgemein, für denn fall, dass ich dich missverstanden habe.
MrKeks.net
 

lettorTrepuS

BeitragDo, Dez 25, 2003 20:26
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.
 

walski

Ehemaliger Admin

BeitragDo, Dez 25, 2003 20:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Was zur Hölle sollen solche Schwachsinns Thread ohne jede Daseinberechtigung und ohne jeden Versuch ihnen eine zu geben?

walski
buh!
 

lettorTrepuS

BeitragDo, Dez 25, 2003 20:42
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.
 

walski

Ehemaliger Admin

BeitragDo, Dez 25, 2003 21:05
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Es steht nicht EIN Satz dabei was es soll!
Also ein: "Warum ist ReadPixelFast so lahm?" oder "Ist das normal das ReadPixelFast so lahm ist?"... NADA

2. Solche erkenntnisse haben sicherlich nichts im Smalltalk zu suchen (da stands eben noch!)

3. "So siehts aus" als Topic setzt dem ganzen noch die Krone auf! (auch geändert!)

Also wenn Plasma uns jetzt noch sagt was er will is doch alles gut.

Aber ich setze auch nicht:
walski hat Folgendes geschrieben:

Forum: Zum Forum Topic: "Nüdeldüü BÜÜÜ!"
Code: [AUSKLAPPEN]

t=millisecs()
for i=1 to 100
  print "Hallo"
next
t=millisecs()-t
print t

3ms


Ins Forum! Das hätte genausoviel Sinn!

walski
buh!

Plasma(alt)

Betreff: ok

BeitragDo, Dez 25, 2003 21:12
Antworten mit Zitat
Benutzer-Profile anzeigen
also

ich persöhnlich hätte nie im traum daran gedacht das es diesen unterschied gibt da ich dachte beide nativen b3d befehle sind
gleichschnell!

Ausserdem erklärt dieser Thread einige probleme in bezug auf
Speicherzugriffe in Assembler oder C++
Warum Images und Texturen nicht wie in b+ im sys ram
gehalten werden können weiss ich nicht aber viele 3d engines
(b3d ist keine engine ich weiss) machen es so um schnellere manipulationen zu ermöglichen

ich glaube die alte überschrift gab meiner "En(d)-täuschung mehr
Ausdruck !

ps: in diesem forum habe ich schon wesentlich schwachsinnigeren
schwachsinn gelesen Wink

Ich schäme mich ja fast dafür das ich hier poste !

by

Travis

BeitragDo, Dez 25, 2003 21:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab bisher immer nur Probleme mit WritePixelFast gehabt. Wenn ich z.B. eine Bitmap-Datei auslese (Byte für Byte) und dann mit WritePixelFast darstellen will, muss ich vorher die ganzen Farbwerte noch in dieses andere (blöde) Farbsystem umrechnen. Da bin ich dann mit Plot insgesammt etwa genauso schnell.

Eigentlich ein toller Befehl, weil er wirklich schneller ist als Plot, aber mit diesen Farbsystem Rolling Eyes
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
 

lettorTrepuS

BeitragDo, Dez 25, 2003 21:18
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.
 

konstantin

BeitragDo, Dez 25, 2003 21:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm... Ich habe noch nie mit WritePixelFast gearbeitet, aber da ich jetzt weiß wie lahm es ist, arbeite ich jetzt bit GLBasic Very Happy... Nee, besser nicht.

@ST: Das ist genau das, was ich immer sage Wink

TheShadow

Moderator

BeitragDo, Dez 25, 2003 21:58
Antworten mit Zitat
Benutzer-Profile anzeigen
das kann ich nicht erkläeren - sowas passiert nur wenn man gleichz. schreibt/liest... muss später ansehen...
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2
 

lettorTrepuS

BeitragDo, Dez 25, 2003 22:01
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.
 

morszeck

Gast

Betreff: Re: ok

BeitragDo, Dez 25, 2003 22:41
Antworten mit Zitat
Plasma hat Folgendes geschrieben:
also
ich persöhnlich hätte nie im traum daran gedacht das es diesen unterschied gibt da ich dachte beide nativen b3d befehle sind
gleichschnell!


Da musst du dich an Mark wenden, dem Programmierer von B...

Zitat:
Ausserdem erklärt dieser Thread einige probleme in bezug auf
Speicherzugriffe in Assembler oder C++
Warum Images und Texturen nicht wie in b+ im sys ram
gehalten werden können weiss ich nicht aber viele 3d engines
(b3d ist keine engine ich weiss) machen es so um schnellere manipulationen zu ermöglichen


Da liegst du falsch: http://www.blitzbase.de/befehle2d/loadimage.htm Es gibt eben verschiedene Lademodis, bzw kannst du dir aussuchen in welchem Ram das Image geladen werden soll.

Zitat:
Ich schäme mich ja fast dafür das ich hier poste !


Naja, musst du nicht. Nur nächtemal solltest du aussagekräftige mehrsätzige Postings abgeben...

Aber noch eine Frage, wie schnell ist das ganze in C++ und mit welcher Engine hast du es verglichen ?

TheShadow

Moderator

BeitragFr, Dez 26, 2003 11:26
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Hast du Fehler im Code (1-1024) - ist aber nicht schlimm

2. Die Grafikkarte wurde auf Schreibzugriffe optimiert - da Programme meistens nur dumm den Bildschirm vollpixeln

3. Du schreibst immer den selben Wert - Grafikkarten benutzen spezielle Techniken um gleichfarbige Flächen schneller zu füllen - wenn ich Rand mache, dann verdoppelt sich die Zeit

4. DU MUSST!!!! Zuerst X-Koordinaten und dann Y-Koordinaten abarbeiten - Da Grafikkarte einen Cache hat, der davon ausgeht, dass der nächtste Pixel in X-Richtung ausgelesen wird... ich habe jetzt das Verhältniss 1:2, wärend du 1:10 hattest...

Code: [AUSKLAPPEN]

Graphics3D 1024,768,32,2

O_image = CreateImage(1024,1024)
Delay 1000

t1=MilliSecs()
buffer=ImageBuffer(o_image)
LockBuffer buffer
For y = 0 To 1023
For x = 0 To 1023
WritePixelFast x,y,Rand(255),buffer
Next
Next
t2=MilliSecs()
UnlockBuffer buffer
Print t2-t1 +" ms for write"

Delay 1000

t1=MilliSecs()
buffer=ImageBuffer(o_image)
LockBuffer buffer
For y = 0 To 1023
For x = 0 To 1023
a=ReadPixelFast(x,y,buffer)
Next
Next
UnlockBuffer buffer
t2=MilliSecs()
Print
Print
Print t2-t1 +" ms for read"

WaitKey()


read: 260
write: 480
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Plasma(alt)

Betreff: Rand()

BeitragFr, Dez 26, 2003 12:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Graphics3D 1024,768,32,2

O_image = CreateImage(1024,1024)
Delay 1000

t1=MilliSecs()
buffer=ImageBuffer(o_image)
LockBuffer buffer
For y = 0 To 1023
For x = 0 To 1023
WritePixelFast x,y,x Mod 255,buffer
Next
Next
t2=MilliSecs()
UnlockBuffer buffer
Print t2-t1 +" ms for write"

Delay 1000

t1=MilliSecs()
buffer=ImageBuffer(o_image)
LockBuffer buffer
For y = 0 To 1023
For x = 0 To 1023
a=ReadPixelFast(x,y,buffer)
Next
Next
UnlockBuffer buffer
t2=MilliSecs()
Print
Print
Print t2-t1 +" ms for read"

WaitKey()


rand () ist langsam

Aber immer noch einen unterschied von 1:7 hier!
ja klar der video ram ist auf schreiben getrimmt
der zugriff ist stark vom treiber bzw der videocard abhängig

über rtlmovememory wirds noch fantastischer

Code: [AUSKLAPPEN]



m = MilliSecs()


RtlMoveMemory2 i_bank,obuffer,1024*1024*4 
Print MilliSecs()-m +" read"
m = MilliSecs()

RtlMoveMemory2 o_bank,cbuffer,1024*1024*4


Print  MilliSecs()-m +" read"
;CallDLL ("TERABIT","PIXTEST",i_bank,o_bank)
m = MilliSecs()

RtlMoveMemory tbuffer,I_bank,1024*1024*4


;DrawImage T_image,0,0
Print MilliSecs()-m +" write"

;Text 10,10 ," DLL needs " +Str( d) +" ms "
WaitKey()
End


780 lesen
24 schreiben

@TS
>4. DU MUSST!!!! Zuerst X-Koordinaten und dann Y-Koordinaten abarbeiten - Da Grafikkarte einen Cache hat, der davon ausgeht, dass der nächtste Pixel in X-Richtung ausgelesen wird... ich habe jetzt das Verhältniss 1:2, wärend du 1:10 hattest...


das stimmt 100% und bringt noch ein paar ms


@morszeck

die zusatzmodi zum laden hat b3d nicht, sondern nur b+

TheShadow

Moderator

BeitragFr, Dez 26, 2003 12:26
Antworten mit Zitat
Benutzer-Profile anzeigen
oh rand ist tatsächlich langsam - sollte man nicht in so eine schleife packen...

naja immerhin 1:4 bei mir *g*

buffer=ImageBuffer(o_image)
LockBuffer buffer
For y = 0 To 1023
For x = 0 To 1023
xx=(xx+1) Mod 256
WritePixelFast x,y,xx,buffer
Next
Next
t2=MilliSecs()
UnlockBuffer buffer
Print t2-t1 +" ms for write"


K.A. meine DLL braucht für 256x256 nur 1-2 ms. zum lesen... Aber wenn ich gleichzeitig was schreiben will, dann bricht alles zusammen...
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2
 

lettorTrepuS

BeitragFr, Dez 26, 2003 14:48
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.

Plasma(alt)

Betreff: read bytes

BeitragFr, Dez 26, 2003 15:38
Antworten mit Zitat
Benutzer-Profile anzeigen
grins nicht so @TS

TheShadow

Moderator

BeitragFr, Dez 26, 2003 15:47
Antworten mit Zitat
Benutzer-Profile anzeigen
"Jetzt muss man sogar beachten wie man x und y abarbeitet? Oo"

Jo gehört zum Grundwissen - X immer zuerst, dann Y
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group