Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Hyperthreading Problem (https://www.delphipraxis.net/146399-hyperthreading-problem.html)

Manfred D2009 19. Jan 2010 08:48


Hyperthreading Problem
 
Hallo,

ich habe aktuell das Problem, dass mein Programm, das schon sehr lange ohne Probleme auf verschiedensten Rechnern (Single-, Dual-, Quad-Core) sehr stabil läuft, auf einem i7 mit HT häufig stehenbleibt.

Ich verwende Delphi2009 und im Programm werden aufwändige Berechnungen auf alle vorhandenen Prozessoren verteilt...

Beim i7 mit HT werden mir 8 Prozessoren "gemeldet". Ich verteile die Berechnung mit Hilfe von Threads auf alle vorhandenen "Prozessoren", also 8 Threads, die zeitgleich rechnen. Vier Threads wären beim i7 HT wahrscheinlich besser, da ja nur 4 echte Kerne da sind, aber - abgesehen vom Verwaltungsaufwand - tut es auch nicht besonders weh. Könnte ich das Hyperthreading für meine Anwendung deaktivieren?

Gibt es Sachen, die in Verbindung mit HT nicht gemacht werden dürfen? In meinen Threads verwende ich z.B. synchronisierte Abschnitte, da ich die Berechnungsergebnisse gleich darstellen muss...

Kann mir jemand einen Tipp geben, wie ich mit diesem Problem weiterkomme?

tkone 19. Jan 2010 08:53

Re: Hyperthreading Problem
 
normalerweise kann man es im bios abstellen, oder schau mal unter:

msconfig -> start ->erweiterte opitonen und dann kann man die anzahl der kerne aussuchen

Manfred D2009 19. Jan 2010 09:49

Re: Hyperthreading Problem
 
Danke für den Tipp! Das habe ich bei meinen Tests ja auch so gemacht...

...und es wäre ja für meine Anwendung auch nicht so schlecht. Allerdings würde ich so den Rechner für andere Anwendungen "kastrieren", oder? Und außerdem müsste ich jedem Benutzer mitteilen, dass mein Programm nicht mit Hyperthreading kann und dass er es ausschalten muss...

tkone 19. Jan 2010 09:58

Re: Hyperthreading Problem
 
das stimmt natürlich.
kenne mich leider mit verteilen auf mehrere kerne nicht aus.
tritt das problem nur mit den 4kernen(8 simuliert) auf?
dann wäre es evtl möglich deine aufteilung auf max. 4 zu beschränken.

Manfred D2009 19. Jan 2010 10:43

Re: Hyperthreading Problem
 
...das habe ich gerade nochmals probiert:

Ich habe im Test für die Berechnung jetzt nur 4 Threads gestartet und dann ebenfalls Deadlocks bekommen. Ich denke, das kommt daher, dass mein Programm auch andere Threads nutzt und nicht ich die Berechnungsthreads den Prozessoren zuteile. Da werden die Threads (egal wieviele und egal woher) durch das Betriebssystem einfach auf alle 8 Prozessoren aufgeteilt.

Wenn Hyperthreading an ist, dann habe ich da aktuell keine Möglichkeit...

Luckie 19. Jan 2010 10:57

Re: Hyperthreading Problem
 
Deadlocks haben aber nichts mit Hyperthreading oder mehreren CPUs zu tun. Ein Deadlock entsteht dann, wenn sich mehrere Thread gegenseitig blockiern, weil sie zum Beispiel darauf warten, dass CriticalSections oder ähnliches freigegeben oder verlassen werden. Oder meist du mit Deadlock hier was anderes?

igel457 19. Jan 2010 11:05

Re: Hyperthreading Problem
 
Wenn dein Programm stehen bleibt, dann solltest du dies zuerst auf deinen Code und nicht die Hardware zurückführen - "Deadlocks", die das "Stehenbleiben" der Anwendung als Symptom haben, treten unter Umständen nur sporadisch auf.

Das Abstellen von HT ist keine Lösung, zumal das Problem - nach längeren Tests - garantiert auch auf anderen Rechnern zu Tage tritt.

Zum Beispiel hatte ich mal ein Programm, das unter Windows XP einwandfrei lief, unter Windows 7 jedoch einen "Deadlock" produziert hat, da sich der interne Aufbau von Critical Sections geändert hat - ich hatte ausversehen zu oft "TCriticalSection.Leave" aufgerufen.

s.h.a.r.k 19. Jan 2010 11:50

Re: Hyperthreading Problem
 
Zudem sei hier gesagt, dass diese HT-Technik absolute nichts mit einem auszuführenden Programm zu tun hat. Wäre ja noch schöner, wenn es an sowas liegen würde. Diese Technik ist ja nur eine von der CPU gegebenen Optimierung und hat nichts mit der später darauf laufenden Software zu tun.

Manfred D2009 19. Jan 2010 12:18

Re: Hyperthreading Problem
 
Danke für die Info´s! Es war auch meine erste Vermutung, dass im Programm etwas nicht passen könnte und deshalb diese Deadlocks auftauchten.

Allerdings machte es mich stutzig, dass bei ausgeschaltetem HT auf dem gleichen Rechner mit der gleichen Anzahl von Threads das Ganze funktioniert. Und da ich keine Erfahrungen mit HT-Rechnern habe, wollte ich mich hier vergewissern, ob es da irgendwo eine "offene Baustelle" gibt, zumal das Programm bisher eigentlich sehr stabil funktioniert.

Ich werde jetzt wohl ein paar Debug-Geschichten einbauen müssen...

Manfred D2009 22. Jan 2010 11:56

Re: Hyperthreading Problem
 
Hallo zusammen,

es ist so, wie ihr vermutet habt! Es lag nicht am Hyperthreading sondern an den Routinen der einzelnen Threads! Und wie es immer so ist: nur auf diesem einen Rechner war eine Debug-Option aktiv, die eigentlich nicht aktiv sein sollte, die aber dafür sorgte, dass unsynchronisiert Einträge in ein Grid gemacht wurden...

Außerdem kamen noch eine Reihe UpdateActions dazu, die das Ganze schwer nachvollziehbar machten...

Trotzem Danke für eure Bemühungen!


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz