automaattisen tietotyypin tunnistamisen osalta, minkä Smith koki olevan avaintekijä onnistuneen rinnakkaisen ohjelmointikielen toteuttamisessa.

Samankaltaiset tiedostot
Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Ohjelmointikieli TIE Principles of Programming Languages Syksy 2017 Ryhmä 19

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Rinnakkaisuus. parallel tietokoneissa rinnakkaisia laskentayksiköitä concurrent asioita tapahtuu yhtaikaa. TTY Ohjelmistotekniikka

Ruby. Tampere University of Technology Department of Pervasive Computing TIE Principles of Programming Languages

D-OHJELMOINTIKIELI. AA-kerho, 33. Antti Uusimäki. Arto Savolainen

ADA. Ohjelmointikieli. Ryhmä 5 Henna Olli, Päivi Hietanen

Ohjelmointiharjoituksia Arduino-ympäristössä

11/20: Konepelti auki

TIE Principles of Programming Languages. Seminaariesityksen essee. Ryhmä 18: Heidi Vulli, Joni Heikkilä

7/20: Paketti kasassa ensimmäistä kertaa

Tieto- ja tallennusrakenteet

Algoritmit 1. Luento 3 Ti Timo Männikkö

Tutoriaaliläsnäoloista

Dart. Ryhmä 38. Ville Tahvanainen. Juha Häkli

TIE Principles of Programming Languages CEYLON

Prolog kielenä Periaatteet Yhteenveto. Prolog. Toni ja Laura Fadjukoff. 9. joulukuuta 2010

ELM GROUP 04. Teemu Laakso Henrik Talarmo

815338A Ohjelmointikielten periaatteet

1. Olio-ohjelmointi 1.1

Koka. Ryhmä 11. Juuso Tapaninen, Akseli Karvinen. 1. Taustoja 2. Kielen filosofia ja paradigmat 3. Kielen syntaksia ja vertailua JavaScriptiin Lähteet

Tietorakenteet ja algoritmit

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

ITKP102 Ohjelmointi 1 (6 op)

Rinnakkaistietokoneet luento S

7. Oliot ja viitteet 7.1

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Tie Principles of Programming Languages Seminar Essay. Lua. Group 23 Miikka Koskinen Joose Sainio

ITKP102 Ohjelmointi 1 (6 op)

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Ohjelmoinnin perusteet Y Python

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Sulautettujen järjestelmien skaala on niin laaja, että on erittäin vaikea antaa yleispätevää kuvausta siitä millainen on sulautettu järjestelmä.

Sisältö. 22. Taulukot. Yleistä. Yleistä

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

Groovy. Samuli Haverinen, Aki Hänninen. 19. marraskuuta 2015

Sisältö. 2. Taulukot. Yleistä. Yleistä

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Ohjelmointi 2. Jussi Pohjolainen. TAMK» Tieto- ja viestintäteknologia , Jussi Pohjolainen TAMPEREEN AMMATTIKORKEAKOULU

1. Omat operaatiot 1.1

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat. Operaatiot. Imperatiivinen laskenta. Muuttujat. Esimerkkejä: Operaattorit.

3. Muuttujat ja operaatiot 3.1

Ohjelmoinnin peruskurssien laaja oppimäärä

VHDL/Verilog/SystemC. Jukka Jokelainen

4.2. ALIOHJELMAT 71. Tulosvälitteisyys (call by result) Tulosvälitteinen parametri kopioidaan lopuksi

CUDA. Moniydinohjelmointi Mikko Honkonen

Ohjelmoinnin peruskurssien laaja oppimäärä

15. Ohjelmoinnin tekniikkaa 15.1

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

2. Olio-ohjelmoinista lyhyesti 2.1

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

TIES542 kevät 2009 Tyyppijärjestelmän laajennoksia

PERL. TIE Principles of Programming Languages. Ryhmä 4: Joonas Lång & Jasmin Laitamäki

