Program transformation and runtime support for threaded MPI execution on shared-memory machines (ACM transactions on programming languages and systems, 2000)