yleiskatsaus Suurteholaskentaklusterit: juhaj@iki.fi Nordita KTH Royal Institute of Technology and Stockholm University Stockholm Sweden Turku, 16.11.2012
Suurteholaskenta () yleiskatsaus Throughput/capacity computing kasapäin pieniä laskuja eri parametreillä: rajoitteena seinäkelloaika onnistuu perus-pc:llä, kunhan niitä on käytettävissä monta yhtä aikaa usein lasketaan sama lasku monella parametrillä tyyliin x [0,10 6 ] Z : f (x) :n kannalta oleellista on yksi yhteinen front-end heterogeeninenkin rauta käy koneiden ei aina tarvitse edes kommunikoida keskenään cycle-scavenging-systeemejä: condor, boinc, seti@home...
yleiskatsaus Suurteholaskenta () Capability computing isoja laskuja, käytettävät resurssit rajoitteena muistia (> 100 GiB) laskuaikaa (> 1000 ydinpäivää) levytilaa (> 1 TiB pitkäaikaisesti tai > 10 TiB väliaikaisesti) hajautettu muisti monta konetta yhteen liitettynä yhteistyössä jotain temppuja tehtävä että saa hyödynnettyä yli yhden koneen verran muistia de-facto standardi nykyään MPI (lisää kappaleessa ) heterogeeninen rauta paha jaettu muisti hirvittävän kallista jopa tässä hintaluokassa yhtä ydintä käyttäessä: prosessorin ja muistin nopeus merkittävä rajoite harkitse ohjelman vaihtoa useaa ydintä käyttäessä ei sen helpompaa kuin hajautettu muisti
Suurteholaskenta () yleiskatsaus Väliinputoajat välimuodot esim. 40 kpl 20 GiB vaativaa laskua onnistuu yleensä seka throughput että capability -laitteella tai pleioneen unohdetaan helposti jos tarviit näitä, muista pitää ääntä: Jälkikäsittely ja visualisointi usein unohdetaan kokonaan yleensä varsinainen -ongelma vain kun lasku tuottaa hyvin suuria määriä dataa (> 100 GiB) sisältää myös jälkikäsittelyn jälkeisen loppusijoituksen (kappale )
yleiskatsaus Jaettu ja hajautettu muisti jaettu yksi core pystyy hallitsemaan koneen koko muistia huisin kallista suuremmissa määrin hajautettu muistinhallinta hajautettu jos haluat naapurin muistista tietoa, joudut pyytämään kauniisti vain rinnakkaisohjelmat pystyvät hyödyntämään kaiken grid ideana hyötykäyttää toisten tyhjäkäynti M-grid ja FGI jopa lupaavat tietyn kapasiteetin grid-käyttäjille jo ajoissa oleviin ei vaikuta jos grid-käyttö on vähäistä ja oma kluseri tukossa, gridin läpi pääsee (mahdollisesti: FGI?) silti läpi
yleiskatsaus Interconnect (kommunikaatioverkko) rinnakkaislaskennan ja jaetun levyjärjestelmän käyttämä verkko jota pitkin kommunikaatio ja data liikkuvat Remote Direct Memory Access (RDMA) lisälaite käyttää muistia suoraan vaivaamatta prosessoria dataa voi siirtää verkon yli prosessorin tehdessä muuta halpisratkaisu: ethernet (1 Gbps (topaasi) tai jopa 100 Gbps) hirvittävä latenssi (satoja mikrosekunteja) isoilla paketeilla siedettävä ratkaisu RDMA vasta tulossa infiniband latenssi millisekunnin luokkaa, jopa alle 2-300 Gbps (tyypillinen 25 tai 40) RDMA spesialisoitu verkko Crayn Gemini: latenssi 2 µs (2.625 GBps/core) IBM Blue Gene/Q: 80 ns!!! - 3 µs (2.74 GBps/core) tyypillisesti RDMA tai vastaava
yleiskatsaus Klusteri yleensä keskitason -laitteisto (< capability-laskut) periaatteessa ostettavissa osina lähimmästä konekaupasta liitetty jotenkin toisiinsa yhdessä käytettäväksi (interconnect) aina hajautetun muistin laitteita tyypillisesti käytetään erillisen edustakoneen läpi nykyään usein pleionen kaltaisia blade-ratkaisuja (joita ei ainakaan BPC Solutions myy) Vektoriprosessori tehokas suorittamaan saman laskutoimituksen tuhansia kertoja peräkkäin ( vektorille ) vaikeita ohjelmoitavia GPU-kiihdyttimet kevyitä vektoriprosessoreja ehkä tulossa uudestaan NEC SX-10:n ja GPU:iden myötä
yleiskatsaus Super(tieto)kone :lle suunniteltu spesiaalilaitteisto (capability-laskut) harvoja jaetun muistin supereita lukuunottamatta näitäkin käytetään edustakoneen läpi nykyään monet käyttävät termiä cluster halvemmista -laitteista ja supercomputer or parallel computer kalliimmista nykyään usein teknisesti (blade-pohjaisia) klustereita, joten rajat hämäriä IBM BlueGene, Fujitsun K ja Cray X? -sarjat edelleen aitoja supereita
yleiskatsaus (ei-ylläpitäjät voi ottaa nopeat torkut) Levy tässä yhteydessä levy = fyysinen tallennusväline, jolle tai joille data lopulta päätyy Block device kernelin rajapinta laitteelle tukee fread- ja fseek-kutsuja tukee datan lukemista mv kohdasta myös kirjoitus mv kohtaan, jos JOS ylipäätään tukee kirjoitusta levy on jokaiselle tuttu esimerkki ( /dev/sda ) rauta -RAID Redundant Array of Inexpensive Discs levyohjain liittää nipun levyjä yhteen vain nippu näytetään laitteena kernelille kerneli tarjoaa nipun käytettäväksi block devicenä
yleiskatsaus softa -RAID linux-kerneli liittää nipun block devicejä (sic!) yhteen nippu tarjotaan käytettäväksi uutena block devicenä esim. block deviceinä /dev/sda, /dev/sdb, /dev/sdc näkyvät levyt voidaan yhdistää block deviceksi /dev/md0 HUOM! älä sorki suoraan osadevicejä Relevantit RAID tasot 1: mirror : kaikki data kahdella block devicellä käyttö voi jatkua toisen hajottua kapasiteetti = pienemmän block devicen kapasiteetti 5: N+1 block deviceä +1 käytetään tarkistussumman tallettamiseen (pariteetti) kestää yhden hajoamisen keskeytyksettä kapasiteetti = N pienimmän kapasiteetti 6: kuin raid-5, mutta kaksi tarkistussummaa
yleiskatsaus Logical Volume Manager (LVM) muodostaa vähintään yhdestä block devicestä loogisen kokonaisuuden nimeltä logical volume group (tämä EI ole block device!) volume group:iin voidaan luoda logical volumeita, jotka tarjotaan käyttöön block deviceinä Tiedostojärjestelmä elää block devicellä Fyysinen medium RAID Logical volume (LVM) Tiedostojärjestelmä
yleiskatsaus Storage Area Network (SAN) levyt omassa verkossaan suoraan verkossa kiinni moni laite voi lukea ja kirjoittaa samoja levyjä iscsi, ATA-over-Ethernet aiemmin Fibre Channel, nykyään varsinkin :ssä yleensä InfiniBand jokainen levy asiakaskoneelle kuin tavallinen paikallinen levy näiden päälle voi sitten rakentaa RAID:n tms tiedostojärjestelmän ymmärrettävä huomioida usean käyttäjän tilanne :ssä tiedostojärjestelmä käytännössä aina IBM GPFS
yleiskatsaus Network Attached Storage (NAS) asiakaskoneelle näkyy palvelin jakamassa levyä levy voi itse asiassa olla SAN! :ssä yleensä palvelimia todellisuudessa monta tiedostojärjestelmänä yleensä Lustre (tai GPFS) yksi metadata-server (MDS) joka näkyy asiakkaille levyä jakavana palvelimena yksi tai useampi object storage server (OSD), joilla itse data on hajautettu tiedostojärjestelmä, mutta EI hajautettua metadataa! ei ota kantaa OSD:n käyttämiin tiedostojärjestelmiin, RAIDiin tms RDMA! muita vaihtoehtoja: GlusterFS, GFS cephfs mielenkiintoinen tulokas (mm. täysin hajautettu!) NFS/CIFS/samba ei voi hajauttaa Nyt saa herätä!
yleiskatsaus Rinnakkaislaskenta ongelman ratkaiseminen useampaa ydintä (OpenMP ja MPI) tai konetta (MPI) käyttäen hajautetulla muistilla aina MPI jaetulla muistilla joko MPI, OpenMP tai molemmat jos näet termin pvm, juokse pakoon (1999!) Skaalautuvuus s = t(n)/t(2n), missä N on käytettyjen ytimien määrä ja t aika tavoite yleensä s > 1.8 erikoistapauksissa jopa s > 2: miten?
yleiskatsaus Kuorman jako (load blancing) kaikki N pitää saada tekemään työtä koko ajan, mitään lapionvarteen nojailua ei sallita domain decomposition jaetaan kaikille (melkein) sama laskutehtävä kuormakin jakautuu tasaisesti joskus reunaehdot sekoittavat tasapainoa muut rinnakkaistusmallit haasteellisempia master+workers: master usein epätasapainossa dynaamiset jaot: pitää varoa ettei (uudelleen)jakamiseen kulu liikaa aikaa
yleiskatsaus Profilointi mikä kuluttaa aikaa? miksi? voiko tehdä jotain? pyöriikö ytimet täysillä mutta kuitenkin turhaan ( pyörät sutii ) lisää kappaleessa CSC:n optimointipalvelun ennätys: 10000-kertainen nopeus oma tulos pelkällä kääntäjän vaihdolla: 4.11 Rinnakkaistiedostojärjestelmä (parallel fs) klusteroi tiedostojärjestelmän kuten klusteri rinnakkaislaskennan tiedostoa kirjoitetaan usean kommunikaatiolinkin läpi (eikä yhden kuten NFS:llä tms)
yleiskatsaus Kirjasto kokoelma lainattavia ohjelmanpätkiä käytät ainakin yhtä vaikket tietäisikään (libc) muita kirjastoja lisää kappaleessa kaksi toteutustapaa jaettu staattinen vektorikirjasto emuloi vektoriprosessoria tavallisella skalaarilla joissakin kääntäjissä sisäänrakennettuna oikeilla valinnoilla säästät ohjelmointi- ja ajoaikaa merkittävästi miten olikaan taas se 10000-kertainen? tyypillistä hyötyä vaikea arvioida
yleiskatsaus Capability computing itsessään on haaste vaatii sähköä ja tilaa CSC lähti Kajaaniin vanhaan paperitehtaaseen miten hyödyntää vaikkapa 10 6 corea? tehokkaasti? mitä tehdä datalle? Miten pitää kaikki tyytyväisinä jokaiselle oma kone ylläpitopainajainen rahaa hukkaan joka sekunti kun et laske 100% teholla yhteinen kone kaikki haluaa laskea nyt eikä odottaa jonojen säätäminen haastavaa (lisää kappaleessa Cluster administration)
yleiskatsaus Isot datamäärät jälkikäsittely: miten kaivaa tulokset ulos suunnattomasta datamäärästä redusoida data ymmärrettävään tai hahmotettavaan muotoon esittää se muille pitkäaikaissäilöntä ja varmuuskopiointi en ole vielä kertaakaan nähnyt näitä hoidetun huolella varmuuskopiointi ongelmallista kopiointi kestää kauan (IBM Sequoia: 70 PB/470 GB/s = 41 päivää) varastomedia maksavat paljon data pitäisi validoidakin ajoittain ettei media rapistu CSC:llä $ARCHIVE, mutta ei riitä Isolle Datalle
yleiskatsaus Pullonkaula 1: FLOPS vs muistikaista Blue Gene/Q 204.8 GFLOPS vs 42.6 GB/s jokaiselle kaksoistarkkuuden liukuluvulle tehtävä 40 operaatiota suhteet samanmoisia x86-64-koneilla kiihdyttimet omaa luokkaansa suhde jopa kertaluokkaa huonompi ja pitää vielä kopioida dataa eri muistien välillä! muuttumassa: NVIDIA Kepler välttää ongelman joissain tilanteissa ei oikeasti ihan näin paha tilanne useampi kerros cachea ja prefetching out-of-order suoritus 40 ei oikeastaan kovin iso luku arvioitava muistikaistan riittävyyttä
yleiskatsaus Pullonkaula 2: MPI:n tiedonvälitys kommunikaatioverkko ainakin kertaluokkaa hitaampi kuin muisti arvioitava paljonko dataa välitettävä eri ongelmat/algoritmit vaativat eri määriä samoin eri rinnakkaistustavat ethernetillä ja infinibandillä ylimääräinen pullonkaula node 1 node 2 node N kytkin 1 kytkin 2
yleiskatsaus Pullonkaula 3: Levy-I/O hajautetulla tiedostojärjestelmällä tyypillisesti 3-6 kertaluokkaa hitaampaa kuin muisti (R)DMA auttaa: levyille kirjoitetaan prosessorin jatkaessa laskujaan taas arvioitava riittääkö kaista ihan kaikkea ei kannattane tallettaa
yleiskatsaus unix shell (CSC:llä tutkijan käyttöliittymä ) asenna/kirjoita ohjelma valitse kääntäjä jos ohjelma pitää kääntää GNU, PathScale, Intel, PGI, IBM XL... käännä ja testaa edustakoneessa lyhyillä ja pienillä töillä kirjoita eräajoscripti lähetä työ eräajojonoon slurm, PBS, SGE, LoadLeveler, moab/torque... kahvia ja ehkä parit yöunetkin ihmettele tuloksia loppusijoita data johonkin
yleiskatsaus Module -järjestelmä käyttäjä valitsee itse haluamansa ohjelma- ja kirjastoversiot mahdollistaa eri käyttäjille eri versiot mahdollistaa helpon kääntäjän vaihtamisen teknisesti vain asetetaan ympäristömuuttujia rsync kopioi tiedostosi komennolla rsync -va tai rsync -vau säilyttää aikaleimat yms kopioi vain ne osat tiedostosta, jotka on pakko (=säästää aikaa) bzip2 puristaa tiedostot tiiviiksi syntaksi arkaainen edistyneemmät tiedostomuodot (kuten HDF5) osaavat pakata sisäisesti
Ohjelman asennus/kirjoittaminen yleiskatsaus Ohjelman asennus tai kirjoittaminen oletetaan tutuksi HUOM! vältä viimeiseen asti kääntäjäkohtaisia erikoisominaisuuksia! koskee varta vasten käytettyjä vektorikirjastojakin tuottavat vaikeuksia kun laitteisto vaihtuu hyvin suunnitellulla koodilla saa lähes aina saman edun poikkeuksena Fortran77 mutta ethän enää aloita uutta ohjelmaa sillä, ethän? manuaalin mukainen asentaminen superkoneisiin joskus kinkkistä CSC yleensä auttaa
yleiskatsaus GNU (gcc, gfortran, g++) löytyy mille tahansa koneelle erinomainen standardituki uudemmat versiot (>4.5) kohtuullisia vektoroimaan (tästä lisää kappaleessa ; älä sekoita vektorikirjastoon) pidä aina huoli että ohjelmasi toimii GNU-kääntäjillä: helppo varmistua että koodi toimii aina uudessa koneessa (vaikka sitten lopulta kääntäisikin varsinaisen tuotanto koodin toisella kääntäjällä)
yleiskatsaus PathScale käyttää GNU:ta edustanaan standardituki ja toimivuus GNU:n tasoa aiemmin selvästi paras optimoimaan koodi x86-64:lle erinomainen silmukoiden optimoija hyvä vektoroimaan sisäänrakennettu automaattinen vektorikirjasto varta vasten käytettynä kääntäjäkohtainen erikoisominaisuus kallis (nightly buildit saa ilmaiseksi, jos uskaltaa kokeilla semmoista) PGI monien suosikki kallis allekirjoittanut ei ole löytänyt mitään hyvää
yleiskatsaus Intel yllättäen löytyy vain Intel-yhteensopivalle raudalle erinomainen optimoija hyvä vektoroimaan aiemmat versiot eivät optimoineet AMD:lle lainkaan! (nykyiset?) sisäänrakennettu automaattinen vektorikirjasto varta vasten käytettynä kääntäjäkohtainen erikoisominaisuus ilmainen
yleiskatsaus Käännös Lähdekooditiedostoista kannattaa standardoida tekstin asettelu (mieluusti automatisoidusti) IDE: eclipse, spyder, emacs+cscope+etags+... mielummin paljon pieniä kuin yksi iso tiedosto vältä tiedostonnimien, paljaiden numeroiden jne käyttöä Makefile säästä hermojasi ja opettele käyttämään vähänkin pidemmän koodin kanssa säästät aikaakin Kääntäjäoptiot 1. -g -O0 kun testataan 2. laskuja varten -O3 -ffast-math (tai vastaava)
yleiskatsaus Eräajoscripti Shell script (sh-perhe) lista shell-komentoja: voit copy-pasteta käsin kirjottamasi (ba)sh osaa myös for-silmukat ja if-lauseet! muuttujat shell-scripteissä: ympäristömuuttuja sh-perheessä asetetaan: export MUUTTUJA=ARVO tulostetaan ARVO : echo ${MUUTTUJA} alkaa maagisella rivillä #!/polku/haluttuun/shelliin anna suoritusoikeudet: chmod 700 tiedosto yhdessä suoritusoikeus ja maaginen rivi mahdollistavat scriptin suorittamisen tavallisena komentona Eräajoscripti huolehdittava ympäristömuuttujista eräajojärjestelmä tulkitsee scriptistä erikoisrivejä slurmin erikoisrivit tultava heti maagisen rivin jälkeen ovat muotoa #SBATCH parametri parametrit: man sbatch
yleiskatsaus Eräajoscripti Esimerkki #!/ bin / bash # SBATCH -J testjob # kuvaava nimi # SBATCH -t 03: 00: 00 # varataaan 3 tuntia aikaa # SBATCH -o test. out # tulostus test. out : iin # SBATCH -e test. err # virhetulosteet test. err :\ iin # SBATCH -n 4 # varataan 4 ydinta # rivin voi katkaista katkaisematta kenoviivalla\ yo tapaan export MYDIR = path # ladataan pari modulia module load numpy openmpi /1.6 - intel use. own # ajastetaan ja ajetaan rinnakkaisohelma time mpirun python ${ MYDIR }/ myprogram Huom: python ei ole rinnakkaisohjelma, ${MYDIR}/myprogram:n on huolehdittava rinnakkaisjutut
Eräajo yleiskatsaus Front end vs node erot konekohtaisia klusterit yleensä helppoja: nodeissa ja edustassa sama käyttöjärjestelmä Crayt ja IBM BlueGenet haastavimpia: nodeissa eri käyttöjärjestelmä, cross-compilation Fujitsu? tiedostojärjestelmät nodet yleensä näkevät vain rinnakkaistiedostojärjestelmät jos muita näkyy, vältä niiden käyttöä pätee CSC:n louhessa pleionessa kotikin on rinnakkainen, käytä vapaasti kirjastot pleionessa tehty kivasti: kaikki paitsi frontendin /appl näkyy paikalliset asennukset: /home/opt/apps/ best bet: slurmin --export=all parametri
Eräajo yleiskatsaus Slurm-eräajojärjestelmä, osa I jonot (queue) listaa jonot: sinfo tarkemmat tiedot jonoista: sinfo --long ja nodeista sinfo --Node --long backfill mahdollistaa jonossa etuilun ohittaa vain riittäviä resursseja odottavia töitä vain riittävän lyhyet ja pienet työt voivat etuilla aikarajat käytä #SBATCH --time <days-hours:minutes:seconds> varaa vain tarvitsemasi aika: muutkin haluavat laskea talleta data levylle ja jatka siitä, mihin jäit jos kertalaaki ei riitä lyhyet työt backfillautuvat helpommin
Eräajo yleiskatsaus Slurm-eräajojärjestelmä, osa II muistirajat käytä #SBATCH --mem <MEM-IN-MB> tai --mem-per-cpu pleionessa oletus toimii melkein aina pienempi muistimäärä auttaa myös backfilliin joissakin tilanteissa ketjutus: haluat ajaa työn A vasta kun B on päättynyt #SBATCH --dependency=after:<b:n JOBID> squeue kertoo JOBID:n joudut tietenkin itse pitämään huolen että A osaa huomioida B:n tulokset esim. python-scrpiti prosessoi B:n tulokset ja käynnistää A:n oikeilla parametreillä slurm ei tiedä eikä voikaan tietää mitään työn tuloksista tai parametreistä visuaalinen jonostatus: smap
Kahvi ja tulokset yleiskatsaus Oletus jokainen osaa tuhlata aikaansa tehokkaasti koneen laskiessa Tulosten käsittely tapauskohtaista vinkki prosessoi mahdollisuuksien mukaan automaattisesti scriptillä tms
Kotitehtävän ratkaisu yleiskatsaus cache
yleiskatsaus (MPI-standardi) mainos: MPI (Parallel Programming with MPI (December 11-13, 2012): http://www.csc.fi/courses/archive/mpi-2012) perusidea: jaetaan ongelma niin itsenäisiin osiin kuin mahdollista MPI toimii viestinviejänä osien välllä deadlocks: muna-kana-ongelmat esimerkkijako: 1000 3 hila, 64 ydintä, jokaisella 250 3 osahila MPI Cart create luo MPI-kommunikaattorin kommunikointia varten MPI Cart shift kertoo kuka milläkin puolella majailee MPI Sendrecv yksi vaihtoehto datan kopiointiin (yo tietoa käyttäen) MPI Allreduce lasketaan tulokset yhteen ja välitetään kaikille master+slaves -jaossa ei geometrioita (MPI Cart...)
yleiskatsaus useita vaihtoehtoja käsitellään tässä OpenMP (älä sekoita OpenMPI:in) tärkein käsittelemätön vaihtoehto on säikeistys deadlocks: muna-kana-ongelmat OpenMP automaattinen rinnakkaistus jaetun muistin sisällä voi (ja kannattaa) käyttää yhdessä MPI:n kanssa gcc: -fopenmp -parametri rinnakkaistusta ohjataan #pragma omp -preprosessoridirektiiveillä käytännössä isot silmukat jaetaan useammalle corelle TAAS deadlocks osaa rajoitetusti haistaa ongelmatilanteita itse http://www.openmp.org/
yleiskatsaus /apuprosessorit laitetaan koneeseen prosessorin lisäksi joku toinenkin laskukone yleisin: NVIDIA Fermi ja Kepler -perheet muita: AMD FirePro, Intel Xeon Phi, Clearspeed... yhdessä kiihdyttimessä tehoa jopa 20-80 tavallisen ytimen verran haasteita siirrettävyys uuteen koneeseen: kaikilla omat ohjelmointi kielensä muistinkaista ja MPI kommunikaatio vaikeita käyttää verrattuna rinnakkaistukseen MPI:llä tai OpenMP:llä ratkaisuja yhteiset ohjelmointitavat: OpenCL, OpenHMPP, OpenACC Kepler osaa itse MPI:tä valmiit kirjastot rajoitus: eivät taivu kaikentyyppisiin laskuihin
Kirjastojen käyttö yleiskatsaus Käyttö näkyvät koodissa kuin tavalliset funktiokutsut: sin(x) tarvitsevat kääntäjäparametrejä käännettäessä (oikeastaan preprosessoidessa): -I/polku/kirjaston/headerhakemistoon linkatessa -L/polku/kirjaston/kirjastohakemistoon ja -lkirjastonnimi parametrien järjestys merkitsevä komentorivi luetaan vasemmalta oikealle kirjastosta haetaan vain siihen mennessä vastaan tulleet funktiot
yleiskatsaus Kirjastoja PETSc harvojen matriisien lineaarialgebra iteratiiviset ratkaisimet aika-askeltimet sopii sekä FD, FEM että FVM -koodeihin ei generoi mitään TAO optimointialgoritmeja (vaatii PETScin alleen) myös constraint minimisation FEniCS Finite-Element -kirjasto automaattinen koodingeneroija hilageneraattori
Kirjastoja yleiskatsaus Kielten sovittimia melkein mikä tahansa kielipari: swig C ja C++ ja python: cython Pari suositusta elmer: CSC:n FEM-ohjelmisto OpenFOAM: nestedynamiikkakirjasto, CSC mukana GPAW: CSC mukana kehitystyössä, hyvä tuki
yleiskatsaus Käännös gcc: -O3 -ffast-math -fno-trapping-math -funswitch-loops -march=native intel: -O3 -fast -fp-model fast=2 lue manuaalista mitä kaikkea menetät: mm. nollan etumerkin ja 1:n virheilmoitukset muista, että liukuluvuille a + b + c c + b + a ja 1.0 1 = 0.99999994 HUOM native-vivut eivät toimi cross-compile-ympäristössä Profilointi auttaa hamottamaan mikä maksaa, jopa koodirivin tarkkuudella vaatii vähän vaivannäköä ja uudelleenkääntämisen MPI-liikenteen profilointi vaatii MPI-profilointikirjaston TAU, Scalasca, Cray PAT, PAPI (sis. MPI-profilointi) poor man s choice: gprof ja gcc -pg -g
yleiskatsaus Isot silmukat järjestä oikein: C:ssä p[i][j][k] viimeinen indeksi muuttuu nopeiten fortranissa toisin päin! kääntäjät joskus osaavat vaihaa järjestystä (gcc: -funswitch-loops) yritä vektoroida silmukat: SIMD-käskyt käyttöön älä sekoita vektorikirjastoon (mutta yritä toki saada nekin käyttöön) if-lauseet isoissa silmukoissa vaarallisia kääntäjät joskus osaa ottaa iffit ulos (-funswitch-loops) funktiokutsut isoissa silmukoissa hidastavat koskee myös Fortranin intrinsicejä (ne on oikeasti kirjastofunktioita) trigonometriset, hypertrigonometriset sekä exp ja log voidaan korvata vektorikirjastolla
yleiskatsaus Isot silmukat, osa II cachea rajoitetusti jaettu riveihin : muistista haetaan aina kokonainen rivi paha silmukka hyppää joka kerta rivin alusta seuraavan alkuun harvoin tilaa useammalle kuin kahdelle isolle taulukolle onneksi kääntäjät osaavat (joskus) fissioida silmukoita (gcc: -ftree-loop-distribution) Iso määrä dataa tiedostoissa kirjoita usealta MPI-prosessilta (ei välttämättä kaikilta) välttääksesi pullonkaulat ilman kunnon rinnakkaistiedostoformaattia ja -kirjastoa (HDF5), eri prosessien kirjoitettava eri tiedostoihin print ja sukulaiset voi unohtaa printattu 3.1415926535897931 vie 18 tavua, fwrite(&pi,1,sizeof(double),f) vain 8 lyhyempi printti kadottaa dataa kamala kasa konversioita tehtävänä
yleiskatsaus Muita temppuja MPI Irecv ja MPI Isend: voit laskea datan siirtyessä BLAS, BLAS, BLAS, BLAS; harvoille matriiseille ARPACK ja tiheille LAPACK näistäkin on optimoituja ja optimoimattomia versioita! MPI: harvoille matriiseille PETSc, tiheille esim ScaLAPACK preconditioning: Ax = b sijaan ratkaise AP 1 y = b,px = y ylipäätään valitse moderni algoritmi ja kirjasto
yleiskatsaus Etähallinta pleionessa ilo yleisin IPMI (automaatio, skriptaus) etä BIOS etävirtakytkin virtualisaatio (virt-manager, kvm, virtualbox jne) kerneli kernelissä helpottaa ylläpitovaivaa kun ei ole rautaa vaivana joskus myös tehostaa käyttöä
yleiskatsaus Virransyötöstä front-end ja levyt UPS:n takana laskentaraudalla ei välttämättä UPS:iä CSC:llä on diesel jonka takana on kaikki virtojen kytkentä päälle tapahduttava hallitusti isommassa klusterissa virtapiikit todella suuria
yleiskatsaus Ilmastointi ei parane unohtaa: vie enemmän sähköä kuin itse kone isoissa laitteissa valtava päänsärky top-1: Cray Titan: 8209 kw (green500 puuttuu) green-1: IBM Sequoia: 7890 kw (2.1 GF/W) top-3: K: 12660 kw (830 MF/W) ClearSpeed: 6 GF/W, mutta ei virallisia lukuja 2GF/W muilla nykykiihdyttimillä ja BG/Q (top: AMD FirePro ja Xeon Φ) <1000 MF/W vanhemmilla kiihdyttimillä <400 MF/W ilman
yleiskatsaus Scientific Linux Scientific Linux perustuu RedHatiin perusasennus sisältää suuren määrän tieteellisiä ohjelmistoja lisääkin löytyy Ohjelmiston asentaminen osa ohjelmista asentuu CSC:n toimesta RedHatin paketinhallintatyökalut: yum ja rpm käytä näitä kun vaan mahdollistaa klusteriympäristö pitää huomioida uuden laskentaohjelman näyttävä myös nodeissa!
yleiskatsaus Lisääminen ja poisto varmaankin jo tiedossa Name Service Switch (NSS) määrittää, mistä käyttäjä- ja ryhmätiedot haetaan pleionessa haetaan verkon yli NIS/YP:stä muita vaihtoehtoja LDAP (palvelimelta verkon yli) Windows AD (oikeasti vain rajoitettu LDAP) flat files : /etc/passwd, /etc/group, /etc/shadow: peruslinuxin oletus voidaan pinota useami tapa hoitaa myös kaikki nimi numero -muunnokset
yleiskatsaus Pluggable Authentication Modules (PAM) päättää onko käyttäjä olemassa tyypillisesti kysyy tämän NSS:ltä autentikoi käyttäjät autorisoi käyttäjät alustaa istunnot useita autentikointimenetelmiä (pluggable!) NIS/YP Kerberos LDAP /etc/shadow vastaava lista autorisoinnille ja istunnoille
yleiskatsaus Lisensseistä Scientific Linux on vapaasti käytettävää tyypillisesti ei-vapaat lisenssit kysyväyt lisenssipalvelimelta olisko lisenssiä yleensä maksetaan yhtä aikaa käytettävien mukaan (esim. 10 lisenssiä 20 käyttäjälle) toinen vaihtoehto on käyttää käyttäjäryhmiä kummassakin ongelmansa: esim. Mathematican lisenssi ovat varattuna aina kun Mathematican kerneli on käynnissä PathScale taas antaa lisenssin esim. 10 min kerrallaan jolloin voit menettää lisenssin kesken käännösprosessin! käyttäjäryhmä-ratkaisussa joutuu maksamaan ryhmän jäsenten määrän mukaan
yleiskatsaus Asenna yhteisesti käytettäväksi PETSc 3.3 tai uudempi Paraview 3.14.1 tai uudempi TAO 2.1 tai uudempi (haastava!) PathScale EKOPath (haastava!) TAU/Scalasca HDF5 1.8-sarjan rinnakkaisversio FEniCS 1.1.0 tai uudempi