seanhalle@6: seanhalle@6: seanhalle@6: Introduction seanhalle@6: seanhalle@6: seanhalle@6: seanhalle@6: seanhalle@6: seanhalle@6:

 

seanhalle@6:

Introduction

seanhalle@6:

 

seanhalle@6:

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

seanhalle@6:

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

seanhalle@6:

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

seanhalle@6:

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

seanhalle@6:

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

seanhalle@6:

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

seanhalle@6:

back

seanhalle@6: seanhalle@6: