This repository contains a standalone application specifically designed to test and benchmark the Multiscale Universal Interface code coupling library.
It provides a complete environment to produce artificial benchmarking scenarios for the library that mimic realistic applications. Each instance of the testing application can be coupled to each other and each can also perform its own MPI-based workload to simulate real problems. Each instance can be coupled to another, with each having a simple Cartesian grid from which data can be transferred to/from an MUI interface. Multiple interfaces can be specified per instance and the region where data should be sent or received can be specified individually also.
The source code is dual-licensed under either the GNU General Purpose License v3 or Apache License v2.0, copies of both should have been provided with this source code.
This code is provided with CMake build files and has no external dependencies other than MUI. It relies on having access to a working CMake-derived MUI installation, therefore before compiling this application, please first review the main MUI library repository and consider installing using CMake. If you prefer to use the MUI library directly then you will need to first modify the provided CMakeLists.txt file to include a direct path to the library's location.
This software assumes the use of MUI 2.0 or higher.
Assuming the use of CMake to build then the following parameters should be considered:
- CMAKE_PREFIX_PATH=[path] - Set the location of MUIConfig.cmake file from your local MUI installation
- CMAKE_INSTALL_PREFIX=[path] - Set the path to install the library, otherwise the system default will be used
- CMAKE_BUILD_TYPE=Release/Debug/.. - Set the compilation type (Release is recommended when using this tool for benchmarking purposes)
This code uses MUI's ability to supply an external configuration header file that is used during compilation to set the attributes of the interfaces created. The included file MUI_config.h can be edited to alter the nature of the created interfaces, however the testing tool itself assumes the use of a 3D interface, so please retain this.
This code is an MPI-enabled benchmarking tool that couples to itself, it can be used to test the performance and parallel scalability of the MUI library on most computing platforms.
This can range from understanding the complexities of the communication patterns generated by a specific coupling-type, through to how massively-parallel coupled implementations will work on a specific supercomputer.
All options are set for each instance of the application in a configuration file that is loaded via an input parameter, therefore an example MPI MPMD launch command with 3 instances might look like:
mpirun -n 1000 ./MUI_Testing [config_1_path] : -n 500 ./MUI_Testing [config_2_path] : -n 100 ./MUI_Testing [config_3_path]
Each config file has an associated MUI interface definition file, the path to this is set inside the config file.
A complete example is provided in the "example" folder, along with scripts to run the case.
Important: This tool supports the use of 3D domain decomposition for its Cartesian grid structure locally per instance, this is done using a function equivalent to the MPI_Dims_create() and is therefore efficient for problems like this, however to produce an equivalence to complex using unstructured grids and graph-based decomposition, it will be necessery to consider whether the existing approach is sufficient.