An Overview of ZPL

ZPL is a new array programming language designed for engineering and scientific programs that would previously have been written in C or C++. Its design goals were machine independence and high performance, therefore, ZPL programs run fast on both sequential and parallel computers. ZPL programs are usually very simple and easy to write. This is because it is "implicitly parallel," i.e. the programmer does NOT express the parallelism.

ZPL's implicit parallelism is a very useful feature. Because the programmer does not have to figure out how to split the data to be suitable for parallel processing, ZPL programs are shorter and easier to write than those written in C with third-party library calls. Let me give an example: Mercury Computers makes a powerful machine that does parallel processing. Writing a classic parallel program, "matrix multiplication" is actually fairly complex when using Mercury's native calls. However, writing the program in ZPL is quite simple.

There is, of course, a tradeoff for this functionality. This tradeoff is remarkably similar to that of Java and C++. ZPL is easier to write, but is slower than the equivalent written with Mercury's RACE libraries.

This slowdown would seem to spell the death of ZPL. In the parallel processing world, speed is everything. However, I do believe there is a chance that ZPL could become widely used. Program execution speed is critical, but also important is development time. Development in ZPL is far easier and faster than in competing languages. One possible solution for complex parallel programming could be to build a prototype in ZPL, get it working, and then convert it to the system's native calls. This might seem like too much additional work, however, this development process is used frequently in the Java/C++ realm. Sometimes it's not about being the best solution, it's being the first one available.


ZPL Fact Sheet

  • Name. ZPL is short for the Z (level) Programming Language; see discussion of programming model, above.
  • Origin. ZPL was designed and implemented by the Orca Project of the Computer Science and Engineering Department at the University of Washington.
  • Type. ZPL uses the array abstraction to implement a dataparallel programming model; it is a standalone subset of Advanced ZPL.
  • History. Implementation of the ZPL compiler began in March 1993. It generated code approximately 15 months later. ZPL will be officially "released" soon.
  • Approach. ZPL is translated into a conventional abstract syntax tree representation on which program analysis and optimizations are performed. ANSI C code is generated as the object code. This C program is machine independent, and implements certain operations in abstract form. This code is compiled using the native C compiler on the target machine with custom libraries. In this second compilation the abstract operations are customized to the specific platform.
  • Team. The creators of ZPL are: Brad Chamberlain, Sung-Eun Choi, E Christopher Lewis, Calvin Lin, Jason Secosky, Larry Snyder, and W. Derrick Weathersby with assistance from Ruth Anderson, A.J. Bernheim, Marios Dikaiakos, George Forman, and Kurt Partridge.
  • Funding. The foundational research for the ZPL compiler was funded in part by the Office of Naval Research N00014-89-J-1368. The compiler itself was funded in part by the Advanced Research Projects Agency, N00014-92-J-1824. Present funding is from ARPA.


Source of information: http://www.cs.washington.edu/research/zpl/