[[PageOutline]] = Message Passing Interface; MPI = * A standardized and portable message-passing system * Not a new language ---- Library of functions * Scales to over 100k processors * Runs on distributed memory cluster systems. * Portable * Explicit parallel programming (unlike OpenMP) * No shared variables (unlike OpenMP) == MPI’s Execution model == * All processors execute same program, but with difference data. (no fork & join) * Variable on each are all private. * Data that must be shared is explicitly send between processors. [[Image(MPIexecModel.png)]] == Distributed Memory Cluster == [[Image(CypressNodes.png, 60%)]] Data sent over Network: * Ethernet * 10M~1GBit/Sec * !InfiniBand * 100GBit~ * MPI on SMP machine * You can run MPI program on SMP (Symmetric Multiprocessing) machine. * Variables are not shared (all private). == Software Distribution == * [[http://www.open-mpi.org|OpenMPI]] * [[http://software.intel.com/en-us/intel-mpi-library|Intel MPI Library]] * [[http://www.lam-mpi.org|LAM/MPI]] * [[http://www.mpich.org|MPICH]] * [[http://mvapich.cse.ohio-state.edu/index.shtml|MVAPICH]] * [[http://msdn.microsoft.com/en-us/library/bb524831%28v=vs.85%29.aspx|MS MPI]] == Brief Tutorials for Programming Languages == * [[cypress/Programming/Cexamples/Mpi|C]] * [[cypress/Programming/CppExamples/MpiCpp|C++]] * [[cypress/Programming/FortranExamples/MpiFortran|Frotran]]