Mit Hnden und Fen
Multicores ausreizen
---------------------------------------------------------------
c't 07/09 S. 102
Andreas Stiller


Launch.exe ausfhrbares Programm fr Windows XP/ Vista/ Server 2003/2008 

Launch ist ein Kommandozeilen-Tool, das mehrere Programme gleichzeitig auf
verschiedenen Prozessoren anstarten kann. Dabei lsst sich auch die
jeweilige Priorittsklasse und die Prioritt des Hauptthreads vorwhlen.

Launch file1 [Parameter1] file2 [Parameter2] file3 [Parameter3] ...

Parameter:


Launch file1 [Parameter1] file2 [Parameter2] file3 [Parameter3] ...
/p="xxxx yyyy zzz"   Parameter fr die Applikation, "" fr " im String
/a=xxx  Prozessoraffinitt fr file, xxx= 0 ohne (ist default)
        1: Prozessor 0, 2:Prozessor 1, 3:Prozessor 0+1, 4: Prozessor 2 ...
  =*    Prozessoraffinitt wird linear aufsteigend fr die Instanzen gesetzt
/ap=xxx  wie a, nur ist xxx keine Maske, sondern eine Prozessornummer (ab 0)
/a=s[catter] benutzt topologisch mglichst entfernte Cores
/a=c[ompact] benutzt topologisch mglichst nahe Cores
/a=s? oder /a=c? gibt die benutzen topologische Liste der Cores aus
/c=xxx  Priorittsklasse xxx=N[ormal] ist default,
        I[dle],B(elow),H[igh], A[bove], R(ealtime)
/t=xxx  ThreadPrioritt xxx=N[ormal] ist default,
        L[owest],B(elow), A[bove],T[imecritical]
/u=xxx  startet file xxx-mal an (mit xxx <= 32
        dann kann man mit Affinitten und Prioritten ber eine mit Kommata
        getrennten Liste eingeben:
         z.B Launch test.exe /u=4 /a=1,2,4,8 /c=H,H,I,I
         startet viermal test.exe auf Prozessor 0,1,2,3 -- sofern vorhanden
         die ersten beiden Aufrufe mit hoher Prioritt, die nchsten mit Idle
         Es gilt hierbei das Wrap around, ist xxx grer als die Liste,
         so beginnt die Zuordnung wieder von vorn.
/w       Launch wartet das Ende aller gestarteter Applikationen ab
         und zeigt Kernel/User/Idle-Zeiten an

/r=na:pw runas mit name:passwort
/rk erzeugt pro Instanz eine eigene Console via CMD /K
/rt mit Aufgabeumleitung via tee.exe (defaultname fr Ausgabe result.[nr].txt
    bei Server/Worker-Betrieb bleibt die Konsole mit Tee fr sptere
    Aufrufe geffnet. Wie bei Umleitungen leider blich verharren die letzten Zeilen 
    einer Ausgabe z.T noch im Pipeline-Buffer.      
/rs wie /rt, nur wird jedesmal eine neue Konsole fr Ausgabe geffnet
/K  wie /rk, nur ohne den Umweg ber CMD

Im Parameterstring /P="xxx" gibt es Macros per  $(yyy)
  z.B $(1000*r+u), wobei r fr aktuelle Instanznr (rank) und u fr die
 Gesamtzahl aller Instanzen steht.
 $(xxx,yyy) ist ein Server-Betrieb: wiederholte Aufrufe mit  Integer-Parametern
 von xxx bis yyy mit Inkrement 1, z.B. /p="$(1000*r,1000*r+999)" /u2 durchluft
 Instanz0: (0 bis 999), Instanz1: (1000 bis 1999)
 $(xxx,yyy,zzz) ebenso mit Inkrement zzz, etwa /p="$(r,1000,u)" /u2
 Instanz0 mit 0,2,4 ... bis 1000, Instanz1 mit 1,3,5,7 ... solange < 1000)
 Server normalerweise mit /rt aufrufen (Konsole mit Ausgabe via tee)
   $(c:\...,d:\...,e:\...) durchluft eine Liste von Verzeichnisnamen
   $(jobfile: xxx) holt sich die Parameter aus der Jobliste xxx (Textdatei)

/g=filename  Parameter aus Datei holen
/o=filename  Name fr Ausgabeumleitung
/d       Directory fr Ausfhrung von exe-Datei (Default: aktuelles Verzeichn)
/q       Quiet-Modus
/f[=xxx] berprft Priorittsklasse /Mainthread-Prioritt nach xxx ms
         (default=5000) und erzwingt die gesetzte Startprioritt

Beispiele mit Piprime.exe

Launch /u=2 piprime :startet piprime zweimal in der gleichen Konsole an (nicht empfehlenswert), Abbruch nur durch 
                    Schlieen der Konsol oder nach Jahren ...
                       
Launch /u=2 /K piprime  :startet piprime jeweils in eigener Konsole an, weit bersichtlicher, dauert aber auch  

Launch /P=16006 /u=2 /K piprime  : startet zweimal piprime fr 16006 Stellen -- dauert nur ein bisschen   

Launch /P=$(16006+r) /u=2 /K piprime  : startet zweimal piprime fr 16006 bzw. 16007 Stellen 

Launch /P=$(16000+r,100000,u) /u=4 /c=B /rt /a=s  piprime: startet vier parallele Instanzen von piprime 
                ab 16000 bis 100000 mit Prioritt=Belownormal (/x=B), Affinitt mglichst weit auseinanderlegende 
                Kerne (/a=s), Umleitung via tee in result.x.txt   
                Instanz 0 nacheinander mit 16000, 16004, 16008 ... solange < 100000
                Instanz 1 nacheinander mit 16001, 16005, 16009 ... solange < 100000 
                Instanz 2 nacheinander mit 16002, 16006, 16010 ... solange < 100000 
                Instanz 3 nacheinander mit 16003, 16007, 16011 ... solange < 100000 

Launch /P="$(16000+1000r) $(16999+1000r)" /u=4 /c=B /rt /a=s  piprime : startet vier parallele Instanzen von piprime 
               Instanz 0 mit 16000 bis 16999
               Instanz 1 mit 17000 bis 17999
               Instanz 2 mit 18000 bis 18999
               Instanz 3 mit 19000 bis 19999
               
und so weiter 

viel Spa 
Andreas Stiller (as@ctmagazin.de)





 
 