NESL(ID:1740/nes001)


Fine-grained, functional, data-parallel language with nested data structures and nested parallelism. Includes a built-in parallel data type and parallel operations on sequences. Loosely based on ML. Useful for parallel algorithms on sparse matrices and graphs."
NESL is a parallel language developed at Carnegie Mellon by the SCandAL project. It integrates various ideas from the theory community (parallel algorithms), the languages community (functional languages) and the system's community (many of the implementation techniques). The most important new ideas behind NESL are

Nested data parallelism: this feature offers the benefits of data parallelism, concise code that is easy to understand and debug, while being well suited for irregular algorithms, such as algorithms on trees, graphs or sparse matrices (see the examples above or in our library of algorithms).
A language based performance model: this gives a formal way to calculated the work and depth of a program. These measures can be related to running time on parallel machines.
The main emphasis in the design of NESL was to make parallel programming easy and portable. Algorithms are typically significantly more concise in NESL than in most other parallel programming languages. Furthermore the code closely resembles high-level pseudocode. Here is a comparison of a parallel quicksort in NESL and MPI (10 lines of code vs. 1700). Of course this comes at the cost of placing more responsibility on the compiler and runtime system for achieving good efficiency.




People:
Structures:
Related languages
ML => NESL   Based on
NESL => BSML   Influence
NESL => CVL   Intermediate language for
NESL => DartCVL   Intermediate language for
NESL => UnCvl   Intermediate language for
NESL => VCODE   Intermediate language for

References:
  • Blelloch, Guy "NESL: A Nested Data- Parallel Language" CMU-CS-93-129, April 1993. view details External link: CiteSeer Abstract: This report describes Nesl, a strongly-typed, applicative, data-parallel language. Nesl is intended to be used as a portable interface for programming a variety of parallel and vector supercomputers, and as a basis for teaching parallel algorithms. Parallelism is supplied through a simple set of data-parallel constructs based on vectors, including a mechanism for applying any function over the elements of a vector in parallel, and a broad set of parallel functions that manipulate vectors.
  • Blelloch, G. E., Chatterjee, S., Hardwick, J. C., Sipelstein, J., and Zagha, M. Implementation of a portable nested data-parallel language. Journal of Parallel and Distributed Computing 21, 1 (Apr. 1994), 4-14. view details External link: CiteSeer Extract: NESL and Nested Parallelism
    NESL and Nested Parallelism
    NESL is a high-level language designed to allow simple
    and concise descriptions of nested data-parallel programs
    [8]. It is strongly typed and applicative (sideeffect-
    free). Sequences are the primitive parallel data
    type and the language provides a large set of built-in
    parallel sequence operations. Parallelism is achieved
    through the ability to apply functions in parallel to each
    element of a sequence. The application of a function
    over a sequence is specified using a set-like notation similar
    to set-formers in SETL [37] and list-comprehensions
    in Miranda [44] and Haskell [26]. For example, the NESL
    expression
    {negate(a): a in [3,-4,-9,5] I a < 4}
    can be read as ?in parallel, for each a in the sequence
    [3, -4, -9, 51 such that a is less than 4, negate a?.
    The expression returns [-3, 4, 9] . The parallelism is
    applied both to the expression to the left of the colon (:)
    and to the subselection to the right of the pipe ( I). This
    parallel subselection can be implemented with packing
    techniques [5]. NESL also supplies a set of parallel functions
    that operate on sequences as a whole. Figure 2
    lists several of these functions; a full list can be found
    in the NESL manual [8]. These are similar to operations
    found in other data-parallel languages.
  • Blelloch, Guy E.; Sipelstein, Jay; Hardwick, Jonathan C.; Zagha, Marco "NESL User's Manual" 1995 view details
  • Blelloch G. and Greiner. J. "A provable time and space efficient implementation of NESL" view details External link: CiteSeer Abstract: In this paper we prove time and space bounds for the implementation of the programming language Nesl on various parallel machine models. Nesl is a sugared typed -calculus with a set of array primitives and an explicit parallel map over arrays. Our results extend previous work on provable implementation bounds for functional languages by considering space and by including arrays.
          in Proceedings of the ACM SIGPLAN International Conference on Functional Programming, May 1996. view details
  • Skillicorn, David B. and Talia, Domenico "Models and languages for parallel computation" pp123-169 view details
          in [ACM] ACM Computing Surveys (CSUR) 30(2) June 1998 view details
    Resources