 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 05.12.2007, 16:18 Titel: |
|
|
Interessant wären auch die ergebnisse bei eine Quadcore CPU!!! |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 05.12.2007, 21:58 Titel: Re: "Kleiner" Thread-Benchmark? |
|
|
Bimi hat Folgendes geschrieben: | Das bedeutet konkret:
Keine gemeinsamen Datenbereiche auf die häufig zugegriffen wird.
Soviel wie möglich mit dem Stack arbeiten - die sind stets getrennt |
Parallelprogrammierung ist eine sehr anspruchsvolle Disziplin in der Informatik, war bei mir seinerzeit ein separates Fach an der Uni. Mit Deiner Erkenntnis hast Du bereits rein praktisch diverse fundamentale Grundsätze selber erlernt, z.B. derjenige, dass man Performanceverluste durch Eliminierung von kritischen Abschnitten vermeidet. Die hohe Kunst beim Software-Design paralleler Systeme ist die Aufteilung der Aufgabe in möglichst voneinander unabhängigen Teilaufgaben. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
Bimi
Anmeldungsdatum: 03.12.2007 Beiträge: 66
|
Verfasst am: 06.12.2007, 10:30 Titel: Re: "Kleiner" Thread-Benchmark? |
|
|
dreael hat Folgendes geschrieben: | Bimi hat Folgendes geschrieben: | Das bedeutet konkret:
Keine gemeinsamen Datenbereiche auf die häufig zugegriffen wird.
Soviel wie möglich mit dem Stack arbeiten - die sind stets getrennt |
Parallelprogrammierung ist eine sehr anspruchsvolle Disziplin in der Informatik, war bei mir seinerzeit ein separates Fach an der Uni. Mit Deiner Erkenntnis hast Du bereits rein praktisch diverse fundamentale Grundsätze selber erlernt, z.B. derjenige, dass man Performanceverluste durch Eliminierung von kritischen Abschnitten vermeidet. Die hohe Kunst beim Software-Design paralleler Systeme ist die Aufteilung der Aufgabe in möglichst voneinander unabhängigen Teilaufgaben. |
Selber Erlernt ist gut...
Ich betreibe diese "Disziplin" seit knapp 25 Jahren in der Praxis, zu einer Zeit als Ottonormalanwender sich noch mit seiner DOSe und GWBasic rumäergerte...
Im Gegensatz zu den meisten, die Parallelprogrammierung an der Uni gelernt haben, gehöre ich noch zu der Riege die es damals nicht an der Uni trainiert haben, sondern in der Praxis auch angewendet haben. Da relativieren sich so einige Theorien der Profs....
Ein Cray II verfügte damals über Technologien bei denen Intel erst beim Corr 2 Duo daran gedacht hat, das dies die Performance steigern könnte... |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 10.12.2007, 14:20 Titel: |
|
|
Warum kann ich in diesem kleinen Thread-Benchmark eigentlich nicht mehr als ca 64 Threads gleichzeitig starten??
Gibts da eine begrenzung seitens der betriebssysteme oder FBasic? |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 10.12.2007, 14:21 Titel: |
|
|
Code: |
Dim Shared threadsync As Any Ptr
dim shared threadhandles(1 to 300) as any ptr
Type rng
ystart As Integer
ymax As Integer
End Type
Screen 19, 8
Sub Main (ByRef yrng As rng)
Dim As Integer X, Y, Count
Dim As Single Size, R, I, RTmp, Rs, Iss
Dim As Byte Ptr img = ImageCreate(800,1) ' eine Zeile
For Y = yrng.ystart To yrng.ymax
For X = 32 To 832-1'Trick statt img[X+32]
Count = 600
Size = 0
R = 0
I = 0
While Size < 4 And Count > 0
RTmp = R
Rs = R * R
Iss = I * I
R = Rs - Iss + ((X - 650) / 320)
I = (2 * RTmp * I) + ((Y - 300) / 320)
Size = Rs + Iss
Count -= 1
Wend
img[X]= (count Mod 256)
Next
MutexLock threadsync
Put (0,Y), img, pset
MutexUnlock threadsync
'sleep 1
Next
ImageDestroy img
End Sub
Dim As Double t1, t2, its(1 to 64)
dim ti as integer
dim tis as integer
Dim ranges(1 to 64) as rng
threadsync = MutexCreate
t1 = Timer
'Folgende Variable verursacht einen "Ausnahmefehler" unter Windows wenn ihr wert ca 64 überschreitet:
ti = 64
for tis = 1 to ti
ranges(tis).ystart = (tis -1) * (600 / ti)
ranges(tis).ymax = (tis) * (600 / ti) -1
threadhandles(tis) = ThreadCreate(Cast(Any Ptr,@Main), @ranges(tis))
'print tis
next
for tis = 1 to ti
ThreadWait(threadhandles(tis))
next
t2 = Timer
its(ti) = (800* 600) / (t2 - t1)
cls
MutexDestroy(threadsync)
for ti = 1 to 64
print right(str(100+ti),2) & " Threads :" &its(ti) & " = " & (Int((its(ti)/its(1))*100) /100) & "fach"
next
Sleep
|
|
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 12.12.2007, 16:48 Titel: |
|
|
@Volta: Hast du Zufällig eine Intel-CPU mit Hyperthreading? .. hab nämlich auf einem PC mit hyperthreading auch eine beschleunigung von ca 1,09. |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|