Windows Display driver/manager??

  • Ich wollte mit meinem Beitrag #18 nur darauf hinweisen, nichts beanstanden ;) .

    Selbstverständlich...

    Ich habe dies aber nun als Anlass genommen und das Script in Post #14 so umgeschrieben, dass es jetzt auch auf Windows XP und älteren AutoIt-Versionen (>= 3.3.14.0) laufen sollte.

    Als Wert für $g_iNumberOfEnabledCore wird dann einfach -1 übergeben...

    $aWMI[3] = @OSVersion = 'WIN_10' ? $objItem.NumberOfEnabledCore : -1

    und anstelle...

    #include <WinAPIProc.au3> ; Windows 10

    nun mit...

    #include <WinAPI.au3> ; Windows XP to Windows 8.1

    ...und alle sind zufrieden. :saint:

  • So, hatte nun endlich Zeit, den Code von Bitnugger einmal durchzutesten und bin auf das einfache Problem gestossen, dass ich logische Prozessoren >32 nicht setzen kann. Ich habe mit dem 18 Core und Hyperthreading 36 ausgewiesene logische Prozessoren. Alles bis $iLogicalProcessor32 (die ich vorher entsprechend definiert habe) funktioniert.

    Weiss jemand, wie ich die Maske setzen muss, um die anderen Prozessoren zu setzen? Sorry, wenn ich danach so doof nachfrage, aber die bit-weisen operationen sind haben sich mir noch nicht erschlossen...

  • So, hatte nun endlich Zeit, den Code von Bitnugger einmal durchzutesten und bin auf das einfache Problem gestossen, dass ich logische Prozessoren >32 nicht setzen kann.

    Dann hat jeder deiner 18 Cores halt nur zwei logische Prozessoren... das ist aber kein Problem, sondern Fakt!

    Ich habe mit dem 18 Core und Hyperthreading 36 ausgewiesene logische Prozessoren.

    Was hat Hyperthreading damit zu tun?

    Weiss jemand, wie ich die Maske setzen muss, um die anderen Prozessoren zu setzen?

    Die Funktion _GetProcessors() liefert dir doch u.A. die Anzahl der vorhandenen/verfügbaren logischen Prozessoren... und natürlich kannst du nur diese der Mask hinzufügen.

    die bit-weisen operationen sind haben sich mir noch nicht erschlossen...

  • Hier noch mal das Script aus Post #14, ein wenig erweitert und mit zusätzlichen Infos:

  • Vielen Dank, Bignugger für die super Erklärung. Echt genial gute Darstellung!!

    Das Script hab ich laufen lassen. Mir ist nun auch klar, warum die Prozessoren 32-35 nicht ansprechbar sind (Maske hat ja nur 32 Bits). Aber wie verbinde ich denn nun einen Prozess mit den Prozessoren 32-35? Im Process Explorer kann das ja manuell machen. Aber wie machen die das??? Übersehe ich etwas?

    Hier noch der Script-Output:

  • Mir ist nun auch klar, warum die Prozessoren 32-35 nicht ansprechbar sind (Maske hat ja nur 32 Bits).

    Hihi, fast richtig! 8o

    Schau mal hier...

  • ; Und nun ?
    ; Wir brauchen ein BitOR/BitAND, dass mit mehr als 32 Bit funktioniert... ist in Arbeit...
    ; Vielleicht hat ja einer der User hier eine fertige Lösung parat ?

    Andy wird, wie angekündigt, in Kürze seine gewohnt elegante Lösung präsentieren ^^ !

    Vielleicht ist aber auch der folgende Link für Dich interessant :

    https://www.autoitscript.com/forum/topic/131037-binary-udf/

    Da der Originalposter Ward alle seine Dateien aus dem engl. Forum entfernt hat, wurde der (letzte?) Stand von argumentum am 12. Jan 2017 erneut gepostet : Binary UDF[2011.09.15].zip und die entpackten .au3-Dateien

    Gruß Musashi

  • Musashi & Oscar - Vielen Dank!

    Binary.au3 - habe ich auf die Schnelle ein wenig geändert, weil durch folgende Zeile (und die bleibt drin!) sonst Fehler ohne Ende angezeigt werden:

    #AutoIt3Wrapper_AU3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7

    BitOperations64.au3 - habe ich ein wenig geändert, weil bei _BitAND64, _BitOR64 und _BitXOR64 nur zwei Parameter akzeptiert wurden, nun dürfen es bis zu 255 sein.

    Schöner wäre, wenn das auch mit X86-Mode geht... ;)

    Hier mal die bei mir benötigten Zeiten für die Scripts _ProcessSetAffinityMask2 (Binary.au3).au3 und _ProcessSetAffinityMask3 (BitOperations64.au3).au3:

    Binary.au3 (Ward, max. 20 Params)            : Benötigte Zeit: 00:00:01:133:1685

    Binary.au3 (Ward, max. 255 Params)           : Benötigte Zeit: 00:00:01:249:1656

    BitOperations64.au3 (Oscar, max.  20 Params) : Benötigte Zeit: 00:00:01:080:7824

    BitOperations64.au3 (Oscar, max. 255 Params) : Benötigte Zeit: 00:00:01:181:7813

    Ich habe das einfach mal alles in ein Archiv reingelegt, damit Ovik sich eine Version aussuchen kann...

    Die Ausgabe sieht dann bei mir so aus:

  • manoman! Also Ihr (insbesondere Bitnugger) seid echt grossartig. Vielen vielen Dank für die super Hilfe :klatschen:

    Weil BitOperations64 nicht mit X86 geht (bzw. mein Script bei X64 nicht mehr richtig läuft), habe ich das AffinityMask-Setzen in eine externe exe ausgelagert, die ich getrost mit X64 Mode kompilieren kann.

    Ich werde mir dann noch genauer das Binary-Beispiel ansehen und das dann wohl im nächsten Schritt in mein Script integrieren.

    Nochmals vielen Dank und schöne Festtage an alle! :party1:

    -ovik

  • Schöner wäre, wenn das auch mit X86-Mode geht... ;)

    Kein Thema, wenn du sagst wie du die 64-Bit-UINTs als Parameter bereitstellen willst^^

    Lo- und Hi-DWORD wäre so eine Möglichkeit.

    Na klasse, aus 2x32 Bit die "virtuellen" 64Bit machen um diese per 32-Bitmodus per SIMD (128Bit) oder gar (64Bit) MMX abzuwickeln und dann zurückzutransferieren?!

    Dann kann imho besser man gleich die Binary-UDF benutzen und mit "Hex"-Strings arbeiten....


    Weil BitOperations64 nicht mit X86 geht (bzw. mein Script bei X64 nicht mehr richtig läuft), habe ich das AffinityMask-Setzen in eine externe exe ausgelagert, die ich getrost mit X64 Mode kompilieren kann.

    Naja, dann müssen wir diesen Tod halt sterben und was für 32Bit schnitzen:party:

    LO- und HIGH-DWORD als jeweils einzelnen Parameter übergeben und das Ergebnis wieder als LO-und HIGH-DWORD zurückgeben sollte ja das Problem nicht sein...hab kaum Zeit, zwischen den Jahren sollte das hinhauen...

    Dann gleich als 128-Bit-Version (SSE)