Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
grid [2008/08/07 10:25] novak |
grid [2008/10/29 11:31] bojar ukazka volani a lepsi |
||
---|---|---|---|
Line 71: | Line 71: | ||
** V.N.: "qdel all" mi nefunguje, nahradil jsem za:** | ** V.N.: "qdel all" mi nefunguje, nahradil jsem za:** | ||
qdel " | qdel " | ||
+ | |||
Line 86: | Line 87: | ||
* Uklízet po sobě lokální data, protože jinak si tam už nikdo nic užitečného nepustí. | * Uklízet po sobě lokální data, protože jinak si tam už nikdo nic užitečného nepustí. | ||
* Vyhnout se hodně divokému paralelnímu přístupu ke sdíleným diskům. NFS server to pak nepěkně zpomalí pro všechny. Distribuujte tedy i data. | * Vyhnout se hodně divokému paralelnímu přístupu ke sdíleným diskům. NFS server to pak nepěkně zpomalí pro všechny. Distribuujte tedy i data. | ||
+ | * Informovat SGE, kolik paměti úloha žere, aby na strojích nedošla paměť: < | ||
+ | |||
Víc pravidel není. | Víc pravidel není. | ||
Line 105: | Line 108: | ||
~bojar/ | ~bojar/ | ||
</ | </ | ||
+ | |||
Line 124: | Line 128: | ||
(Kdybych místo uvozovek použil apostrofy, nerozbalily by se mi proměnné. První argument (název skriptu) klidně mohl být v uvozovkách spolu s přesměrováním. Dal jsem ho ven jen proto, že potom '' | (Kdybych místo uvozovek použil apostrofy, nerozbalily by se mi proměnné. První argument (název skriptu) klidně mohl být v uvozovkách spolu s přesměrováním. Dal jsem ho ven jen proto, že potom '' | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== TectoMT: devel/ | ||
+ | |||
+ | Jako '' | ||
+ | |||
+ | | ||
+ | |||
+ | Skript zadanou hromádku souboru rozdělí do '' | ||
+ | |||
+ | Soubory možno zadat filelistem, nebo pomocí '' | ||
+ | |||
+ | Je nutné buď zadat '' | ||
+ | |||
+ | Parametr '' | ||
+ | |||
+ | Parametr '' | ||
+ | |||
+ | Výstup každého jobu jde do vlastního logu, '' | ||
+ | |||
+ | Zatím není na závěr nijak testováno, jestli se všechny analýzy povedly. Jediné, o co se snažím, je, aby na konci každého logu bylo napsáno '' | ||
+ | |||
+ | Určitě je tam ještě spousta nevychytaných much, zejm. s různým escapováním různých věcí... Do budoucna plánuju přidat nejenom hromadný test úspěchu, ale taky sebrání STDOUT všech kousků. | ||
+ | |||
===== Časté a záludné problémy ===== | ===== Časté a záludné problémy ===== | ||
Line 189: | Line 219: | ||
fi | fi | ||
</ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Synchronizace úloh (v Perlu) ===== | ||
+ | |||
+ | Pokud chci paralelizovat část úlohy (zde '' | ||
+ | |||
+ | * Obalím svůj skript pro běh na gridu – vytvořím '' | ||
+ | < | ||
+ | #!/bin/bash | ||
+ | . / | ||
+ | |||
+ | qrsh -cwd -V -p -50 -l mf=5g -now no ' | ||
+ | </ | ||
+ | * Ve svém hlavním skriptu ho pak zavolám a posbírám výsledky: | ||
+ | < | ||
+ | use FileHandle; | ||
+ | use IPC::Open2; | ||
+ | use threads; | ||
+ | use threads:: | ||
+ | my @threads; | ||
+ | my @results; | ||
+ | share(@results); | ||
+ | for (@inputs) | ||
+ | my $t = async { | ||
+ | my $reader; my $writer; | ||
+ | my $pid = open2($reader, | ||
+ | die " | ||
+ | $writer-> | ||
+ | print $writer " | ||
+ | $writer-> | ||
+ | for (< | ||
+ | chomp; | ||
+ | { | ||
+ | lock @results; | ||
+ | push @results, $_; | ||
+ | } | ||
+ | } | ||
+ | waitpid $pid, 0; # Pockame s ukoncenim vlakna na ukonceni ulohy v gridu | ||
+ | return $? >> 8; # Pokusime se ziskat navratovou hodnotu (netestoval jsem) | ||
+ | }; | ||
+ | push @threads, $t; | ||
+ | } | ||
+ | for (@threads) | ||
+ | die "Child exited with non-zero exit code" if $_-> | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Poznámky: | ||
+ | * Pokud lze všechno předat parametry, nemusí se otevírat obousměrná roura a situace bude jednodušší | ||
+ | * Pokud '' | ||
+ | * Celý příklad je k vidění v Czengu od V.N. | ||
+ |