Nahajate se tukaj

Prikaz uporabe programov na HPCFS

Delo na HPCFS je sestavljeno iz nasledjih poglavitnih področij:

  1. Z NX clientom dostopamo do sestava vsakodnevno in z različnih računalnikov.
  2. Uporabljamo lahko KDE ali Gnome okensko okolje
  3. Najpogosteje uporabljamo Konzolo v katero tipkamo školjčne ukaze
  4. Dodatne programe izbiramo z okoljem modules
  5. Programe poganjamo na vozliščih z okoljem LSF
  6. Računanje nadzorujemo z CMU in UFM
  7. 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.

KDE desktop

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.