Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Problem mit hyper threading - Programm stürzt ab

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
27.09.2006, 09:36 Uhr
~planet911
Gast


hallo,
ich bin studentische hilfskraft am fraunhofer institut in dresden und ich habe den auftrag bekommen ein lösung für folgendes problem zu finden.

stundenlange google-suche hat mir leider nicht weiter geholfen.


die problemstellung:

mein chef hat ein programm entwickelt, dass einen prüfkopf ausliest.
dieses programm läuft sehr stabil, nur jetzt hat sich herausgestellt, dass es bei einem rechner mit hyperthreading dauernd abstürzt, bzw. der computer hängt sich auf. es unterstützt anscheinend nicht diese technologie.
z.b. bei einem pentium IV mit 3,06ghz ist dieses problem aufgetreten.

ich persönlich habe leider kaum erfahrung vom programmieren.

mein chef meinte, man benötigte eine function, die am anfang gleich sagt, dass das programm nur ein prozessor benötigt.
er programmiert mit c.

gibt es so eine function, die man so einfach implementieren kann?
ich hoffe ihr könnt mir weiterhelfen


gruß
planet911
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.09.2006, 10:14 Uhr
ao

(Operator)


https://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/setprocessaffinitymask.asp

Und ab nach nebenan

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
27.09.2006, 10:22 Uhr
~planet911
Gast


danke fürs verschieben wusste nicht so recht, wo ich es hineinstellen sollte.

@ao: kannst du bitte deinen link kommentieren, ist das die lösung für mein problem?


hab eben nochmal mit meinem chef erzählt.
er meint es sollte eine routine erstellt werden, die abfragt wieviele prozessoren sich im computer befinden und dann am liebsten auch nur einen verwenden sollte, weil das programm sonst mit den interrupts probleme macht.


kann es sonst noch an was anderen liegen, dass sein programm ab 2,8 ghz instabil läuft?

er meint, dass man in dem hyperthreading-fähigen rechner das hyperthreading im bios deaktiviert habe, und trotzdem kam es zu abstürzen.
was fast vermuten lässt, dass vllt nich ganz allein, die hyperthreading funktion des prozessors dran schuld ist.


gruß
planet911
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
27.09.2006, 12:28 Uhr
ao

(Operator)



Zitat von ~planet911:
@ao: kannst du bitte deinen link kommentieren

Eigentlich sollte das nicht nötig sein, du musst nur mal die Beschreibung lesen und auf die Links unter "See Also" klicken.

Die Anzahl der vorhandenen Prozessoren bekommst du übrigens mit GetSystemInfo.

Zitat:
dass es bei einem rechner mit hyperthreading dauernd abstürzt, bzw. der computer hängt sich auf.

Ja was denn nun, stürzt das Programm ab oder hängt der ganze Computer?

Zitat:
kann es sonst noch an was anderen liegen, dass sein programm ab 2,8 ghz instabil läuft? ... was fast vermuten lässt, dass vllt nich ganz allein, die hyperthreading funktion des prozessors dran schuld ist.

Ich hab den Eindruck, ihr fischt da gerade im Trüben, und wenn ihr bei 3 GHz irgendwas zurechtfrickelt, geht der Ärger aufm 4 GHz-Rechner von vorn los.

Wenn Programme auf schnellen Rechnern auf einmal instabil werden, dann hat man meist irgendwelche Schweinereien gemacht, z.B. Wartezeiten mit Zählschleifen, oder "wir schicken mal ein Datenpaket an 127.0.0.1, und bis die Antwort da ist, ist auch irgendwas anderes fertig" und so. Solche Annahmen entgleisen natürlich gern, wenn die Rechner schneller werden oder über mehrere Prozessoren verfügen.

Ich denke, das Problem kann nur der lösen, der es verbrochen hat und der weiß, welche Leichen da noch herumliegen. Einen ahnungslosen Hiwi damit zu beschäftigen ist m.E. Zeitverschwendung.

Wenn dieser Prüfkopf (was ist das eigentlich?) über einen eigenen Treiber angesprochen wird, kann natürlich auch da das Problem liegen; Multiprozessor-Fähigkeiten muss man beim Treiberdesign berücksichtigen.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
27.09.2006, 13:19 Uhr
~planet911
Gast


so bin ein wenig weiter gekommen.


der prüfkopf ist ein ultraschallmesskopf, der wird von der software angesprochen, dass der alle paar mm ein signal schicken soll und seine position zurückgeben soll, dies wird dann verarbeitet und ausgewertet.

den link fand er große klasse, denn das ist genau die procedure, die er gesucht hat.



Zitat:
Ja was denn nun, stürzt das Programm ab oder hängt der ganze Computer?


kann man nicht so genau sagen, weil sich am rechner dann garnichtsmehr tut, bildschirm ändert sich nichts, maus und tastatur tod.

er meint auch nur er hat eine einzige zeitabhängige funktion drin und an der kann es nicht liegen.

also gibt es sonst bei keinem anderen probleme mit der stabilität von programmen bei größeren prozessor takten oder multi-core?


gruß
Norman
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
27.09.2006, 13:40 Uhr
ao

(Operator)



Zitat von ~planet911:
also gibt es sonst bei keinem anderen probleme mit der stabilität von programmen bei größeren prozessor takten oder multi-core?

Ganz wichtig ist, sich genauestens an die Regeln zu halten, dann sollte nichts passieren.

Keine Synchronisierungen (Sleep oder Warten auf irgendein Ereignis) selber stricken, oder durch etwas "vermeintlich Gleichwertiges" ersetzen, diese "Gleichwertigkeit" beruht oft auf gewagten Annahmen. Das Betriebssystem sollte alle Wartemechanismen mitbringen, die man braucht, und die sind getestet. Und wenn es mit neuesten Mainboards Zeitprobleme gibt, ist Microsoft gefragt, ein Update bereitzustellen, die können das besser als die Anwendungsprogrammierer.

Bei dem Protokoll, das zwischen Programm und Prüfkopf gefahren wird, genau auf Wartezeiten achten. Wieviel Zeit muss nach dem Absetzen eines Kommandos an den Kopf vergehen, bis ein Ergebnis oder Status abgeholt werden kann? Eventuell war das bisher nie kritisch, aber auf einmal ist der Rechner schneller als der Kopf und wertet ein Ergebnis aus, das noch gar nicht vorliegt, oder irgend sowas.

Wie sucht man sowas?

Im Debugger Breakpoints setzen und schauen, welche man noch erreicht (und korrekte Daten zur Verfügung hat) und welche man entweder nicht mehr erreicht (wegen Absturz vorher) oder wo die Daten unsinnig werden. Irgendwo dazwischen muss dann das Problem liegen.

Trace-Meldungen in ein Logfile o.ä. sollte man nicht einsetzen, weil sie das Zeitverhalten entscheidend verändern können.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
27.09.2006, 13:58 Uhr
~planet911
Gast


danke erstmal für die hilfe, werd das letzte mal an ihn weiterreichen.


gruß
planet911
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: