Extrem miese Performance durch Multithreading?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

DAK

Betreff: Extrem miese Performance durch Multithreading?

BeitragFr, Sep 04, 2009 23:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab grad erstmals mit Multithreading in BMax herum gespielt und bin auf ein erschreckend mieses Ergebnis gekommen.

Zuerst mal der Code, den ich verwendet hab:

BlitzMax: [AUSKLAPPEN]

SuperStrict
Framework brl.glmax2d
Import brl.threads
Import brl.standardio
Import maxgui.win32maxguiex
Import brl.timer
Import brl.eventqueue

Const NUMBER_OF_THREADS:Byte=1

Global xpos:Int=0
Global xposmutex:TMutex = CreateMutex()

If NUMBER_OF_THREADS>1 Then
Local Thread:TThread[5]

For Local i:Int = 0 To NUMBER_OF_THREADS-2
Thread[i]=CreateThread(TestThread,Null)
DetachThread(Thread[i])
Next
EndIf

TestThread(Null)

Function TestThread:Object(data:Object)
While TryLockMutex(xposmutex)=False
Wend
Local window:TGadget = CreateWindow("Testfenster",xpos,0,200,200,Null,WINDOW_TITLEBAR)
Local id:Int = xpos/200
xpos:+200
UnlockMutex(xposmutex)
Local label:TGadget = CreateLabel("",0,0,200,200,window)
Local count:Int = 0
Local timer:TTimer = CreateTimer(20)
Print id+" created"
While 1
count:+1
SetGadgetText(label,count)
Print id+" updated"
WaitTimer timer
Wend
End Function


Spielt mal rum mit dem NUMBER_OF_THREADS...

schlagt mich, wenn ich schlampig programmiert hab, aber wenn ich einen thread mach, dann hab ich quasi keine cpu-auslastung, wenn ich 2 mach, bin ich auf 100% und wenns noch mehr wird, geht der rechner ziemlich in die knie.

2x so nen billigtask sollte das ganze aber schon hinkriegen ohne auf 100% zu gehen. (gut, der computer auf dem ich das getestet hab, is ne alte möhre, das is mein alter laptop mit 1x2ghz, aber trotzdem sollt das den nicht so extrem überlasten. wenn ich das programm mit einem prozess 2x gleichzeitig ausführe is das nicht mal annähernd merkbar in der cpu-auslastung.)

bitte testet das auch mal schnell durch und schaut, obs bei euch auch so mies is.


btw: ich verwende BMax 1.34 und MaxGUI 1.33

noch mal zu meinem Laptop:
Compaq Evo N610c
1x2 GHz
512 MB Ram
Win XP SP3

Intressant wärs, wies auf anderen Systemen / Betriebssystemen ausschaut...
Gewinner der 6. und der 68. BlitzCodeCompo

Xeres

Moderator

BeitragFr, Sep 04, 2009 23:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich mach auch grad versuche mit Threads - ich glaub irgendwie haut da was mit den Timern nicht hin. Ersetz den mal mit Delay.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

DAK

BeitragFr, Sep 04, 2009 23:39
Antworten mit Zitat
Benutzer-Profile anzeigen
rennt ohne probleme, stimmt

mach ich mich mal dran ein timer-modul zu schreiben, dass auch mit threads funktioniert
Gewinner der 6. und der 68. BlitzCodeCompo

BtbN

BeitragSa, Sep 05, 2009 10:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Ausserdem wird diese While/Wend schleife auch 100% CPU ziehen, solange der Mutex gelockt ist.
Warum überhaupt dieses seltsame konstrukt? Und was ist der sinn des Programmes?

Überhaupt ist Threading in BMax momentan unbenutzbar, da einfach nichts thread-safe oder zumindest re-entrant ist.
Events(Worauf Timer basieren) sind zu vermeiden, d.h. Timer nur im Main-Thread benutzen.

BladeRunner

Moderator

BeitragSa, Sep 05, 2009 10:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Zumindest das Laden von Images im Hintergrund läuft bei mir flott und ohne Probleme.
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

BtbN

BeitragSa, Sep 05, 2009 10:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Sofern du dabei sicherstellst, dass nicht 2 threads zur gleichen zeit auf die Pixmaps zugreifen(Du darfst nur Pixmaps in nem gesonderten thread laden, Images gehen nur mit glück, je nachdem wie nett der GraKa Treiber ist, ob er laden in nem andern thread erkennt und erlaubt, oder ob er dir weg crasht), ist das kein Thema, da Pixmaps ja keine Events verursachen, oder sonst irgendwelche seiteneffekte haben.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group