TileMap CPU Auslastung

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Asobi

Betreff: TileMap CPU Auslastung

BeitragMi, Nov 17, 2010 12:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ich zeichne eine TileMap aus insgesamt 20x15 tiles, die jeweils 40x40px groß sind.
Komme dabei jedoch auf 90+% CPU Auslastung. Weiß jemand, wie ich das etwas Leistungsfreundlicher hinkriegen kann ?

Hier der Code:
BlitzBasic: [AUSKLAPPEN]
		MapW = 20
MapH = 15
tileW = 40
tileH = 40

For drawTileX = 0 To (MapW-1)
For drawTileY = 0 To (MapH-1)
DrawImage aTileSet,drawTileX*tileW,drawTileY*tileH,0
DrawImage rasterBlock,drawTileX*tileW,drawTileY*tileH
Next
Next
<@Exorzist> Die Intilligenz von Menschen lässt sich an ihren Fragen feststellen <@huhu> Hä?

Hubsi

BeitragMi, Nov 17, 2010 12:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich denke Du suchst das Problem nur an der falschen Stelle. Such mal nach "Hurra, 100% Auslastung". Ein Beitrag von Xeres wenn ich nicht irre (bin). Schöner kann man es nicht erklären und ich muß nicht soviel tippen Mr. Green

Edit: https://www.blitzforum.de/foru...hp?t=25242 -> das ist der Link zum Artikel. Es ist übrigens von Abrexxes Embarassed Asche über mein Haupt Mr. Green
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Asobi

BeitragMi, Nov 17, 2010 13:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Sein Beitrag war einer der ersten die ich mir hier durchlesen habe, daran liegt es auch sicher nicht.
Grund: Wenn ich den oben geposteten code auskommentiere, liegt die auslastung bei 3-10%
<@Exorzist> Die Intilligenz von Menschen lässt sich an ihren Fragen feststellen <@huhu> Hä?

Holzchopf

Meisterpacker

BeitragMi, Nov 17, 2010 13:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie gross ist denn die Auslastung noch, wenn du die Tipps aus Hurra, 100 % Auslastung umsetzt?
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Asobi

BeitragMi, Nov 17, 2010 13:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Also mein Code ist im Gesamten so etwa aufgebaut:

BlitzBasic: [AUSKLAPPEN]
Graphics 1070,670,32,2
SetBuffer BackBuffer()

timer = CreateTimer(60)
ende = False
MapW = 20
MapH = 15
tileW = 40
tileH = 40

Repeat
Cls

For drawTileX = 0 To (MapW-1)
For drawTileY = 0 To (MapH-1)
DrawImage aTileSet,drawTileX*tileW,drawTileY*tileH,0
DrawImage rasterBlock,drawTileX*tileW,drawTileY*tileH
Next
Next

WaitTimer timer
Flip 0
Until ende

End


Die Auslastung liegt noch bei 90+%

den Beitrag Hurra, 100 % Auslastung habe ich mir schon vor einigen Wochen durchgelesen und es auch so gehandhabt.
<@Exorzist> Die Intilligenz von Menschen lässt sich an ihren Fragen feststellen <@huhu> Hä?

Holzchopf

Meisterpacker

BeitragMi, Nov 17, 2010 13:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm.... Okay Confused Das ist echt seltsam. Du zeichnest ja nichtmal übermässig viel. Tritt den dieses Phänomen bei allen BB-Projekten auf? (Also auch bei fremden, die eigentlich mit Timer und unsynchronem Doublebuffering arbeiten sollten?)

Und was ist, wenn du den Timer mal auf Extremwerte stellst (1 und - sagen wir mal - 1000)?

Ich denke zwar, dass das nicht auf die Auslastung deines BB-Programmes schlagen sollte, aber: Hast du evtl. einen Grafiktreiber, der es erlaubt, VSync zu erzwingen und diese Option auch aktiviert? Wenn ja, versuche diese Einstellung mal auf 'Application default' oder so zu ändern.

mfG
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Eingeproggt

BeitragMi, Nov 17, 2010 14:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich empfehle für hintergrund tiles drawblock. Hilft sicher ein wenig.
Mfg christoph
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Asobi

BeitragMi, Nov 17, 2010 14:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Holzchopf hat Folgendes geschrieben:
Hmm.... Okay Confused Das ist echt seltsam. Du zeichnest ja nichtmal übermässig viel. Tritt den dieses Phänomen bei allen BB-Projekten auf? (Also auch bei fremden, die eigentlich mit Timer und unsynchronem Doublebuffering arbeiten sollten?)


