MPI can be used on shared and distributed memory systems - which is one of its' strengths. The OpenMP spec only defines it to be used on shared memory systems. However, Intel has done an implementation (Cluster OpenMP) that allows it to be used on distributed memory systems. There are many aspects that one can debate as to whether or not OpenMP or MPI is better to use on shared memory architectures. However, the one major benefit OpenMP has, is that you can incrementally add it to a sequential program and still have the sequential program as it was before. With MPI you would have to restructure the sequential program to add the calls and you now have a modified version.