Ohjelmoinnin peruskurssien laaja oppimäärä

4. Luokan testaus ja käyttö olion kautta 4.1

TIES542 kevät 2009 Yhteismuistisamanaikaisuus

1. Mitä tehdään ensiksi?

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

C++ Kuva 1-1. C- ja C++ kielien perustana olevat kielet.

1. Johdanto. 2. Ominaisuudet Tietotyypit ja tyypitys

05/04/2004. Digitaalisen median tekniikat, k2004 HY/TKTL, javascript_1. Harri Laine 1. JavaScript

Digitaalisen median tekniikat JavaScript

Digitaalisen median tekniikat JavaScript Harri Laine 1

Jakso 4 Aliohjelmien toteutus

4. Olio-ohjelmoinista lyhyesti 4.1

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla

15. Ohjelmoinnin tekniikkaa 15.1

Tietorakenteet ja algoritmit

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssien laaja oppimäärä

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

C++11 lambdat: [](){} Matti Rintala

Haskell ohjelmointikielen tyyppijärjestelmä

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

Erlang. Miika Heinonen ja Lassi Uosukainen (Group 92) TIE Principles of Programming Languages Seminaariessee. Yleistä

Kielioppia: toisin kuin Javassa

2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma muuttaa parametrejaan tai globaaleja muuttujia, tulostaa jotakin jne.

Muistutus aikatauluista

815338A Ohjelmointikielten periaatteet

lausekkeiden tapauksessa. Jotkin ohjelmointikielet on määritelty sellaisiksi,

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. II Johdanto olio-ohjelmointiin

Solidity älysopimus ohjelmointi. Sopimus suuntautunut ohjelmointi

TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 4: Cache, osa 2

ITKP102 Ohjelmointi 1 (6 op)

Tyyppiluokat II konstruktoriluokat, funktionaaliset riippuvuudet. TIES341 Funktio-ohjelmointi 2 Kevät 2006

Rakenteiset tietotyypit Moniulotteiset taulukot

Clojure, funktionaalinen Lisp murre

Oppimistavoitteet kurssilla Rinnakkaisohjelmointi

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Imperatiivisen ohjelmoinnin peruskäsitteet. Meidän käyttämän pseudokielen lauseiden syntaksi

Transaktiot - kertausta

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 13. lokakuuta 2009

Ohjelmoinnin peruskurssien laaja oppimäärä

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Java kahdessa tunnissa. Jyry Suvilehto

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

Transkriptio:

Chapel Group 15

