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.
Parallel processors make these two goals harder to achieve. On the one hand, parallelism makes efficient performance harderto achieve than sequential performance because many more factors may slow down the computation. On the other hand, parallelism has not been really exploited long enough to design successful standards and for manufacturers to apply them. Without portability of software, these machines may be too expensive to program. Though portability and performance are important for parallel processing, they are often in conflict.