Hmm muss ich mal testen wenn ich zuhause bin, aber bei meinen bisherigen Projekten (ohne tilemap) war die Auslastung eigentlich nie so hoch.

Holzchopf hat Folgendes geschrieben:
Und was ist, wenn du den Timer mal auf Extremwerte stellst (1 und - sagen wir mal - 1000)?


1:Dann is die Auslastung zwar geringer, aber das Programm sehr langsam.
1000: merke keinen unterschied, Auslastung hoch

Holzchopf hat Folgendes geschrieben:
Ich denke zwar, dass das nicht auf die Auslastung deines BB-Programmes schlagen sollte, aber: Hast du evtl. einen Grafiktreiber, der es erlaubt, VSync zu erzwingen und diese Option auch aktiviert? Wenn ja, versuche diese Einstellung mal auf 'Application default' oder so zu ändern.

mfG


Keine Ahnung, ehrlich gesagt, kenn mich damit nicht aus und weiß auch nicht wie/wo ich nachsehen könnte.

Eingeproggt hat Folgendes geschrieben:
Ich empfehle für hintergrund tiles drawblock. Hilft sicher ein wenig.
Mfg christoph


Geht schlecht, da alle tiles in einem Bild sind und über LoadAnimImage geladen werden. In dem Fall geht die Ausgabe glaube ich nur über DrawImage.

Wenn ich es trotzdem mit DrawBlock versuche mit einzelnen Bildchen, ist die Auslastung übrigens immernoch so hoch.
<@Exorzist> Die Intilligenz von Menschen lässt sich an ihren Fragen feststellen <@huhu> Hä?

BladeRunner

Moderator

BeitragMi, Nov 17, 2010 16:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, Butter bei die Fische:
Was sind Deine Rechnerspezifikationen?
Poste mal den kompletten betroffenen Code, idealerweise auch die betroffenen Medias im Archiv hochladen.
Welche Größe und Eigenschaften haben die zu zeichnenden Bilder (Wieviele Tiles hat die Datei in sich?)
Je mehr Infos desto besser können wir helfen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Asobi

BeitragMi, Nov 17, 2010 16:43
Antworten mit Zitat
Benutzer-Profile anzeigen
also Rechner (ist ein etwas älteres notebook):

Windows 7 Enterprise 32Bit
Intel Pentium M 2Ghz
NVidia GForece Go 6800
2048MB RAM

Den kompletten Code würde ich hier nur ungern posten, aber ich bezweifel auch, dass dieser etwas mit der Auslastung zu tun hat. Immerhin ist die CPU kaum ausgelastet, sobald der oben genannte Code auskommentiert ist.

Die Medias, die ich hierzu benutze sind:

Tileset 240x80px, BMP Format, 53.8kb (12 tiles mit je 40x40px)
rasterBlock 80x40px, PNG Format, 0.95kb (raster-block normal und mouseover, also 2 animbilder je 40x40px)
<@Exorzist> Die Intilligenz von Menschen lässt sich an ihren Fragen feststellen <@huhu> Hä?

BladeRunner

Moderator

BeitragMi, Nov 17, 2010 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Oftmals liegt der Teufel im Detail. Vielleicht lässt Du ja versehentlich die Tiles mehrfach einzeichnen oder so. Das kann man aber nur erkennen wenn man den ganzen Code zur hand hat.
Eventuell ist aber auch einfach die vergleichsweise alte Grafikkarte deines Notebooks schuld.
Wenn Du den Code nicht rausgeben willst könntest Du wenigstens eine .exe hochladen welche mittels Tastendruck die Grafikausgabe ein- und ausschalten lässt und die FPS anzeigt. Damit könnte man zumindest erahnen ob das Problem am Rechner oder am Programm liegt.

Ohne mehr Code begrenzt sich meine Hilfestellung hier.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Nov 17, 2010 20:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn rasterBlock oder aTileSet ein bildschirmfüllendes Bild/Tile ist, dann wird pro Schleifendurchlauf 300mal der Bildschirm komplett vollgezeichnet. Könnte auch ein Grund sein. Ansonsten ist Rätzelraten bei uns angesagt.

Kleine Verbesserung meinerseits, wenn du mit 2D-Arrays arbeiten solltest. Tausche dann die beiden Schleifen aus. In solchen Fällen am besten immer zuerst X dann Y zeichnen.