Chapel on korkean asteen abstraktiotason ohjelmointikieli, joka on tarkoitettu pääasiassa rinnakkaisuuden (engl. parallelism) ohjelmoimiseen korkean tuotannon ympäristöissä suuren kokoluokan järjestelmillä. Chapelin nimi tulee akronyymistä Cascade High Productivity Language. Se on melko uusi kieli, sillä sen kehittäminen aloitettiin vuona 2002 ja ensimmäinen versio siitä valmistui vuonna 2012. Chapel ei ole vielä tuotantoasteella vaan prototyyppivaiheen implementaatiossa. Chapel on kehitetty moniytimisen rinnakkaisen laskennan helpottamiseksi ja tehostamiseksi isoilla järjestelmillä. Sen suunnittelussa ja toteutuksessa on otettu huomioon siirrettävyys, mikä mahdollistaa sen käyttämisen moniytimisillä tietokoneilla, clustereissa ja pilvialustoilla sekä superkoneilla, joille se alunperin suunniteltiin. Kehittäjien tarkoituksena on ollut tehdä Chapelista ohjelmointikieli, joka soveltuu monenkaltaiseen rinnakkaiseen ohjelmointiin. Tällä hetkellä se mahdollistaa data-rinnakkaisen (engl. data parallelism), tehtävärinnakkaisen (engl. task-parallelism) ja synkronisaatioon perustuvan rinnakkaisen ohjelmoimisen siten, että näihin voitaisiin vielä lisätä tuki sisäkkäiselle rinnakkaisuudelle (engl. nested parallelism). Chapel pyrkii myös hyödyntämään paremmin niin ohjelmistotason kuin laitteistotasonkin tarjoamaa ja mahdollistamaa rinnakkaisuutta. Historia Chapelin kehittäminen alkoi 2002 DARPAn High Productivity Computing Systemsin (HPCS) ohjelmassa. Sitä kehitettiin tässä ohjelmassa vuoteen 2011 saakka. Ohjelmaan sisältyi viisi tiimiä, joita jokaista johti laitteistovalmistaja. Näitä olivat Cray Inc., Hewlett-Packard, IBM, SGI, ja Sun. Ohjelman tarkoitus oli haastaa tiimit parantamaan korkean tuotannon tietokonelaskennan tuottavuutta. 2003 ohjelma eteni toiseen vaiheeseen, jossa Crayn johtama tiimi alkoi kehittää Chapelia, IBM X10:ä ja Sun Fortressia. Crayn projekti sai nimekseen Cascade. Sitä johti Crayn silloinen johtava tutkija Burton Smith, joka oli skeptinen uuden ohjelmointikielen suunnittelun suhteen HPCS-ohjelman alaisuudessa. Smithin mielipiteeseen vaikutti skeptisismi, voisiko pelkkien laitteistovalmistajien suunnittelema ohjelmointikieli menestyä. Hän kuitenkin muutti mielensä, kun selvisi, että suurin osa HPC-kielistä oli alun perin kehitetty laitteistovalmistajien toimesta. Vuoden 2003 alussa Crayn tiimi ilmoitti, että sen tarkoituksena on suunnitella uusi ohjelmointikieli. Chapelin suunnittelusta vastasi pääpiirteissään neljä henkilöä - David Callahan Craylta, CalTechin/JPL:n edustaja Hans Zima, Brad Chamberlain University of Washingtonin ZPLprojektista ja John Plevyak -, joiden taustoja sen ominaisuuskokoelma mukailee. Callahan vastasi kielen kokonaisvaltaisesta visiosta ja monisäikeisestä suoritusmodelista kevyen datakeskeisen synkronisaation kera. Zima toi kieleen HPC-näkökulmaa, Chamberlain keskittyi indeksijoukkoihin ensimmäisen luokan kansalaisina ja Plevyakin osaaminen täydensi kieltä

