Chapel este un nou limbaj de programare paralel dezvoltat de Cray Inc. ca parte a condus-DARPA program de înaltă productivitate sistemele informatice (HPCS). Capela este proiectat pentru a îmbunătăți productivitatea de utilizatori de calculatoare high-end în același timp, de asemenea, servind ca model portabil de programare paralelă, care poate fi folosit pe grupuri de mărfuri sau sistemele multicore desktop. Capela se străduiește să îmbunătățească foarte mult programabilitate de calculatoare paralele pe scară largă în timp ce potrivire sau bate performanța și portabilitatea modelelor actuale de programare, cum ar fi MPI.
Aplicația Chapel susține un model de execuție multithreaded prin abstractiuni la nivel înalt pentru paralelism de date, sarcina paralelism, concurenta, si paralelism imbricate. & Nbsp; tipul locale Capela lui permite utilizatorilor să specifice și rațiune despre plasarea de date și sarcini pe o arhitectura țintă pentru pentru a regla pentru localitatea. Chapel susține agregate de date la nivel mondial, cu vedere implementari definite de utilizator, operatiuni pe structuri de date distribuite permite să fie exprimată într-un mod natural. Spre deosebire de multe limbi paralele de nivel superior anterioare, Capela este conceput in jurul unei filozofie multirezoluție, permițând utilizatorilor să scrie cod inițial foarte abstract și apoi se adaugă treptat detaliu până când sunt cât mai aproape de aparatul ca nevoile lor necesită. Chapel susține reutilizarea codului și prototipuri rapide prin design orientat-obiect, tip deducție, și caracteristici de programare generic.
Capela a fost conceput de la primele principii, mai degrabă decât prin extinderea un limbaj existente. Este un bloc structurat limba imperativ, conceput pentru a fi ușor de învățat pentru utilizatorii de C, C ++, Fortran, Java, Perl, Matlab, și alte limbi populare. În timp ce Chapel se bazează pe concepte și sintaxa de mai multe limbi anterioare, caracteristicile sale paralele sunt influențate cel mai direct de ZPL, de înaltă performanță Fortran (HPF), și Cray MTA & trade, / Cray XMT & trade; extensii de C și Fortran
Ce este nou în această versiune:.
- Repere (vezi mai jos pentru detalii)
- Split "def" cuvinte cheie în "proc" (pentru proceduri) și "ITER" (pentru iteratori)
- (a se vedea "$ CHPL_HOME / util / converti-defs --help" ajutor actualizarea codurilor existente)
- adăugat distribuție "replicat" și îmbunătățirea distribuției "Block-ciclic"
- (a se vedea & quot; Standard Distributions & quot; în spec și exemple / primeri / distributions.chpl)
- adăugat straturi de sarcini singur localizare pentru Nano ++ (BSC) și Qthreads (Sandia)
- (a se vedea doc / README.tasks)
- remaniere majoră a semanticii și implementarea gama
- (a se vedea & quot; Modificări semantice / Modificări Chapel Limba & quot; de mai jos pentru detalii)
- suport initial pentru tipurile volatile: bool, Int, uint, real, imag
- (a se vedea doc / note tehnice / README.volatile)
- sprijin pentru consts externe și clase (indicii-to-structs)
- (a se vedea doc / note tehnice / README.extern)
- suport îmbunătățit pentru paralelismul datelor pe Cray XMT
- îmbunătățiri extinse la codurile eșantion din exemple / directorul
- (a se vedea "Coduri de exemplu," de mai jos și exemple / README)
- adăugat majoritatea exemple de cod de la spec la o nouă exemple / directorul
- (a se vedea exemplele / spec / *)
- adăugat o notă tehnică descrie harta domeniu interfața definite de utilizator
- (a se vedea doc / note tehnice / README.dsi)
- actualizări extinse la caietul de sarcini limba
- (a se vedea "Documentație" de mai jos)
- de mai multe îmbunătățiri sarcinile trasate de execuție și straturi de comunicare
- (a se vedea & quot; Runtime Library Modificări & quot; mai jos)
- sintactică / Denumirea Modificările
- Split "def" cuvinte cheie în "proc" (pentru proceduri) și "ITER" (pentru iteratori)
- (a se vedea "$ CHPL_HOME / util / converti-defs --help" ajutor actualizarea codurilor existente)
- redenumite domenii "aritmetice" / matrice a domeniilor "rectangulare" / matrice
- adăugat suport pentru punctul de literali de forma plutitoare "1.e ..."
- (anterior, numai "1e ..." și "1.0e ..." au fost susținute)
- Modificări semantice / Modificări Chapel Limba
- de mai multe îmbunătățiri game (a se vedea "Ranges" capitol în spec limbă):
- adăugat un concept de aliniere pentru a indica un modulo aliniere | mers |
- adăugat un operator "align" și interogare a game pentru a specifica / aliniere interogare
- (de exemplu, "1..10 de 3 align 2 '= & gt;" 2, 5, 8', din 2 == 5 == 8 mod 3)
- == definit pe intervale în funcție de secvențele întregi pe care le generează
- ident definit (R1, R2), pentru a spune daca R1 și R2 sunt semantic identice
- definit "# k" pentru k & lt; 0 în sensul & quot; conta de la sfârșitul intervalului & quot;
- adăugată "în primul rând", "ultima", "alignedLow," metode alignedHigh "la intervale
- (de exemplu, "1..10 de -2 '= & gt; în primul rând == 10, ultimul == 2, alignedLow = 2, alignedHigh = 10)
- adăugat suport pentru o varietate de funcții noi interogare gamă
- (de exemplu, alignLow (), hasFirst (), hasLowBound (), isAligned (), boundsCheck () ...)
- adăugat suport pentru bool volatile, Int, uint, real, și tipuri de imag
- (a se vedea doc / note tehnice / README.volatile)
- adăugat o verificare end-of-file la tipul de fișier
- (de exemplu., "În timp ce! Infile.eof ...")
- eliminat suport pentru tratarea "întoarcerea" din iterator ca "randament"
- (de exemplu, schimbarea "foo iter () {x întoarcerea;}" la "foo iter () {randament x, întoarcerea,} ')
- adăugat suport pentru module cu trimitere fără a "-use' ing le
- (de exemplu, modulul M1 {var x ...} modul M2 {...} M1.x ... acum legal)
- adăugat o interogare callStackSize la tipul locale
- (de exemplu, "here.callStackSize" returneaza dimensiunea stiva apel locale actuale)
- îndepărtat punct și virgulă necesar anterior, de la sfârșitul declarațiilor enum
- (de exemplu, "culorile enum {roșu, albastru, verde}" este acum legal, necesar în prealabil ";")
- adăugat suport pentru o singură virgulă la final, la sfârșitul listelor enum
- (de exemplu, "culorile enum {rosu, albastru, verde,}" este acum legal)
- eliminat suport pentru +/- operatorii pe domenii dreptunghiulare; folosesc traduce ()
- Caracteristici recent implementate
- == implementate /! = Pentru dreptunghiular, asociativ, iar domeniile rare
- Standard Distributions
- adăugat primul-proiect de distribuție "replicat" pentru stocarea datelor redundant
- (a se vedea exemplele / primeri / distributions.chpl)
- îmbunătățită "Block-ciclic", suficientă pentru a pune în aplicare în mod corect HPCC PTRANS și HPL
- (a se vedea exemplele / HPCC / ptrans.chpl, hpl.chpl; exemple / primeri / distributions.chpl)
- redundanță eliminat în specificația iteratori lider între domenii / matrice
- Module standard
- adăugat infinită și NAN constante la modulul Math.chpl
- (a se vedea "Math" de la & quot; Standard Module & quot; în spec limbă)
- adăugat isinf () și isfinite () rutine de testare la modulul Math.chpl
- (a se vedea "Math" de la & quot; Standard Module & quot; în spec limbă)
- adăugat o jumătate de duzină de mai multe rutine pentru modulul GMP.chpl
- Documentation
- adăugat o notă nouă tehnic cu descrierea harta domeniu interfața definite de utilizator
- (a se vedea doc / note tehnice / README.dsi)
- a făcut multe îmbunătățiri la caietul de sarcini limba
- revizuiri majore la capitolul Domenii pentru a îmbunătăți claritatea / precizia
- îmbunătățită și structura unitară a Records și clase capitolele
- revizuiri majore la capitolul Hărți domeniu pentru a îmbunătăți claritatea / precizia
- exemplu numit coduri pentru a oferi trimitere la exemple / spec / programe
- clarificat legalitatea etichetă / pauză / continuare în bucle paralele
- actualizat descrierile citit [ln] / scrie [ln]
- fix unele probleme în domenii de fișier comanda
- reformatat specificația ca un "carte" în LaTeX
- diferite remedieri minore erorilor tipografice / erori
- definiții îmbunătățite / descrieri ale mai multor termeni
- adăugat documentarea locale.name
- și multe alte schimbări ...
- actualizat document de referință rapidă pentru a include def- & gt; proc / schimbare ITER, alinia op .
- reprogramat / reorganizate README.extern să clarifice explicații și să aducă până la data de
- adăugat un README care descrie situația "locală" (doc / note tehnice / README.local)
- adăugat un README descrie tipuri volatile (doc / note tehnice / README.volatile)
- actualizate README.comm-diagnosticare pentru a menționa statistici furcii rapide
- actualizate diverse fișiere README
- Coduri Exemplu
- pus cele mai multe exemple de cod de spec limbă. la un nou spec / subdirector
- îmbunătățit primeri / directorul:
- a adaugat un nou primer pentru utilizarea procedurilor (primeri / procedures.chpl)
- adăugat un primer de bază pentru domenii (primeri / domains.chpl)
- redenumit localele primer pentru locales.chpl și îmbunătățit o
- îmbunătățit primerul distribuții și a adăugat utilizări Block-ciclici și tirajate
- actualizat primerul intervalul (primeri / range.chpl)
- îmbunătățit primerul iteratori (primeri / iterators.chpl)
- îmbunătățit primerul reduceri (primeri / reductions.chpl)
- adăugat getCurrentTime () pentru a amorsa cronometre (primeri / timers.chpl)
- adăugat descrieri de pseudonime tip și tipuri de configurare a variabilelor primer
- (a se vedea primeri / variables.chpl)
- îmbunătățit directorul HPCC / repere
- adăugat primă versiune a HPCC PTRANS a HPCC / director (ptrans.chpl)
- adăugat versiune curată a HPCC HPL pentru HPCC / director (hpl.chpl)
- a adaugat o variante / subdirector la exemple / HPCC să prezinte alte abordări
- adăugat flux-promoted.chpl pentru a arăta utilizarea de promovare în global STREAM Triad
- adăugat ra-cleanloop.chpl pentru a arăta mai curat (dar în prezent mai lent) kernel RA
- imbunatatirea exemple de nivel înalt:
- redenumite existent & quot; Bună ziua, lume & quot; exemple pentru a sugera o ordine de citire logică
- (a se vedea exemplele / salut * .chpl)
- adăugat date de date paralele și distribuite paralele salut, exemple din lumea
- (a se vedea exemplele / hello3-datapar.chpl, exemple / hello4-datapar-dist.chpl)
- adăugat comentarii la diferite salut, exemple din lumea (exemple / salut * .chpl)
- actualizat toate exemplele de semantica lingvistice curente
- folosi 'proc' / 'ITER ", mai degrabă decât" def "
- actualizare pentru a reflecta noi semantica gamă
- Note
- pentru Cray XT / Cray XE, a îmbunătățit aprun și PBS-aprun lansatoarele
- (a se vedea & quot; & quot note Launcher-specific; de mai jos)
- pentru Cray XMT, adăugat suport pentru bucle paralele pe intervale
- pentru Cray XMT, a adăugat generație de noalias pragmas la FORALL variabile bucla
- adăugat suport pentru MareNostrum BSC, inclusiv documente și un lansator special
- (a se vedea doc / platforme / README.marenostrum)
- Launcher-specific note
- adăugat opțiunile de lansare specifice help capacitate
- îmbunătățit propagarea coduri de stare ieșire prin lansatoare
- schimbat lansatoare pentru a sprijini exec bazate pe (mai degrabă decât pe bază de sistem) comenzi
- face lansatoare folosi "deconectare", mai degrabă decât de sistem ("rm") pentru a elimina fișierele temporare
- adăugat un lansator de BSC lui MareNostrum
- număr redus de fișierele temporare folosite pentru a captura de ieșire a "sistemului" comenzi
- aprun îmbunătățiri lansare:
- adăugat un steag --cc a specifica atribuire CPU w / într-un nod
- adăugat un steag q pentru a rula în modul de lansatorul liniștită
- adăugat capacitatea de depanare prin CHPL_LAUNCHER_DEBUG pentru a păstra fișierele tmp jurul
- PBS-aprun imbunatatiri lansatoare:
- adăugat un steag --cc a specifica atribuire CPU w / într-un nod
- adăugat capacitatea de depanare prin CHPL_LAUNCHER_DEBUG pentru a păstra fișierele tmp jurul
- ieșire curățate pentru a scapa de unele tipărire străine
- sprijinul lansator făcut sistemul nostru de testare
- --walltime și steaguri --queue adăugat lansator alternative pentru Mediu. Vars.
- Modificările Compiler
- realizate de imprimare compiler "true" / "fals", în semnături de tip mai degrabă decât 1/0
- adăugat config param "noRefCount" pentru a dezactiva de numărare de referință (se poate scurge de memorie)
- Steaguri Compiler
- adăugat un steag --print-callstack-la-eroare pentru a arăta ceea ce a dus la un apel rău
- adăugat un steag --no-Codegen să săriți generatie de cod și faza leaga
- interoperabilitatea Modificările
- adăugat suport pentru extern C & quot; & quot clase; (Pointer-la-struct tipuri)
- adăugat suport pentru consts externi (a se vedea README.extern)
- Îmbunătățiri mesaj de eroare
- adăugat un avertisment orfani "utilizare" declarațiile afara de module declarate
- (de exemplu, "utilizați M1; modul M2 {}" ar trebui să fie în mod obișnuit "modul M2 {utilizare M1;}")
- face parse-time mesaj de eroare utiliza "numele fișierului: Lineno:" standard format
- a generat un mesaj de eroare pentru referindu-se la un nume de clasă într-o metodă primară
- (de exemplu, "clasa C {def Cm () {...}}" genereaza acum un mesaj de eroare)
- Corecții Bug / noi verificări semantice (de semantică vechi)
- împiedicat tipuri de configurare de la a fi setat folosind steaguri timp de executie de linie de comandă
- fix capacitatea compilatorului de a gestiona sindicate fără câmpuri
- fix reducerile minloc / maxloc să se ocupe de gol game / subranges de valori
- fixat un bug în care a fost ignorat argumentul "calea" pentru constructorii de fișiere
- face sindicatele goale funcționa corect
- fix o problemă de depășire în chunking up game de distribuție / paralelizare
- fix un bug care implică sprijin pentru goale tipuri de înregistrări externe
- fix un bug care implică funcții externe care returnează înregistrări
- fix un bug legat de copierea înregistrărilor externe
- implementarea fix de +/- operatori pe asociativ / domenii rare
- fix un bug în legătură cu module bazate pe nume de fișiere care conțin mai multe "lui.
- Mesaje de eroare adăugat pentru a extinde / exterior / interior pe domenii neregulate
- adăugat o eroare de constructori / destructori cu un tip de returnare specificat
- fix o pereche de bug-uri cu privire la "rapid pe" optimizarea
- a adaugat o verificare împotriva construirii clase fără a specifica domeniile generice
- Modificările ambalat
- adăugat sintaxă cod de evidențiere pentru GNU sursă-a evidenția
- (a se vedea etc / sursă-a evidenția / README)
- emacs îmbunătățite colorat suport pentru versiunea 22.x
- (a se vedea etc / emacs / README)
- noutatile vim colorat sintaxă, pentru a reflecta noua "proc" / cuvinte cheie "ITER
- (a se vedea etc / vim / README)
- adăugat un script pentru convertirea "utilizarea" codurilor existente def "la" "/" proc "ITER
- (vezi $ CHPL_HOME / util / converti-defs)
- exemple multirealm eliminate și documentația pentru moment
- terți Software Modificările
- actualizat la versiunea 1.16.1 GASNet
- adăugat copii ale BSC lui Nano ++ si Sandia Qthreads
- (a se vedea terță parte / README)
- voi-instalat după pas pentru GASNet care se schimbă căi absolute la relativă
- PVM îndepărtat pentru moment din cauza instabilității
- Runtime Library Modificările
- adăugat straturi de sarcini singur localizare pentru Nano ++ (BSC) și Qthreads (Sandia)
- de mai multe îmbunătățiri stratul tasking de arhivare:
- adăugat o nouă interfață pentru a avea chpl_main apel stratul tasking ()
- schimbat tasking funcție de inițializare să ia args maxThreadsPerLocale / callStackSize
- adăugat o capacitate randament sarcină la interfața strat tasking
- cod de execuție îmbunătățită, pentru a evita folosirea de sincronizare vars înainte de inițializare tasking
- îndepărtat formă macro-zată de tasking interfață; folosind nume standard de schimb
- denumire unificat al tuturor rutine strat sarcină chpl_sync _ * () și chpl_task _ * ()
- cerință îndepărtat pentru a pune în aplicare interfata variabil unic
- încetarea mutat de fire din strat tasking FIFO pentru pthreads filetat
- implementarea simplificată a variabilelor de sincronizare în stratul pthread filetat
- mutat responsabilitatea pentru numărul de fire de la tasking FIFO la pthread filetat
- de mai multe îmbunătățiri stratul de comunicare de arhivare:
- restructurat interfața de comunicare pentru a sprijini argumentele lungime / tip
- adăugat o interfață pentru non-blocare ajunge operațiunile de comunicator. Interfata li>
- unificat toate la distanță ajunge operațiuni de a utiliza CHPL_COMM_GET () macro
- refactored / redenumite anteturile de interfață de comunicare
- Sistem de testare
- îmbunătățit foarte mult de testare de performanță și capabilități grafice
- (a se vedea comentariile de la partea din față a start_test pentru documentare)
- îmbunătățit sprijinul sistemului de testare pentru curățarea după sine
- capacitatea de adăugat pentru a evita folosind orice indirectare de stdin
- adăugat o opțiune de a oferi o opțiune de prediff la nivel de sistem
- adăugat capacitatea de a utiliza caracteristica de expirare native un lansator, mai degrabă decât Python
- îmbunătățit modul în care sistemul de testare ucide un test care ori din
- fixat un bug în care fișierele .preexec lucrat numai dacă "." a fost in calea ta li>
- Intern
- adăugat un steag compilator --break-la-id pentru dezvoltatori pentru a localiza nodul AST creează
- organizarea mai bună a conținutului util / ind
- schimbat modul numere de versiune sunt calculate / afisate pentru utilizatorii SVN bazate
- adăugat suport pentru Comportamentul față de sarcini / thread specifice cod modul
- adăugat capacitatea de a imprima contează AST alocate între fiecare trecere
- a adaugat un nou alias gdb la compilator --gdb: "loc" imprimă un nod AST de locație
- implementarea îmbunătățit de pragmas / steaguri pentru a evita cazurile de eroare
- îndepărtat mai multe cazuri de comparații șir inutile în compilatorul
- eliminat utilizarea de erori de CHPL_TASKS și CHPL_THREADS ca simboluri preprocesor
- adăugat documentare bestPractices pentru dezvoltatori (nu sunt incluse în comunicat)
- schimbat munging internă a "=" și "==" la "ASSIGN" și 'este egală ", respectiv
- adăugat un steag dezvoltator --print-id-la-eroare pentru a imprima ID AST pe erori
- îmbunătățit strictețea C ++ prototip de verificare
- adăugat acorduri contributoare externe copac SVN (nu în presă)
- adăugat o noțiune de tipuri interne utilizate de compilator, dar nu de utilizator
-Platformă specifică
Comentariile nu a fost găsit