Statt: Code: [AUSKLAPPEN]
   For drawTileX = 0 To (MapW-1)
      For drawTileY = 0 To (MapH-1)

Besser: Code: [AUSKLAPPEN]
   For drawTileY = 0 To (MapH-1)
      For drawTileX = 0 To (MapW-1)
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Asobi

BeitragMi, Nov 17, 2010 22:18
Antworten mit Zitat
Benutzer-Profile anzeigen
So bin nun auch zuhause und kann am eigenen Rechner testen.

Vista Ultimate
AMD Phenom II X2 550 Dual ~3,1GHz
GeForce 9800GT 1GB
4094MB RAM

Ohne Tilemap: 3 bis 10% Auslastung
Mit TileMap: 43 bis 59% Auslastung

Also Teilweise lag es scheinbar am Computer,
aber kann auch nicht sein, das ich bei so einem Rechner 50% Auslastung habe bei einer 2D TileMap.
Muss also auch mit am Code liegen.

Ich schau mal, was sich machen lässt.
<@Exorzist> Die Intilligenz von Menschen lässt sich an ihren Fragen feststellen <@huhu> Hä?

Holzchopf

Meisterpacker

BeitragMi, Nov 17, 2010 22:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Nur noch so als Randbemerkung zu den "nur 50%" CPU Auslastung:

Wenn du auf einer Zweikern-CPU wie deinem AMD Phenom ein BB-Programm laufen lässt, so kann das theoretisch höchstens 50% Auslastung verursachen. Denn BB-Programme sind nicht Multithreading fähig (ohne spezielle Hacks) und werden folglich nur auf einem Kern gerechnet. Und die CPU-Auslastung, die der Taskmanager anzeigt, bezieht alle Kerne einer CPU mit ein.

Also: Am Problem hat sich nix geändert Wink

Übrigens könnte das Problem auch durch DirectX verursacht werden, aber dann müssten alle BlitzBasic Spiele so tun.
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Pummelie

BeitragMi, Nov 17, 2010 23:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du B+ hast, kannst du vor dem Graphics ja man SetGFXDriver(2) versuchen, wenn das den gewünschten Unterschied hevorbringt, liegt es an DX...

Ansonsten vlt. mal BB updaten?
It's done when it's done.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Nov 17, 2010 23:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Ansonsten auch: Neuere Rechner werden auf 2D immer langsamer, da immer mehr auf die Grafikkarte übertragen wird die dann 3D per fake 2D zeichnet. In so einem Fall kannst dir mal meine Draw3D2 ansehen (siehe Signatur). Dadurch zeichnet nur noch die Grafikkarte und der Prozessor weist nur an was die Grafikkarte tun soll. Am Ende hat man mehr Rechenleistung durch die CPU übrig.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Dottakopf

BeitragDo, Nov 18, 2010 10:24
Antworten mit Zitat
Benutzer-Profile anzeigen
hm vielleicht ist das zu banal, aber mach mal aus den 40x40 tiles 32x32... oder irgendwas was sich aus ner 2 hoch x zahl zusammen setzt.
Rechtschreibfehler gelten der allgemeinen Belustigung!

Asobi

BeitragFr, Nov 19, 2010 9:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab das Projekt mal hochgeladen. Hab versucht den Code noch so gut ich kann zu verkürzen.
Da das mein erstes Projekt ist wird es sicher auch noch viele Macken im Code haben^^

http://asobi.kilu.de/BBEditor/editor.zip

EDIT:

hab grad einpaar tests gemacht und finde das ganze iwie komisch.

BlitzBasic: [AUSKLAPPEN]
Graphics 800,600,32,2

timer = CreateTimer(60)

Repeat
Cls

WaitTimer(timer)
Flip 0
Until ende

End


Bei diesem Code hab ich mit einem Kern 0% Auslastung

BlitzBasic: [AUSKLAPPEN]
Graphics 800,600,32,2

timer = CreateTimer(60)

Repeat
Cls

Text 0,0,"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

WaitTimer(timer)
Flip 0
Until ende

End


und bei dem hier 10 bis 20%...
verbraucht normaler Text etwa so viel ?
<@Exorzist> Die Intilligenz von Menschen lässt sich an ihren Fragen feststellen <@huhu> Hä?

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Nov 19, 2010 16:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Siehe Setbuffer Backbuffer()
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group