automaattisen tietotyypin tunnistamisen osalta, minkä Smith koki olevan avaintekijä onnistuneen rinnakkaisen ohjelmointikielen toteuttamisessa. Vuodesta 2003 vuoteen 2006 projekti oli vaiheessa, jossa tiimin jäsenet yrittivät löytää yhteistä näkemystä uudesta ohjelmointikielestä. Vuosien 2006-2008 aikana Chapelin design ja kääntäjäarkkitehtuuri alkoivat stabiloitua. Tämä mahdollisti muun muassa ensimmäisten tehtävä-rinnakkaisten ohjelmien ajon huhtikuussa 2006, ensimmäisten hajautettujen-muistitehtävä-rinnakkaisten (engl. distributed-memory task-parallel) ohjelmien ajon heinäkuussa 2007 ja ensimmäisten hajautettujen-muisti-data-rinnakkaisten (engl. distributed-memory data-parallel) ohjelmien ajon syyskuussa 2008. Vuosina 2008-2012 tiimi keskittyi kiinnostuksen herättämiseen ja palautteen keräämiseen. Tänä aikana Chapel siirtyi myös avoimen lähdekoodin tuotantoon. HPCS-ohjelman päättyessä loppuvuodesta 2012 Cascade-projekti oli saavuttanut Chapelin muodossa ohjelmalliset vaatimukset ja herättänyt mielenkiintoa HPC-piireissä. Suosion johdosta tiimi sitoutui viiden vuoden kehittämisjaksoon, jonka tarkoituksena on kehittää tutkimustason prototyyppisestä ohjelmointikielestä implementaatio korkean tuotannon ympäristöön. Kielen ominaisuudet Paradigmat Chapelin voidaan katsoa hyödyntävän useampaa ohjelmointiparadigmaa. Vaikka se on tehty rinnakkaiseen ohjelmointiin, se mahdollistaa olio-orientoituneen ohjelmoinnin ja sisältää myös automaattisen tietotyypin selvityksen sekä ominaisuuksia geneeriseen ohjelmointiin. Kielen rakenne Chapel on rakenteeltaan lohkomainen imperatiivinen ohjelmointikieli. Chapelin syntaksi muistuttaa C-kielen syntaksia. Lausekkeet erotellaan puolipistein, ja lohkot erotellaan aaltosuluilla. Ehtolauseet ovat samankaltaisia C:n kanssa. Edellä mainittujen ominaisuuksien takia se on helpohko opittava esimerkiksi aiemmin C:llä, C++:lla, Javalla, Fortranilla tai Pythonille ohjelmoinneille. Sen rinnakkaisuusominaisuudet ovat saaneet kuitenkin vaikutteita ZPL:stä, High-Performance Fortranista (HPF) sekä Cray MTA/Cray XMT laajennuksista C:lle ja Fortranille. Tietotyypit Chapelin perustietotyypit ovat oletuksena 64-bittisiä. Tyypit ovat bool, int, uint, liukuluvuista real ja imag, complex sekä string. Kaikki tietotyypeillä on oletusarvot, jotka muuttujat saavat, jos käyttäjä ei ole initialisoinut niille arvoja. Chapelissa on myös array ja range-tyyppiset rakenteet, jotka voivat sisältää useita perustyyppejä. Domain-tyypit voivat pitää sisällään useita erityyppisiä alkioita ja olla myös kaksiulotteisia. Muita kielen tietotyyppejä ovat tuplet,

