Programmieren von Systemen mit meheren Prozessoren



  • Mit SetThreadAffinityMask kannst du als Bitmaske übergeben, auf welchen Prozessoren ein Thread ausgeführt werden darf. Die Ausführungsreihenfolge und -dauer ist auf User-Mode-Seite immer nichtdeterministisch. Das lässt sich aber alles mit Synchronisierungsmechanismen erreichen, wenn man zwei Threads im Wechsel oder sonstige Dinge machen will.

    Ich weiß nur, dass man bei Threads steuern kann, ob die untereinander oder mit dem gesamten System um Prozessorzeit "streiten" sollen.

    Meinst du damit Prozess-/Threadprioritäten oder die Tatsache, dass Windows die CPU-Zeit auf Vordergrund- und Hintergrunddienste unterschiedlich aufteilt? Oder ganz was Anderes?



  • Power Off schrieb:

    Ich hab XP schon mit 1 CPU mit Hyperthreading benutzt, da hat XP zwei CPUs angezeigt.

    Ja, hab ich ja gesagt, dass es das im Gegensatz zum Multiprozessorbetrieb unterstützt. 🙂



  • masterofx32 schrieb:

    Meinst du damit Prozess-/Threadprioritäten oder die Tatsache, dass Windows die CPU-Zeit auf Vordergrund- und Hintergrunddienste unterschiedlich aufteilt? Oder ganz was Anderes?

    Nur zur Info, falls nicht bekannt: Man kann in den Systemeinstellungen von Windows festlegen, wie die Rechenzeit aufgeteilt wird: Entweder hauptsaechlich Vordergrundanwendungen, oder hauptsaechlich Hintergrundanwendungen (letzeres bewirkt, dass die Rechenzeit gleichmaessig verteilt wird und sollte bei Servern z.B. auch so eingestellt werden).



  • masterofx32 schrieb:

    Ja, hab ich ja gesagt, dass es das im Gegensatz zum Multiprozessorbetrieb unterstützt. 🙂

    Du kannst auch zwei echte CPUs nehmen, das spielt keine Rolle. In Amiland z.B. sind Multiprozessormaschinen schon seit 10 Jahren weit verbreitet, vor allem in Entwicklerkreisen.

    Das merkt man bei Windows z.B. daran, dass es erst ab zwei CPUs (virtuell oder real) fluessig laeuft.



  • Ich schreibe doch im Kontext des gesamten Threads. Es ging ausschließlich um XP Home und das unterstützt definitiv nicht mehrere Prozessoren außer virtuell mit Hyperthreading.



  • masterofx32 schrieb:

    Ich schreibe doch im Kontext des gesamten Threads. Es ging ausschließlich um XP Home und das unterstützt definitiv nicht mehrere Prozessoren außer virtuell mit Hyperthreading.

    Prozessoren mit Hyperthreading sehen fuer das Betriebssystem wie ein SMP System mit 2 CPUs aus. Das ist einfach so. (siehe Pentium 4 Spezifikation)

    D.h. XP Home ist auch multiprozessorfaehig (bis 2 CPUs), genau wie XP Professional.

    Dein Programm musst Du im Hinblick darauf auf jeden Fall auf 2 Threads aufteilen um die volle Rechenleistung zu kriegen.



  • Meinte das man bei Threadprogrammierung sagen kann, dass die Threads vom BS wie ein Programm betrachtet werden und unter ein ander streiten oder jeder Thread mit allen Programmen des Systems streitet, als wär er ein eigenes Programm. Das mit der Bitmaske war mir bisher nicht bekannt, aber gut zu wissen.

    Denke der Rest wurde schion von anderen gesagt.



  • Nein, der Kernel ab XP unterscheidet zwischen logischen und physischen Prozessoren und trifft Lizenzentscheidungen nur auf Basis der physischen Prozessoren.

    http://www.microsoft.com/windows2000/docs/hyperthreading.doc
    Dort ist allerdings noch nicht von XP die Rede sondern von Windows.NET-Server, da es noch ein Dokument aus Windows 2000-Zeiten ist.

    It is critical that the BIOS count logical processors in the manner described; otherwise, Windows 2000 or its applications may use logical processors when they should be using physical processors instead. For example, consider an application that is licensed to use two processors on the system diagrammed in Figure 1. Such an application will achieve better performance using two separate physical processors (such as 1 and 2) than it would using two logical processors on the same physical processor (such as 1 and 5).

    When examining the processor count provided by the BIOS, Windows .NET Server distinguishes between logical and physical processors, regardless of how they are counted by the BIOS. This provides a powerful advantage over Windows 2000, in that Windows .NET Server only treats physical processors as counting against the license limit. For example, if you launch Windows .NET Standard Server (2-CPU limit) on a two-way system enabled with Hyper-Threading Technology, Windows will use all four logical processors, as shown in Figure 4.

    EDIT:

    D.h. XP Home ist auch multiprozessorfaehig (bis 2 CPUs), genau wie XP Professional.

    Das ist schon klar, in der Hinsicht sind ja die Kernel alle identisch. Ist halt nur eine Frage der Lizenzen, wenn Mehrprozessorbetrieb darin nicht enthalten ist, wird der Kernel die Prozessoren, die es nicht haben will einfach ignorieren.



  • masterofx32 schrieb:

    Nein, der Kernel ab XP unterscheidet zwischen logischen und physischen Prozessoren und trifft Lizenzentscheidungen nur auf Basis der physischen Prozessoren.

    http://www.microsoft.com/windows2000/docs/hyperthreading.doc
    Dort ist allerdings noch nicht von XP die Rede sondern von Windows.NET-Server, da es noch ein Dokument aus Windows 2000-Zeiten ist.

    Quatsch. Erstens ist Windows .NET Server kein Betriebssystem (das hiess Windows 2000 Server), sondern ein Softwarepaket, und zweitens waren alle NT-basierten MS-Betriebssysteme seit Windows 2000 multiprozessorfaehig (wahrscheinlich auch frueher schon).

    (EDIT: wie gesagt: Nimm doch Linux, dann haste das Problem nicht mehr und viele andere auch nicht. SuSE Linux 9.3 ist mittlerweile so gut, dass man Windows getrost in die Tonne kicken kann, und fuer .NET Fanatiker gibt's auch was namens "Mono". SuSE Linux 10 steht auch schon in den Startloechern, bin mal gespannt darauf.)



  • Power Off schrieb:

    Quatsch.

    Quatsch mich nicht an. Danke.

    Erstens ist Windows .NET Server kein Betriebssystem (das hiess Windows 2000 Server), sondern ein Softwarepaket, [...]

    Ich weiß zwar nicht was das für ein Softwarepaket sein soll, aber als Windows.NET-Server wurde die nach Veröffentlichung von Windows XP(5.1) die in Entwicklung befindliche Servervariante bezeichnet, die später als Windows Server 2003(5.2) veröffentlicht wurde. ( Link 1 Link 2)

    [und zweitens waren alle NT-basierten MS-Betriebssysteme seit Windows 2000 multiprozessorfaehig (wahrscheinlich auch frueher schon).

    Ja, nur wird es durch Lizenzkonfigurationen verhindert, dass eine bestimmte Prozessoranzahl überschritten wird. Und da XP zwischen logischen und physischen Prozessoren unterscheidet, unterstützt XP Home maximal einen physischen Prozessor aber 2 logische Prozessoren, wie bei Hyperthreading.


Anmelden zum Antworten