Introduction

 

EQNLang is an extensible language for parallel programming. It has a visual interface, allows extensions of both its visual syntax and its semantics, and it allows automated symbolic manipulation of code to specialize it to specific parallel hardware, for high performance.

EQNLang has a visual interface, in which any SVG graphic can be used as a syntactic element in the language. In fact, while developing code, most applications will add their own syntax as part of the application. This new syntax can then be shared for others to use.

The source format of the language is a syntax graph. There is no text form of the code. This is what enables new syntax to be arbitrary graphics. The grammar of the language is embedded in the editing process. One is only allowed to build valid syntax graphs. Another consequence of using a syntax graph as the source form is that properties can be attached to new commands defined inside applications. This is the key to the portable parallelism.

Performance portability of parallel code requires the code to be transformable to fit specific hardware well. High performance can only be achieved when the patterns in the code fit closely to the patterns in the hardware. Such transformations go beyond what compilers typically carry out; they are more like what a symbolic math package like MAPLE or MathCAD or Mathmatica perform.

To enable such transforms for parallel code, the parallel code must provide the same thing that equations provide to the math package: properties. It is properties such as associativity, distributivity, and so forth that allow the automated symbolic manipulation. EQNLang follows this pattern of providing properties of commands. Each primitive command of the language comes pre-tagged with its properties, and the end-user who defines a new syntactic element states which properties their new element has. For some properties, additional code is provided that is a "plugin" to the symbolic manipulator. This additional code performs the manipulation on the source-graph.

The result is a high-level declarative language that is highly productive for programmers, yet high performance across parallel hardware.

back