numeroidut tyypit (engl. enumerated types) ja tyyppiunionit. Chapel tukee myös oliota ja tietue- (engl. record) tyyppejä. Tietuetyypit noudattavat arvosemantiikkaa ja oliot viitesemantiikkaa. Chapelissa ohjelmoija voi esittää ja käyttää hajautettuja tietorakenteita kuin ne olisivat lokaaleja tietorakenteita. Näitä kutsutaan globaalin näkyvyyden tietorakenteiksi (engl. globalview data structures), koska ne voidaan alustaa koko ohjelman käyttämällä tiedolla ja niitä voi käsitellä globaalein indeksein säikeissä. Koska suuren skaalan ohjelmat ovat usein dataintensiivisiä, Chapel tarjoaa useita globaalin näkyvyyden taulukoita, joita ovat esimerkiksi suorakulmaiset (engl. rectangular), hajanaiset (engl. sparse), assosiatiiviset ja epämuodolliset (engl. unstructured) taulukot. Silmukkarakenteet Chapelin for-silmukkarakenne on toteutettu kahdella lauseella niin, että ensimmäinen lause esittelee iterointimuuttujan ja toinen lause iterointisäännön. Iterointimuuttuja on silmukan lokaalimuuttuja. Silmukoissa voidaan käyttää myös yeld-avainsanaa, jolloin tieto voidaan palauttaa ulos silmukasta silmukan suorituksen jatkuessa eteenpäin sen jälkeen. Coforall-silmukka on rinnakkaistettu niin, että jokainen silmukan iteraatio on oma tehtävänsä eli oma prosessinsa. Silmukassa on sisäänrakennettu synkronisaatio siten, että se odottaa kaikkien iteraatioiden valmistumisen ennen sitä kutsuneen prosessin jatkumista. Forall-silmukka on vastaavasti rinnakkaistettu niin, että se tekee optimaalisen määrän tehtäviä riippuen esimerkiksi käytettävän laitteiston ytimien määrästä. Proseduurit Funktioiden syntaksi on hyvin samankaltainen esimerkiksi C++ kanssa. Parametrit voivat olla tyypittämättömiä funktioiden esittelyssä, ja on mahdollista tehdä funktioita, jotka ottavat rajoittamattoman määrän parametreja. Funktioiden polymorfismi on myös mahdollista eli kutsuttavista määritellyistä samannimisistä funktioista valitaan yksi ajon aikana. Funktioiden parametrinvälitys toimii arvosemantiikalla ja paluuarvoja voidaan palauttaa return tai yeldavainsanojen avulla. Rinnakkaisuus Rinnakkaisuus toteutetaan tehtävien (engl. task) avulla. Tehtävät ovat anonyymejä ja ne kirjoitetaan omiin lohkoihinsa ohjelmassa. Avoinsana begin aloittaa uuden tehtävän. Tehtävien valmistumista voidaan myös valvoa, ja avainsana sync kertoo ohjelmalle, että prosessin kaikki sisäiset tehtävät täytyy suorittaa loppuun ennen suorituksen jatkamista. Synkronisointimuuttujat (engl. sychronization variable) tallentavat normaalin sisältönsä lisäksi tilan (full/empty), jonka avulla voidaan vartioida, saako muuttujaan lukea tai kirjoittaa. Synkronointimuuttujien avulla voidaan varmistaa, että ohjelma toimii oikein, jos samoja muuttujia käsitellään useissa tehtävissä rinnakkain. Atomisen muuttujat (engl. atomic

variables) sisältävät joukon operaatioita, jotka voidaan suorittaa prosessorilla yhdellä käskyllä, niin että muut tehtävät eivät voin nähdä tai vaikuttaa keskeneräisiin arvoihin. Begin-avainsanalla aloitetun tehtävän lisäksi Chapel mahdollistaa rakenteellisen tehtävärinnakkaisuuden (engl. strutured task parallelism). Cobegin-avainsanalla voidaan aloittaa yhden lohkon sisällä kaikkien sen rungon sisältämien lausekkeiden rinnakkainen ajo erillisissä tehtävissä. Cobegin ei takaa missä järjestyksessä eri tehtävät suoritetaan tai valmistuvat. Muistinvaraaminen Ohjelman aikana olioita tallennetaan pinotyyppisiin rakenteisiin muistissa ja tietueita paikallisen suorituksen muistitilaan eli pinoon (engl. stack). Chapelissa on mahdollista määritellä paikallisia muistialueita (engl. locales). Näitä muistialueita voi sitten välittää muille tehtäville, jolloin tehtävät voivat käsitellä niitä kuin paikallisia muuttujia. Globaalin näkymän taulukoita muodostetaan paikallisten muistialueiden avulla. Niitä pystytään indeksoimaan paikallisilla domain-indekseillä ja paikalliset domain-indeksit voivat ulottua myös oman normaalin paikallisen muistialueen ulkopuolelle, jolloin saadaan käsiteltyä taulukoiden arvoja myös muiden tehtävien alueilta. Kehityksen kohteet tulevaisuudessa Chapelissa on joitakin kehittämiskohteita. Esimerkiksi virheilmoitusten välittämisessä on vielä ongelmia. Tulevaisuudessa kieleen kehitetään muun muassa työkaluja, joilla voidaan tunnistaa yksittäisiä tehtäviä tai tehtäväryhmiä, ja mahdollisuuksia antaa tehtäviä tietyille ytimille. Lähteitä: http://chapel.cray.com/docs/latest/index.html http://chapel.cray.com/publications/pmfpc-chapel.pdf http://www.cray.com/blog/chapel-productive-parallel-programming/ http://chapel.cray.com/docs/latest/examples/index.html