Different with OpenMP which focuses on multiple threads in one process, MPI defines how multiple processes can collaborate with each other. In this post, I use Open MPI
on Arch Linux
to do a simple test.
The “Hello World” program is from here, build and run it on one node, not a cluster containing many nodes:
$ mpirun mpi_hello_world
Hello world from processor tesla-p100, rank 16 out of 52 processors
Hello world from processor tesla-p100, rank 34 out of 52 processors
Hello world from processor tesla-p100, rank 35 out of 52 processors
......
Check the CPU information:
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 104
On-line CPU(s) list: 0-103
Thread(s) per core: 2
Core(s) per socket: 26
Socket(s): 2
NUMA node(s): 2
......
Although there are 2
physical CPUs in the system, the mpirun
only utilizes 1
CPU. Modify the program to output process ID:
......
#include <unistd.h>
......
printf("Hello world from process %d, processor %s, rank %d out of %d processors\n",
getpid(), processor_name, world_rank, world_size);
......
This time you can make sure different processes are spawned:
$ mpirun mpi_hello_world
Hello world from process 52528, processor tesla-p100, rank 21 out of 52 processors
Hello world from process 52557, processor tesla-p100, rank 31 out of 52 processors
Hello world from process 52597, processor tesla-p100, rank 43 out of 52 processors
......
P.S., if you run mpirun
as root, please add --allow-run-as-root
option:
# mpirun --allow-run-as-root mpi_hello_world