71 lines
2.5 KiB
Markdown
71 lines
2.5 KiB
Markdown
# mpi_test
|
|
|
|
Various standalone C++ MPI tests/examples/benchmarks.
|
|
|
|
If CUDA is detected, additional binaries can be built.
|
|
|
|
| name | Kind | Reqs. | Ranks | Description |
|
|
|--------------------|-----------|----------|-------|-------------|
|
|
|[hello-world][1] | Test | MPI | 1+ | an MPI hello-world |
|
|
|[one-sided][2] | Test | MPI | 2 | one-sided communication |
|
|
|[one-sided-gpu][3] | Test | MPI+CUDA | 2 | one-sided communication on GPU buffer |
|
|
|[persistent][4] | Benchmark | MPI | 2 | ping-pong time for persistent Send/Recv |
|
|
|[persistent-gpu][5] | Benchmark | MPI+CUDA | 2 | ping-pong time for persistent Send/Recv on GPU buffer|
|
|
|[send-recv][6] | Benchmark | MPI | 2 | ping-pong time for Send/Recv |
|
|
|[send-recv-gpu][7] | Benchmark | MPI+CUDA | 2 | ping-pong time for Send/Recv on GPU buffer|
|
|
|
|
[1]: https://github.com/cwpearson/mpi_test/blob/master/hello_world.cpp
|
|
[2]: https://github.com/cwpearson/mpi_test/blob/master/one_sided.cpp
|
|
[3]: https://github.com/cwpearson/mpi_test/blob/master/one_sided_gpu.cpp
|
|
[4]: https://github.com/cwpearson/mpi_test/blob/master/persistent.cpp
|
|
[5]: https://github.com/cwpearson/mpi_test/blob/master/persistent_gpu.cpp
|
|
[6]: https://github.com/cwpearson/mpi_test/blob/master/send_recv.cpp
|
|
[7]: https://github.com/cwpearson/mpi_test/blob/master/send_recv_gpu.cpp
|
|
|
|
## Build
|
|
```
|
|
mkdir build && cd build
|
|
cmake ..
|
|
make
|
|
```
|
|
|
|
CMake will print the detected MPI environment.
|
|
Confirm it is what you expect.
|
|
For example:
|
|
```
|
|
-- MPI_VERSION:
|
|
-- MPI_CXX_COMPILER: [...]/bin/mpicxx
|
|
-- MPI_CXX_COMPILE_OPTIONS: -pthread
|
|
-- MPI_CXX_COMPILE_DEFINITIONS:
|
|
-- MPI_CXX_INCLUDE_DIRS: [...]/include
|
|
-- MPI_CXX_LIBRARIES: [...]/lib/libmpiprofilesupport.so;[...]/lib/libmpi_ibm.so
|
|
-- MPI_CXX_LINK_FLAGS: -pthread
|
|
```
|
|
## Examples
|
|
|
|
### Summit
|
|
|
|
* 1 node: `jsrun -n 1 ./persistent`
|
|
* 2 nodes: `jsrun -n 2 -r 1 -a 1 ./persistent`
|
|
* 2 nodes w/GPU: `jsrun --smpi="-gpu" -n 2 -r 1 -g 1 ./send-recv-gpu`
|
|
|
|
## Run all tests
|
|
|
|
`run-all.sh` attempts to discover certain environments automatically.
|
|
You can always override the detected flags yourself if you want.
|
|
|
|
```
|
|
./run-all.sh | grep 'PASS\|FAIL'
|
|
```
|
|
|
|
If any tests fails, you can re-run them individually.
|
|
|
|
## Run individual tests
|
|
|
|
Execute any binary you want using `mpirun`, or whatever is appropriate for your platform.
|
|
|
|
|
|
## Notes on specific platforms
|
|
|
|
Some Open MPIs use `long long` for their datatypes, which is not a part of ANSI C++ (`-ansi`).
|