A major challenge for computing science, and for the computing industry, in the twenty first century is to determine the extent to which general purpose parallel computing can be achieved. The goal is to deliver both scalable parallel performance and architecture independent parallel software. Performance is often cited as the main reason for the current push towards parallel computers.
Performance is hard to achieve and requires programming time and programmer expertise.
Expertise is necessary to understand the characteristics of the machine and the application. Time is necessary to find the best ways to exploit them by transforming and specializing the code. Portability across machines and operating systems also requires programming time and programming expertise. It may be easier to achieve this with scientific applications rather than with interactive software but it always requires code generalization. Portability is attained by ignoring the target architectures as much as possible.