Aktuell wollte ich einen Vorgang (Sortieren von großen Datenmengen) mit Threads beschleunigen (Intel I7 mit 4 echten Kernen).
Hierbei hat es gezeigt, das bei der zuschaltung weiterer Kerne der Prozess sogar länger dauert.
Nun habe ich mal ein kleines Testprogramm geschrieben um andere Fehler auszuschliessen aber auch hier zeigt das Bild.
Bei mir sind die Prozesse welche MT ablaufen bis zu 50% langsamer als ein singlecore Thread und das bei gleichem Kerntakt bei Single als MultiCore
Wie ist eure Meinung dazu?
Gruß Stefan
Code: Alles auswählen
; Testprogramm für die Leistungmessung bei Nutzung von Threads
Structure thMEM
zaehler.i
zaehler2.i
zeitInMS.i
thid.i
EndStructure
Procedure zaehlenbis(*m.thmem)
Protected t
t=ElapsedMilliseconds()
Repeat
*m\zaehler+1
zaehler2+2
zaehler2=zaehler*zaehler2
zaehler2/2
zaehler2=0
Until ElapsedMilliseconds()-t>*m\zeitInMS
EndProcedure
Dim mem.thmem(30)
Define erg.s,used.i=2
mem(0)\zeitInMS=5000
zaehlenbis(@mem(0))
i=0
erg=erg+"Ergebniss Single = "+Str(mem(i)\zaehler)+Chr(10)+Chr(13)
mem(0)\zaehler=0
mem(0)\thid=CreateThread(@zaehlenbis(),@mem(0))
WaitThread(mem(0)\thid)
erg=erg+"Ergebniss sThread= "+Str(mem(i)\zaehler)+Chr(10)+Chr(13)
For i=0 To used
mem(i)\zeitInMS=mem(0)\zeitInMS
mem(i)\zaehler=0
Next i
For i=0 To used
mem(i)\thid=CreateThread(@zaehlenbis(),@mem(i))
Next
For i=0 To used
If mem(i)\thid:WaitThread(mem(i)\thid):EndIf
Next
For i=0 To used
erg=erg+"Ergebniss Nr. "+Str(i)+" = "+Str(mem(i)\zaehler)+Chr(10)+Chr(13)
Next i
Define m1.thmem,m2.thmem,m3.thmem,m4.thmem
m1\zeitInMS=mem(0)\zeitInMS
m2\zeitInMS=mem(0)\zeitInMS
m3\zeitInMS=mem(0)\zeitInMS
m4\zeitInMS=mem(0)\zeitInMS
m1\thid=CreateThread(@zaehlenbis(),@m1)
m2\thid=CreateThread(@zaehlenbis(),@m2)
m3\thid=CreateThread(@zaehlenbis(),@m3)
m4\thid=CreateThread(@zaehlenbis(),@m4)
WaitThread(m1\thid)
WaitThread(m2\thid)
WaitThread(m3\thid)
WaitThread(m4\thid)
erg=erg+"Ergebniss Nr. 1 X= "+Str(m1\zaehler)+Chr(10)+Chr(13)
erg=erg+"Ergebniss Nr. 2 X= "+Str(m2\zaehler)+Chr(10)+Chr(13)
erg=erg+"Ergebniss Nr. 3 X= "+Str(m3\zaehler)+Chr(10)+Chr(13)
erg=erg+"Ergebniss Nr. 4 X= "+Str(m4\zaehler)+Chr(10)+Chr(13)
MessageRequester("Ergebnisse",erg)
