This project addresses the problem of writing parallel programs that are simultaneously clear, portable, and efficient. The initial focus is on MIMD multiprocessors, including various shared memory and distributed memory architectures. The approach separates the expression of a parallel algorithm from the machine-dependent details that are necessary to achieve good performance. A programmer first writes an algorithm in a classic, explicitly parallel style assuming there is unlimited concurrency and that objects are shared. This basic algorithm is then annotated with scheduling directives and data mappings to yield an efficient program. The annotations thus affect the performance of the algorithm on a given architecture but they do not affect its correctness. A new, object-oriented programming language that supports this method has been developed. This project is refining the language and approach by examining additional parallel computing problems, conducting experiments to assess its performance, and determining the extent to which this approach can be applied to existing languages and to SIMD architectures.