Vector and superscalar processors provide intstruction-level parallelism, which is best exploited by applications with intensive operations on arrays. Such applications can be written in a serial programming language, such as C or Fortran 77, and complied by dedicated optimizing compilers performing some specific loop optimizations. This approach supports modular, portable, and reliable programming. The efficiency and portable efficiency are also supported but only for a limited class of programs.
Array libraries, such as the BLAS, allow the programmers to avoid the use of dedicated compilers performing sophisticated optimizations. Instead, the programmers express operations on arrays directly, using calls to carefully implemented subroutines for the array operations. This approach also supports modular, portable, and reliable programming as well as limited efficiency and portable efficiency because it excludes global optimization of combined array operations.
Parallel languages, such as Fortran 90 or C[ ], combine advantages of the first and second approaches. They allow the programmer to explicitly express operations on arrays, and they therefore do not require sophisticated algorithms that recognize parallelizable loops. They can perform global optimization of combined array operations. And, finally, unlike existing array libraries, they support general-purpose programming. Thus general-purpose parallel extensions of C and Fortran 77 support modular, reliable, and efficiently portable programming for vector and superscalar architectures.