Chapel ist eine neue parallele Programmiersprache, die von Cray Inc. im Rahmen des DARPA-LED High Productivity Computing Systems Programm (HPCS) entwickelt. Chapel wurde entwickelt, um die Produktivität von High-End-Computer-Nutzer, während auch als portable parallele Programmiermodell, das auf Rohstoffcluster oder Desktop-Multicore-Systemen verwendet werden können, das zu verbessern. Chapel ist bestrebt, erheblich verbessern die Programmierbarkeit von großen Parallelrechnern beim Zusammenbringen oder das Schlagen der Leistung und Mobilität der aktuellen Programmiermodelle wie MPI.
Die Kapelle App unterstützt eine Multithread-Ausführungsmodell über High-Level-Abstraktionen für Datenparallelität, Task-Parallelität, Parallelität und verschachtelten Parallelismus. & Nbsp; Chapels locale Typ können Anwender festlegen, und die Vernunft über die Platzierung von Daten und Aufgaben auf einem Ziel-Architektur, um zu stimmen für Ortschaft. Chapel unterstützt globale Sichtdaten Aggregate mit benutzerdefinierten Implementierungen und ermöglicht Operationen auf verteilten Datenstrukturen, um auf natürliche Weise zum Ausdruck gebracht werden. Im Gegensatz zu vielen früheren geordneten parallel Sprachen wird Chapel um einen Multi-Resolution-Philosophie konzipiert und ermöglicht es Benutzern, zunächst zu schreiben sehr abstrakt Code und dann inkrementell hinzufügen, näher, bis sie so nah an der Maschine, wie ihre Bedürfnisse erfordern. Chapel unterstützt die Wiederverwendung von Code und Rapid Prototyping über objektorientiertes Design, Typinferenz und Funktionen für generische Programmierung.
Kapelle wurde von Grund auf als durch eine vorhandene Sprache, die sich entwickelt. Es ist ein Gebot blockstrukturierte Sprache, entworfen leicht für Benutzer von C, C ++, Fortran, Java, Perl, Matlab, und andere populäre Sprachen zu lernen. / Cray XMT & trade; während Kapelle baut auf Konzepte und Syntax von vielen früheren Sprachen, werden seine Funktionen parallel am unmittelbarsten von ZPL, High-Performance Fortran (HPF), und der Cray MTA & trade beeinflusst; Erweiterungen zu C und Fortran
Was ist neu in dieser Pressemitteilung:.
- Highlights (siehe unten)
- split 'def' Schlüsselwort in "proc" (für Verfahren) und "iter" (für Iteratoren)
- (siehe '$ CHPL_HOME / util / convert-defs --help' um Hilfe Aktualisierung bestehender Codes)
- hinzugefügt "repliziert" Vertrieb und verbesserte 'Block-Cyclic' Verteilung
- (siehe & ldquor; Standard-Distributionen & quot; in spec und Beispiele / Primer / distributions.chpl)
- hinzugefügt Single-locale Aufgabe Schichten für Nanos ++ (BSC) und Qthreads (Sandia)
- (siehe doc / README.tasks)
- Groß Überarbeitung Bereich Semantik und Implementierung
- (siehe & quot; Semantic Changes / Änderungen Chapel Sprache & quot; unten für Detail)
- Die erste Unterstützung für volatile Typen: bool, int, uint, real, imag
- (siehe doc / technischen Hinweisen / README.volatile)
- Unterstützung für extern consts und Klassen (Zeiger-to-Strukturen)
- (siehe doc / technischen Hinweisen / README.extern)
- verbesserte Unterstützung für Datenparallelität auf der Cray XMT
- umfangreiche Verbesserungen an den Probencodes im examples / Verzeichnis
- (siehe "Beispiel-Codes 'unter und Beispiele / README)
- hinzugefügt die Codebeispiele aus dem spec auf eine neue Beispiele / directory
- (siehe Beispiele / spec / *)
- hat ein technischer Hinweis Beschreibung der benutzerdefinierten Domain-Karte Schnittstelle
- (siehe doc / technischen Hinweisen / README.dsi)
- umfangreiche Aktualisierungen der Sprachspezifikation
- (siehe "Dokumentation" unten)
- eine Reihe von Verbesserungen an den Laufzeit Tasking und Kommunikationsschichten
- (siehe & quot; Runtime Library Changes & quot; unten)
- Syntaktische / Namensänderungen
- split 'def' Schlüsselwort in "proc" (für Verfahren) und "iter" (für Iteratoren)
- (siehe '$ CHPL_HOME / util / convert-defs --help' um Hilfe Aktualisierung bestehender Codes)
- umbenannt 'arithmetische' domains / Arrays zu "rechteckige" Domänen / Arrays
- Unterstützung für Fließkomma-Literale der Form '1.e ... "
- (vorher, nur '1e ... "und" 1.0e ...' wurden unterstützt)
- Semantic Changes / Änderungen Chapel Sprache
- verschiedene Verbesserungen, die Bereiche (siehe "Ranges" Kapitel in der Sprache spec):
- hat ein Konzept der Ausrichtung, um eine Ausrichtungs Modulo zeigen | Schritt |
- fügte eine "align" Betreiber und Abfrage, um Bereiche zu / query Ausrichtung festlegen
- (zB '1..10 von 3 align 2' = & gt; '2, 5, 8' seit 2 == == 5 8, mod 3)
- definiert == auf Bereiche im Hinblick auf die Folgen ganzer Zahlen sie erzeugen
- definierten ident (R1, R2) zu sagen, ob R1 und R2 sind semantisch identisch
- definierte '# k' für k & lt; 0 dahin & quot; zu zählen vom Ende des Bereichs & quot;
- hinzugefügt 'first', 'last', 'alignedLow,' alignedHigh "Methoden, um Bereiche
- (zB '1..10 von -2' = & gt; ersten == 10, last == 2, alignedLow = 2, alignedHigh = 10)
- Unterstützung für eine Vielzahl von neuen Bereich Abfragefunktionen
- (zB alignLow (), hasFirst (), hasLowBound (), isAligned (), boundsCheck () ...)
- Unterstützung für volatile bool, int, uint, real, und imag Typen
- (siehe doc / technischen Hinweisen / README.volatile)
- hinzugefügt eine End-of-Datei Scheck an den Dateityp
- (z. B. 'während! Infile.eof ...')
- entfernt die Unterstützung für die Behandlung von "Rückkehr" in iterator als "Ertrag"
- (zB Veränderung "iter foo () {return x;} 'bis' iter foo () {x Ausbeute; return;})
- zusätzliche Unterstützung zu verweisen Module ohne ersten 'use'-ing sie
- (zB Modul M1 {var x ...} Modul M2 {... M1.x ...} ist jetzt legal)
- soeben einen callStackSize Abfrage mit den Lokalisierungs-Typ
- (zB, gibt 'here.callStackSize' den Call-Stack Größe des aktuellen Gebietsschemas)
- entfernt die zuvor erforderlichen Semikolon aus dem Ende des ENUM-Deklarationen
- (zB 'enum {Farben rot, blau, grün}' ist jetzt legal; zuvor erforderlich ';')
- Unterstützung für ein einzelnes Komma am Ende der Aufzählungslisten
- (zB 'enum {Farben rot, blau, grün,}' ist jetzt legal)
- entfernt die Unterstützung für +/- Betreiber auf rechteckigen Domänen; benutzen translate ()
- neu implementierten Funktionen
- implementiert == /! = Für rechteckige, assoziativ und spärlich Domänen
- Standard Distributions
- hat einen ersten Entwurf der "Replizierte 'Verteilung zum Speichern von Daten redundant
- (siehe Beispiele / Primer / distributions.chpl)
- verbesserte 'Block-Cyclic', die ausreicht, um korrekt umzusetzen HPCC PTRANS und HPL
- (siehe Beispiele / HPCC / ptrans.chpl, hpl.chpl; Beispiele / Primer / distributions.chpl)
- entfernt Redundanz in Spezifikation Führer Iteratoren zwischen Domänen / Arrays
- Standardmodule
- hinzugefügt INFINITY und NAN Konstanten in die Math.chpl Modul
- (siehe "Math" unter & quot; Standardmodule & quot; in Sprache spec)
- hinzugefügt isinf () und isfinite () Testroutinen an den Math.chpl Modul
- (siehe "Math" unter & quot; Standardmodule & quot; in Sprache spec)
- hinzugefügt ein halbes Dutzend mehr Routinen auf die GMP.chpl Modul
- Dokumentation
- hat eine neue technische Mitteilung beschreibt die benutzerdefinierte Domain-Karte Schnittstelle
- (siehe doc / technischen Hinweisen / README.dsi)
- machte viele Verbesserungen an der Sprachspezifikation
- großen Revisionen der Domains Kapitel zur Verbesserung der Klarheit / Genauigkeit
- verbessert und vereinheitlichte Struktur der Rekorde und Klassen Kapitel
- größeren Revisionen an den Domain Karten Kapitel zur Verbesserung der Klarheit / Genauigkeit
- mit dem Namen Beispiel-Codes, um Querverweis auf Beispiele liefern / spec / Programme
- Klärung der Rechtmäßigkeit der label / Pause / weiter in parallelen Schleifen
- aktualisiert die Beschreibungen lesen [ln] / Schreiben [ln]
- Einige Probleme in Dateifelder der Bestellung
- formatiert die Spezifikation als "Buch" in LaTeX
- verschiedene kleinere Korrekturen der Tippfehler / Fehler
- verbesserte Definitionen / Beschreibungen mehrerer Begriffe
- hinzugefügt Dokumentation locale.name
- und viele andere Veränderungen ...
- aktualisiert Schnellreferenzdokuments DEF- & gt umfassen; proc / iter Wechsel, richten op .
- umgeschrieben / reorganisiert README.extern, um Erklärungen zu klären und bringen up-to-date
- hat ein README die "lokale" Angaben dazu (doc / technischen Hinweisen / README.local)
- hat ein README beschreibt flüchtigen Typen (doc / technischen Hinweisen / README.volatile)
- aktualisiert README.comm Diagnose zur schnellen Gabel Statistiken erwähnen
- aktualisiert verschiedenen Readme-Dateien
- Beispiel Codes
- platziert die meisten Codebeispiele aus der Sprache spec. zu einem neuen spec / Unterverzeichnis
- verbessert die Primer / Verzeichnis:
- hat ein neues Primer zur Verwendung von Verfahren (Primer / procedures.chpl)
- soeben einen Grund Grundierung für Domänen (Primer / domains.chpl)
- umbenannt die locales Grundierung locales.chpl und verbesserte es
- verbessert die Ausschüttungen Grundierung und Mehrblock Zyklische und replizierte Anwendungen
- Aktualisierung der Bereich Primer (Primer / range.chpl)
- verbessert die Iteratoren Primer (Primer / iterators.chpl)
- verbessert die Kürzungen Primer (Primer / reductions.chpl)
- hinzugefügt GetCurrentTime (), um die Timer-Primer (Primer / timers.chpl)
- hinzugefügt Beschreibungen von Typ-Aliasnamen und Konfigurationstypen, Variablen Primer
- (siehe Primer / variables.chpl)
- verbesserte HPCC / Benchmarks Verzeichnis
- aufgenommen erste Version des HPCC PTRANS auf HPCC / directory (ptrans.chpl)
- hinzugefügt Reiniger Version HPCC HPL auf HPCC / directory (hpl.chpl)
- soeben einen Varianten / -Unterverzeichnis auf Beispiele / HPCC zu anderen Ansätzen zeigen
- Mehrstrom-promoted.chpl zu nutzen, die Förderung der globalen STREAM Triad zeigen
- hinzugefügt ra-cleanloop.chpl sauberere zeigen (aber noch langsamer) RA-Kernel
- verbesserte Top-Level-Beispiele:
- umbenannt bestehenden & quot; Hallo, Welt & quot; Beispiele, um eine logische Lesereihenfolge vorschlagen
- (siehe Beispiele / hallo * .chpl)
- hinzugefügt Daten parallelen und verteilten Daten parallel Hallo, Welt Beispiele
- (siehe Beispiele / hello3-datapar.chpl Beispiele / hello4-datapar-dist.chpl)
- Kommentare hinzugefügt, um die verschiedenen hallo, Welt Beispiele (Beispiele / hallo * .chpl)
- aktualisiert alle Beispiele, die aktuelle Sprache Semantik
- verwenden "proc" / "iter" und nicht "def"
- Update auf neue Reihe Semantik spiegeln
- Plattformspezifische Hinweise
- für Cray XT / Cray XE, verbessert die aprun und PBS-aprun Werfer
- (siehe & quot; Launcher spezifischen Hinweise & quot; unten)
- für Cray XMT, Unterstützung für parallele Schleifen über Bereiche
- für Cray XMT, hinzugefügt Generation noalias Pragmas zu forall Schleifenvariablen
- Unterstützung für BSC Marenostrum einschließlich Dokumentation und einer speziellen Launcher
- (siehe doc / Plattformen / README.marenostrum)
- Launcher spezifischen Hinweise
- hinzugefügt launcher spezifischen Optionen, um die Fähigkeit --help
- verbesserte Ausbreitung der Exit-Status-Codes durch Werfer
- geändert Werfer zu unterstützen exec-basierte (und nicht systembasierten) Befehle
- gemacht Werfer verwenden "unlink" statt System ('rm'), um temporäre Dateien zu entfernen
- hat ein Startprogramm für BSC Marenostrum
- reduzierte Anzahl von temporären Dateien zur Ausgabe von "System" zu erfassen Befehle
- aprun launcher Verbesserungen:
- soeben einen --cc Flag auf CPU-Zuordnung festlegen w / in einem Knoten
- soeben einen -q um das Startprogramm im stillen Modus ausgeführt
- hinzugefügt debug Fähigkeit über CHPL_LAUNCHER_DEBUG zu tmp-Dateien um halten
- pbs-aprun launcher Verbesserungen:
- soeben einen --cc Flag auf CPU-Zuordnung festlegen w / in einem Knoten
- hinzugefügt debug Fähigkeit über CHPL_LAUNCHER_DEBUG zu tmp-Dateien um halten
- aufgeräumt Ausgabe in irgendeiner Fremddruck loswerden
- gemacht Launcher Unterstützung unseres Testsystems
- hinzugefügt --walltime und --queue Fahnen als Alternativen zu env Werfer. vars.
- Compiler Änderungen
- machte den Compiler print 'true' / 'false' in Art Signaturen statt 1/0
- hinzugefügt Config param 'noRefCount' zu Referenzzählung deaktivieren (möglicherweise ein Speicherleck)
- Compiler-Flags
- soeben einen --print-Callstack-on-Fehler-Flag, um zu zeigen, was führte zu einem schlechten Ruf
- soeben einen --no-codegen Flagge, um den Code-Generierung und die Verknüpfung Phase überspringen
- Die Interoperabilität Änderungen
- Unterstützung für extern C & quot; Klassen & quot; (Zeiger auf Strukturtypen)
- Unterstützung für extern consts (siehe README.extern)
- Fehlermeldung Verbesserungen
- hinzugefügt eine Warnung verwaiste "Verwendung" Aussagen außerhalb erklärt Module
- (zB 'verwenden M1; M2 Modul {}' sollte in der Regel 'Modul M2 {use M1;}' sein)
- gemacht parse-time Fehlermeldung die Standard 'Dateiname: lineno:' Format
- erzeugt eine Fehlermeldung für die Bezugnahme auf einen Klassennamen in eine primäre Methode
- (zB 'class C {def Cm () {...}}' erzeugt nun eine Fehlermeldung)
- Bug Fixes / New Semantic Checks (für alte Semantik)
- verhindert Konfigurationstypen von der Verwendung von Ausführungszeit Befehlszeilen Flags
- Fest des Compilers Fähigkeit, Gewerkschaften ohne Felder zu behandeln
- fixiert die MINLOC / MAXLOC Vergünstigungen leer Bereiche / Teilbereiche von Werten zu behandeln
- einen Fehler in dem der "Pfad" Argument Dateibauer wurde ignoriert Fest
- gemacht leer Gewerkschaften korrekt funktionieren
- Festüberlauf Problem in Chunking up Bereiche für Vertrieb / Parallelisierung
- Ein Fehler wurde behoben mit Unterstützung für leere extern Satztypen
- Ein Fehler wurde behoben mit extern Funktionen, die Datensätze zurück
- wurde ein Fehler behoben, um das Kopieren von externen Datensätzen bezogen
- Fest Umsetzung +/- Betreiber auf assoziative / spärlich Domänen
- Ein Fehler im Zusammenhang mit Dateinamen-basierten Modulnamen mehrere 'enthält, befestigt ist.
- hinzugefügt Fehlermeldungen zeigen / Außen / Innen auf unregelmäßigen Domänen
- Mehr einen Fehler für Konstruktoren / Destruktoren mit einer bestimmten Rückgabetyp
- Fest ein Paar Fehler in Bezug auf die "Fast auf 'Optimierung
- fügte eine Prüfung gegen den Bau Klassen ohne Angabe von generischen Felder
- Verpackung Änderungen
- hinzugefügt Syntax-Highlighter-Code für GNU Source-Highlight
- (siehe etc / source-highlight / README)
- verbesserte emacs Färbung Unterstützung für Version 22.x
- (siehe etc / emacs / README)
- Aktuelles zu vim Syntax-Einfärbung, neue 'proc' spiegeln / "iter" Keywords
- (siehe etc / vim / README)
- hat ein Skript für die Umwandlung von "Verwendung" def bestehenden Codes "auf" iter "/" proc "
- (siehe $ CHPL_HOME / util / convert-defs)
- entfernt multirealm Beispiele und Dokumentation für den Augenblick
- Drittanbieter-Software-Änderungen
- Aktualisierung auf Version 1.16.1 GASNET
- hinzugefügt Kopien BSC Nanos ++ und Sandia Qthreads
- (siehe Dritt / README)
- einen Beitrag zu installieren Schritt für GASNET die absolute Pfade zu relativ ändert
- entfernt PVM vorerst aufgrund der Instabilität
- Runtime Library Änderungen
- hinzugefügt Single-locale Aufgabe Schichten für Nanos ++ (BSC) und Qthreads (Sandia)
- eine Reihe von Verbesserungen an den Laufzeit tasking Schicht:
- hat eine neue Schnittstelle für die mit dem Tasking Schicht Anruf chpl_main ()
- geändert Tasking-init-Funktion, um maxThreadsPerLocale / callStackSize args nehmen
- hinzugefügt eine Aufgabe Ertragsfähigkeit auf die tasking-Schicht-Schnittstelle
- verbesserte Laufzeitcode zu vermeiden, mit Sync vars vor dem Initialisieren Tasking
- entfernt Makro-ized Form Tasking-Schnittstelle; mit Standard-Namen statt
- einheitliche Namensgebung aller Aufgabe Schicht Routinen chpl_sync _ * () und chpl_task _ * ()
- entfernt Anforderung, die einzelne Variable Schnittstelle implementieren
- bewegt Beendigung des Threads aus dem FIFO-Tasking Schicht pthreads Einfädeln
- vereinfachte Umsetzung der Sync-Variablen in der pthread threading Schicht
- bewegt Verantwortung für Fadenzahlen von FIFO-Tasking auf threading pthread
- eine Reihe von Verbesserungen an den Laufzeit-Kommunikationsschicht:
- restrukturiert die Kommunikationsschnittstelle zu Länge / art Argumente unterstützt
- hinzugefügt eine Schnittstelle für nicht-blockierend bekommen Operationen an den comm. Schnittstelle
- Unified alle Fern bekommen Operationen CHPL_COMM_GET () Makro verwenden
- Refactoring / umbenannt die Kommunikationsschnittstelle Header
- Testing System
- erheblich verbessert die Performance-Tests und Grafikfunktionen
- (siehe Anmerkungen auf der Vorderseite des START_TEST für Dokumentation)
- verbesserte Unterstützung des Testsystems für Aufräumarbeiten nach sich selbst
- zusätzliche Möglichkeit zu vermeiden, mit jede Umleitung von stdin
- eine Option hinzugefügt, um einen systemweiten prediff Option stellen
- zusätzliche Möglichkeit, einheimische Timeout-Funktion eines Trägerrakete statt Pythons verwenden,
- verbessert, wie das Testsystem tötet einen Test, dass das Zeitlimit
- wurde ein Fehler behoben, bei dem .preexec Dateien funktionierte nur, wenn '.' war in den Weg
- Internal
- soeben einen --break-on-id Compiler-Flag für Entwickler zu finden AST-Knoten erstellt
- verbesserte Organisation der util / Verzeichnisinhalt
- verändert die Art, Versionsnummern berechnet werden / für SVN-basierten Benutzern angezeigt
- Unterstützung für aufgaben- / thread-spezifisches Modul Code
- fügte eine Fähigkeit, die AST Zahlen zwischen jedem Durchgang zugeordnet drucken
- hat ein neues gdb alias zu Compiler --gdb: 'loc' druckt ein AST-Knotens Lage
- stark verbesserte Umsetzung der Pragmas / Fahnen Fehlerfälle zu vermeiden
- entfernt mehrere Instanzen unnötige Vergleiche von Zeichenfolgen in den Compiler
- entfernt fehleranfällig Verwendung CHPL_TASKS und CHPL_THREADS als Präprozessorsymbole
- hinzugefügt BestPractices Dokumentation für Entwickler (nicht in Version enthalten)
- geändert internen munging von '=' und '==' bis 'ASSIGN' und 'gleich' bzw.
- soeben einen --print-id-on-Entwickler Fehler-Flag auf AST ID auf Fehler drucken
- verbessert die Strenge der C ++ Prototyp-Prüfung
- hinzugefügt externen Bewerters Vereinbarungen auf den SVN-Baum (nicht in Release)
- soeben einen Begriff der internen Typen vom Compiler verwendet, aber nicht der Benutzer
Kommentare nicht gefunden