Ülevaade objektorienteeritud paralleelprogrammeerimise raamistikust Charm++
Nimi
Tõnu Jaarma
Kokkuvõte
Eksisteerib palju võimsaid superarvuteid ja samas ka keerulisi algoritme, mis tõesti võimsust vajavad. Probleem seisneb selles, et riistvara ei jõua tarkvara arenguga sammu pidada ja tihti tekib vajadus suuremale jõudlusele. Lahenduseks oleks ülesannete või tööde jagamine olemasolevate ressursside vahel. Näiteks oleks väga keeruline luua protsessor, mis oleks 1000 GHz, kuid pole probleem luua tuhat 1 GHz protsessorit. Paralleelarvutuste mõte seisnebki selles, et ei peaks eksponentsiaalselt võimsamaid riistvara komponente looma, vaid kasutada efektiivselt olemasolevaid.
Käesoleva töö eesmärgiks on anda ülevaade paralleelprogrammeerimise raamistikust Charm++. Kuid enne selle raamistiku ülevaate andmist, kirjeldatakse paralleel-programmeerimisest üldisemalt. Tuuakse näide maatriksite korrutamisest jagatud protsessorite peal ja seda kahe mudeli peal: MPI ja Charm++. Charm++ on objektorienteeritud paralleel-programmeerimise raamistik, mis baseerub C++ keelel, kuid lihtsamalt võib öelda, et Charm++ on teek, mis lubab C++ objektidel suhelda omavahel efektiivsemalt. Charm++ raamistikule pani aluse L.V. Kale koos oma arendaja tiimiga paralleelprogrammeerimise laboratooriumis. Umbes sada inimest on panustanud sellesse projekti keskmiselt 15 aasta jooksul. [1]
Charm++ raamistikku kasutades on näiteks ehitatud järgmised suured rakendused:
• NAMD – Not Another Molecular Dynamics programm, mis on dünaamiline molekulaar simulatsiooni pakett. [2]
• Center for Simulation of Advanced Rockets kasutab füüsilise simulatsiooniks koodi, mis kasutab samuti Charm++ raamistikku. [3]
Charm++ programmeerimise mudel sarnaneb CORBA, Java RMI või näiteks RPC mudelile, kuid siiski on see teek mõeldud suure jõudlusega masinatele, mis on disainitud paralleelarvutuste läbiviimiseks. Charm++ kasutab „üks programm, palju andmeid“ (SPMD – single program, multiple data) programmeerimise mudelit, mille tegi kuulsaks MPI (Message Passing Ingerface). [1]
Sõnumi saatmise liides ehk MPI ilmus esimesena standardi nime all 1994 aastal ja selle üks põhilisi eesmärke on täita paralleelarvutusi jagatud ressursside vahel. MPI funktsionaalsus on äärmiselt ulatusrikas ja pakub programmeerijale:
• Sidet punktist punkti (Point-to-point communication)
• Kollektiivset sidet (Collective communication)
• Ühepoolset sidet (One-sided communication)
• Paralleelset sisendit ja väljundit (Parallel I/O)
• Dünaamilist protsessi juhtimist (Dynamic process management) [7]
Charm++ eelis MPI ees on see, et eksisteerib keeruline iseärasus lihtsustamaks rakendusest sõltumatut objekti ümberasustamist (application-independent object migration). MPI standardit kasutades on see samuti võimalik, kuid nõuab keerulist programmeerimist ja pidevat koormuse jälgimist. Charm++ parim iseärasus seisneb selles, et seda raamistikku võib võtta kui lisandit MPI standardile, sest eksisteerib AMPI (Adaptive Message Passing Interface), mis lubab MPI koodi jooksutada otse Charm++ raamistikku kasutades. [1]
Järgnevas töös antakse põhiline ülevaade mõlemast paralleelprogrammeerimise tehnikast. MPI standardit käsitletakse otse koodinäidetega ja seletatakse lahti iga funktsiooni tähtsus ühes tavalises paralleelselt käivitatavast programmist. Charm++ raamistikule lähenetakse rohkem teoreetilisema osaga, kus alguses pannakse rõhku struktuurile ja lõpus antakse ülevaade, kuidas programmeerida Charm++ programm.
Selles töös kirjeldatakse ka Charm++ struktuuri, mida saab kokku võtta viie sõltumatu objekti kategorisatsiooniga:
1. Järjestikused objektid (nagu ka C++)
2. Chare objektid – samaaegselt käivituvad objektid
3. Chare järjend – kogum chare objektidest ja neid objekte saab järjendis individuaalselt käivitada
4. Chare grupid – kogum chare objektidest, mis on iga protsessori grupi liige
5. Sõnumid – infovahetusega tegelevad objektid [7]
Töö koosneb kirjalikust ja praktilisest osast. Kirjalik osa on rohkem teoreetilisem ja ära jagatud kolme peatüki vahel. Kirjaliku osa eesmärgiks on anda kindel ülevaade paralleel-programmeerimisest kasutades selleks kahte erinevat lähenemist. Töö praktiline osa koosneb kahest paralleelselt käivitatavast programmist, kus esimene on kirjutatud MPI standardit kasutades ja teine Charm++ raamistikku. Lisatud on ka õpetused, kuidas endale sellised keskkonnad paigaldada, et sooritada samu paralleelarvutusi.
Esimeses peatükis antakse ülevaade paralleelprogrammeerimise kasutusest tänapäeval ja kuidas kirjutada koodi, mis arvutaks paralleelselt. Esmalt kirjeldatakse populaarsemat paralleelprogrammeerimise stiili, milleks on MPI standard ja selles stiilis koode kirjutatakse C keeles. Kui tavalist koodi käivitatakse järjest ja iga funktsioon ootab oma täitmise lõpetamist, siis mõistlikum on kirjutada mitteblokeeruvaid funktsioone paralleelprogrammeerimisel.
Näha on ka kuidas tekivad lihtsad järjekorra probleemid, ehk ei ole teada kus ja millised andmed millises järjekorras töödeldakse, kui just ei kasutata mingeid sünkroniseerimis- tehnikaid.
Teises peatükis kirjeldatakse selle töö põhilist osa – ülevaadet Charm++ raamistikust. Ülevaate andmiseks kirjeldatakse raamistiku ülesehitust, struktuuri ja kindlasti ka iseäraseid tunnuseid. Alustatakse väikseimatest objektidest ja sealt edasi kirjeldatakse juba nende objektide järjendit ning kuidas need objektid suhtlevad omavahel. Seal tulevad välja ka Charm++ raamistiku erinevused võrreldes MPI liidesega.
Kolmandas peatükis muutub teoreetiline osa natukene praktilisemaks. Kirjeldatakse kuidas Charm++ programm käivitatakse ja kuidas kulgeb selle käivitusprotsess. Lihtsate näidete abil demonstreeritakse, kuidas programmeerija ei pea teadma tervet käitussüsteemi, vaid piisab teadmisest, kuidas luua objekte, mida saab ümber migreerida.
Lisana on välja toodud kaks programmi: C keeles kirjutatud maatriksite korrutamine (MPI liidese demonstratsioon) ja C++ keeles kirjutatud maatriksite korrutamine (Charm++ raamistiku demonstratsioon). Mõlemad programmid kasutavad sama algoritmi paralleelselt arvutamiseks ja mõlemad on kirjutatud mitteblokeeruvaid funktsioone kasutades. Samuti on lisana esitatud õpetused, kuidas paigaldada vastav keskkond ja neid programme paralleelselt käivitada.
Lõputöö keel
eesti
Lõputöö tüüp
Bakalaureus - Infotehnoloogia
Juhendaja(d)
Oleg Batraśev ja prof. Eero Vainikko
Kaitsmise aasta
2012