Delo na HPCFS je sestavljeno iz nasledjih poglavitnih področij:
- Z NX clientom dostopamo do sestava vsakodnevno in z različnih računalnikov.
- Uporabljamo lahko KDE ali Gnome okensko okolje
- Najpogosteje uporabljamo Konzolo v katero tipkamo školjčne ukaze
- Dodatne programe izbiramo z okoljem modules
- Programe poganjamo na vozliščih z okoljem LSF
- Računanje nadzorujemo z CMU in UFM
- Največ časa pa se prebije pri pridobivanju novih rezultatov, kar običajno pomeni
- pisanje školjčnih in LSF skript s katerimi lahko enostavno ponovimo izračune
- razvoj lastnih programov
- obdelava in ocenjevanje rezultatov
- pisanje poročil, člankov in risanje skic
Prikažimo našteta prodročja na kratkih primerih!
Po namestitvi NX clienta vpišemo v prijavno okno dodeljeno uporabniško ime in geslo in se povežemo z nadzornim vozliščem.
NX klient ob povezavi omogoči prikaz grafičnega okolje KDE.
Na spodnji vrstici je klasičen gumb za zagon programov, ki odpre meni z nameščenimi grafičnimi programi. Tu se najdejo različni programi, ki jih lahko uporabljamo za običajno "pisarniško" delo.
Sledi najpomembnejša ikona za odpiranje Konzole. Označena je z znakom >_, kar pomeni, da je namenjena tipkanju ukazov. Prav uporabo ukazov bomo kazali v tem prikazu dela na HPCFS. Poleg ikone za zagon brskalnika je podana še ikona za zagon programa CMU s katerim gledamo trenutno obremenitev sestava. Ker je CMU Java program, ki se poganja na nadzornem vozlišču se priporoča, da ga poganjamo samo, kadar je le to nujno potrebno saj v nasprotnem primeru lahko po nepotrebnem obremenjuje nadzorno vozlišče s prikazom stanja in ga tako upočasnjuje. Prav tako se priporoča, da v brskalniku nimamo odprtih preveč spletnih strani z animacijami.
Odprimo Konzolo in poglejmo kateri programi so na voljo
$ module avail
Izpiše se dolg spisek programov in knjižnic, ki so dodatno na voljo. Poglejmo kako se lahko seznanimo s posameznim programom. Na spisku je tudi program ANSYS. Poglejmo kako je opisan, kako ga naložimo in na kratko interaktivno poženemo na poljubnem vozlišču.
$ module help ansys
----------- Module Specific Help for 'ansys/14.0' -----------------
Simulation products, which are predominantly based on implementations
of the finite element method and computational fluid dynamics including:
* Multiphysics
* Structural mechanics
* Fluid Dynamics
* Explicit Dynamics
* Electromagnetics
* Simulation Process & Data Management
* Academic
* High-Performance Computing
* Geometry Interfaces and more
$ module load ansys
Loading ansys/14.0
$ node runwb2
Job <60231> is submitted to default queue .
<>
<>
GC Warning: Limiting number of mark threads
GC Warning: Limiting number of mark threads
$
Za poganjanje te skupine programov je potreben ločen tečaj ali vsaj kratek pregled sklopov.
Izdelajmo raje manjši primer na katerem bomo pokazali osnovno problematiko in napotke pri reševanju problemov. Za začetek najprej naredimo podimenik z ukazom mkdir in se premaknemo vanj.
[campus39@prelog ~]$ mkdir serialpi
[campus39@prelog ~]$ cd serialpi
[campus39@prelog serialpi]$ ls
Uporabimo inkscape in narišimo problem s tem, da ga poženemo na poljubnem vozlišču
[campus39@prelog serialpi]$ module load inkscape
Loading inkscape/0.48.2
[campus39@prelog serialpi]$ single inkscape
Job <60295> is submitted to default queue .
...
[campus39@prelog serialpi]$ exit
Problem, ki je prikazan ima za cilj izračunati število Pi z naključnim metanjem točk. Štirikratnik razmerja med točkami v krogu in vseh točk je število Pi.
Napišimo kratek program v Pythonu, ki pokaže, kako lahko to na hitro preverimo v programskem jeziku Python zato ga naložimo kot modul. Uporabimo urejevalnik emacs za pisanje programa.
[campus39@prelog serialpi]$ module load python
Loading python/2.7.3
[campus39@prelog serialpi]$ emacs serialpi.py &
Program pretipkamo
import random, math
vseh=100000
v_krogu=0
for i in range(vseh):
x = random.uniform(-1, 1)
y = random.uniform(-1, 1)
r = math.sqrt(x*x+y*y)
if r < 1.0:
v_krogu += 1
print 'Pi =', 4.0*v_krogu/vseh
Shranimo in poženemo kar v ospredju na enem samem procesorju z ukazom
[campus39@prelog serialpi]$ single python serialpi.py
Job <60439> is submitted to default queue .
<>
<>
Pi = 3.1528
Za dolgo trajajoče računske programe in v primeru zasedenosti sestava se lahko zgodi, da ni prostih računskih vozlišč in bi tako ukaz single čakal na sproščene računske vire precej več časa, kot je uporabnik pripravljen čakati. V takih primerih se raje poslužujemo ukazov, ki pripravijo ukaz za izvajanje v ozadju. To so tako imenovani batch ukazi. Taisti program bi pognali v ozadju z
[campus39@prelog serialpi]$ bsub python serialpi.py
Job <60472> is submitted to default queue .
[campus39@prelog serialpi]$
Ker dobimo ukazno vrstivo takoj na voljo lahko preverimo kaj se dogaja je našim programom z ukazom
[campus39@prelog serialpi]$ bjobs
No unfinished job found
You have new mail in /var/spool/mail/campus39
Rezultat se ne izpiše na zaslon ampak se ta prestreže in pošlje kot poročilo po pošti ob zaključku. Najenostavnejši program za branje pošte je vgrajen in vedno na voljo. Preberimo pošto z
[campus39@prelog serialpi]$ mail
Heirloom Mail version 12.4 7/29/08. Type ? for help.
"/var/spool/mail/campus39": 4 messages 3 new
1 LSF Thu Nov 15 00:41 46/1643 "Job 60437: Don"
>N 2 LSF Thu Nov 15 00:43 45/1632 "Job 60438:
V primeru zasedenosti bi pisalo, da program čaka na proste kapacitete (PENDING) , ki jih lahko preverimo z ukazom za pregled. V spodnjem primeru je videti, da je nekaj procesorjev na cn56 še prostih.
[campus39@prelog serialpi]$ bhosts
HOST_NAME STATUS JL/U MAX NJOBS RUN SSUSP USUSP RSV
cn01 closed - 24 24 24 0 0 0
cn02 closed - 24 24 24 0 0 0
cn03 closed - 24 24 24 0 0 0
...
...
cn54 closed - 24 24 24 0 0 0
cn55 closed - 24 24 24 0 0 0
cn56 ok - 24 14 14 0 0 0
cn57 closed - 24 24 24 0 0 0
cn58 closed - 24 24 24 0 0 0
cn59 closed - 24 24 24 0 0 0
cn60 closed - 24 24 24 0 0 0
cn61 closed - 24 24 24 0 0 0
cn62 closed - 24 24 24 0 0 0
cn63 closed - 24 24 24 0 0 0
cn64 closed - 24 24 24 0 0 0
prelog closed - 24 0 0 0 0 0
Primer izračuna Pi kaže naslednje lastnosti:
- Enostaven vendar računsko zahteven program
- Minimalna komunikacija in uporaba diska saj se rezultat izpiše na koncu.
- Za večjo natančnost je potrebno le povečati število metov?
- Test razdalje r lahko napišemo brez math.sqrt()!
- Če se izkaže, da čas eksponentno narašča natančnost pa ne moremo zagotoviti se odločamo za spremembo programskega jezika saj so interpterji, kot je Python počasni. V primeru, da to ni enostavno pa poskusimo s paralelizacijo tako, da hkrati več procesorjev računa, nato pa rezultat združimo v celoto.
Za nadaljnje delo imamo možnost enostavne paralelizacije v Cju in Fortranu z OpenMP ali pa izdelava paralelnega programa v načinu MPI.