Multicoreproblematik erzeugt fehlerhafte Berechnung
-
Zumindest geht das im Taskmanager. Dort kann man jedem Prozess beliebige Prozessoren/Kerne zuweisen.
-
ja so haben wir das problem bis jetzt gelöst. dies ist jedoch kein zustand.
kann man nicht schon auf treiberebene des messkarte festlegen, dass alles nur einen bestimmten kern nutzen darf?wie gesagt mein wunschdenken: abfrage der anzahl der kerne und danach feste zuweisung an einen kern.
gruß
planet911
-
hallo,
hab eben nochmal mit meinem chef über die problematik gesprochen.
also das programm zur auswertung der messwerte läuft prima auf mehrkernsystemen. es liegt am treiber von der messkarte. der macht dann ab einer bestimmten frequenz nur noch unfug.
somit müsste man diesem besagten treiber beibringen nur einen festen kern zu nutzen. ist dies überhaupt möglich?gruß
planet911
-
Kerne stellen auf Softwareebene letztendlich einen Thread bzw. Prozess dar. Oder anders formuliert, einzelne Threads werden vom System auf die zur Verfügung stehenden Kerne aufgeteilt. Um festzulegen, welche Prozesse bzw. Threads auf welchen Kernen ausgeführt werden dürfen, stehen unter Windows afaik die WinAPI Funktionen SetProcessAffinityMask bzw. SetThreadAffinityMask zur Verfügung. Dazu braucht man im Grunde lediglich das jeweilige Handle zum Prozess bzw. Thread, und kann dann über einen Bit Vektor die gewünschten Kerne maskieren.
-
ich darf mich recht herzlich für die super hilfe im namen meines chefs bei euch bedanken. das mit dem maskieren hat er genau gesucht gehabt und ist selber nicht drauf gekommen. jetzt ist er voller zuversicht, dass er dieses problem aus dem weg räumen kann.
vielen dank nochmal
gruß planet911
-
planet911 schrieb:
hallo,
ich bin shk an einem frauenhofer institut ...
planet911Heißt es nich "Fraunhofer" ?

-
oh stimmt da ist mir ja ein dummer tippfehler unterlaufen.
dabei arbeite ich doch schon seit über 18 monaten hier im fraunhofer institut.gruß
planet911
-
Wieso nicht das Problem lösen indem man die Ursache behebt? Die Ursache ist sicher nicht dass mehrere Cores im System vorhanden sind, sondern dass der Treiber für die bzw. das Programm welches mit der Messkarte spricht fehlerhaft ist.
In Treibern kann man z.B. Spinlocks verwenden um sicherzustellen dass ein 2. Core einem nicht dazwischenpfuschen kann. (Kernelmode Spinlocks gibt's in fast jedem OS welches für multi-CPU Systeme ausgelegt ist, u.A. auch in Windows, Linux, BSD, ...)
In Usermode Programmen sollte das garnicht nötig sein, solange man nicht mehrere Threads verwenden. Wenn man doch mehrere Threads verwendet gibt es z.B. CRITICAL_SECTIONs bzw. OS-unabhängig formuliert: Mutexen.Warum ich eine "echte" Lösung des Problems einem "SetThreadAffinityMask" Hack vorziehen würde: im Prinzip kann jeder Fehler der dich im Usermode mit 2 Cores erwischen kann auch mit einem Core zuschlagen. Für viele Probleme die im Kernelmode zuschlagen können gilt das ebenso. Der Umstand dass das Programm mit nur einem Core Problemlos fehlerfrei zu laufen scheint kann einfach darauf zurückzuführen sein dass solche Fehler auf Single-Core Systemen viel viel seltener "zuschlagen" (was eine bekannte Eigenschaft bestimmter Threading-bezogener Fehler ist).
-
ypu dem stimme ich zu. da du von abtastfrequenzen sprachst. ist es möglich, dass der treiber intern den timestamp counter des prozessors zur zeitmessung benutzt? wenn ja, dann müsste dies gefixt werden, da der TSC nur noch müll in multicore und multiprozessorsystemem erzeugt

-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.