Prozessorkerne auslasten

  • Hallo zusammen,

    in der C´t 7/2009 ist ab Seite 102 ein m.E. relativ einfaches Verfahren beschrieben, um Programme an einzelne Prozessorkerne zu binden. Beispielsweise ein Virenscan über mehrere Festplatten.
    Bei einer "seriellen" Batchdatei werden die einzelnen Scans nacheinander abgearbeitet.
    Scanne LW C: , schreibe danach das Ergebnis in Logdatei
    Scanne LW D: , schreibe danach das Ergebnis in Logdatei
    Scanne LW E: , schreibe danach das Ergebnis in Logdatei
    Scanne LW F: , schreibe danach das Ergebnis in Logdatei
    Solch oder ähnliche Batches laufen aber nur auf einem Prozessorkern, d.h. bei einem Duo- Triple- oder Quadcore schuftet einer der Kerne neben dem "normalen" Windowsgedöns an der Batchdatei , während die anderen 3 Kerne im Sleepmodus verweilen.

    Ab Vista kann man über den Windows-START-Befehl und dem Parameter /AFFINITY die Programme auf die einzelnen Prozessorkerne verteilen. Ausserdem kann man auch die Basispriorität einstellen.
    Bei einer "parallelen" Batchdatei werden die Aufgaben verteilt und gleichzeitig auf den Kernen eines Quadcore gestartet:
    Scanne LW C: , schreibe danach das Ergebnis in Logdatei > Starte dieses Programm auf Kern 1
    Scanne LW D: , schreibe danach das Ergebnis in Logdatei > Starte dieses Programm auf Kern 2
    Scanne LW E: , schreibe danach das Ergebnis in Logdatei > Starte dieses Programm auf Kern 3
    Scanne LW F: , schreibe danach das Ergebnis in Logdatei > Starte dieses Programm auf Kern 4
    Jetzt schuften alle 4 Kerne und üblicherweise ist der Scan über alle Platten wesentlich früher fertig.
    Das funktioniert selbst auf einem "alten" P4 mit Hyperthreating einwandfrei.

    Mr. "A20-Gate" Andreas Stiller von der C´t hat das Programm Launch erstellt, dass auch unter XP das Verteilen von Aufgaben an die einzelnen Kerne vereinfacht.

    Somit kann man einige Anwendungen teilweise extrem beschleunigen.
    Ich habe mit meinem Sudoku-Solver 35000 Sudokus lösen lassen. Auf einem Dualcore aufgeteilt in 2mal je 17500 Sudokus waren alle 35000 Sudokus exakt nach der Hälfte der Zeit gelöst!

    Da sollte sich ggf auch mit AutoIt etwas "drumherumstricken" lassen.....

    ciao
    Andy