Me@0: Me@0:
Me@0:Me@0:
Me@0:
EQNLang is an extensible language for parallel programming. It has a visual Me@0: interface, allows extensions of both its visual syntax and its semantics, and Me@0: it allows automated symbolic manipulation of code to specialize it to specific Me@0: parallel hardware, for high performance.
Me@0:EQNLang has a visual interface, in which any SVG graphic can be used as a syntactic Me@0: element in the language. In fact, while developing code, most applications will Me@0: add their own syntax as part of the application. This new syntax can then be Me@0: shared for others to use.
Me@0:The source format of the language is a syntax graph. There is no text form Me@0: of the code. This is what enables new syntax to be arbitrary graphics. The grammar Me@0: of the language is embedded in the editing process. One is only allowed to build Me@0: valid syntax graphs. Another consequence of using a syntax graph as the source Me@0: form is that properties can be attached to new commands defined inside applications. Me@0: This is the key to the portable parallelism.
Me@0:Performance portability of parallel code requires the code to be transformable Me@0: to fit specific hardware well. High performance can only be achieved when the Me@0: patterns in the code fit closely to the patterns in the hardware. Such transformations Me@0: go beyond what compilers typically carry out; they are more like what a symbolic Me@0: math package like MAPLE or MathCAD or Mathmatica perform.
Me@0:To enable such transforms for parallel code, the parallel code must provide Me@0: the same thing that equations provide to the math package: properties. It is Me@0: properties such as associativity, distributivity, and so forth that allow the Me@0: automated symbolic manipulation. EQNLang follows this pattern of providing properties Me@0: of commands. Each primitive command of the language comes pre-tagged with its Me@0: properties, and the end-user who defines a new syntactic element states which Me@0: properties their new element has. For some properties, additional code is provided Me@0: that is a "plugin" to the symbolic manipulator. This additional code Me@0: performs the manipulation on the source-graph.
Me@0:The result is a high-level declarative language that is highly productive for Me@0: programmers, yet high performance across parallel hardware.
Me@0: Me@0: Me@0: