This is an experiment
I have to write a paper on supporting parallelism in programming languages for the parallel algorithms class, and thought that I should node my homework.
In doing so, I hope to contribute to the database, since parallel languages do not seem to have comprehensive coverage in E2. I also hope to benefit by getting feedback from the community.
update May 10, 2001; My paper has been submitted, but I'll probably work on expanding these some more.
So without further ado:
Parallel Programming Languages
There are many ways to write a program for a parallel application. On one end of the spectrum, one can write a sequential program, and let a parallelizing compiler do all the parallelization. While this purely implicit model provides the most convenience for the programmer, who does not have to think about parallelization at all, it has been shown to be highly inefficient, as the the best parallel algorithm may not be the same as the best sequential algorithm.
On the other hand, it is possible that the programmer explicitly codes the parallelism himself. In writing explicit parallel code, one can work in many levels of abstraction.
At the lowest level of abstraction, a programmer can use the native low level code libraries of the specific parallel computer he is writing the appication on, such that communication primitives and synchronization are written explicitly. While this approach may yield the fastest results given a specific architecture, it is a difficult task for the programmer, and may not be good for portability.
Message passing libraries, such as MPI and PVM provide a higer level of abstraction. Using these is currently the most popularly used method of writing parallel applications. Other languages provide still higher levels of abstraction, allowing the compiler, rather than the programmer, to decide on many issues regarding the parallelization of code. This paper aims to explore the issues and ideas behind current research in supporting parallelism in programming languages. This will be done by a survey of key languages that support parallelism inherently, and setting them against a backgound of explicit parallel programming libraries, especially MPI.
1. Introduction (above)
2. Low Level Abstraction
3. Imperative Parallel Languages
3.a High Performance Fortran
(wu by Oeq1st1
4. Parallel Functional Languages
5. Logic Languages: Prolog