ComputationalRadiationPhysics / graybat

Graph Approach for Highly Generic Communication Schemes Based on Adaptive Topologies :satellite:
Other
8 stars 4 forks source link
communication mpi zero-overhead-abstraction zeromq

Graybat

Graph Approach for Highly Generic Communication Schemes Based on Adaptive Topologies

Descriptio

Graybat is a C++ library that presents a graph-based communication approach, which enables a mapping of algorithms to communication patterns and further a mapping of these communication patterns to varying hardware architectures. Therefore, a flexible and configurable communication approach for parallel and distributed applications. These mappings are established as an intermediate layer between an application and communication libraries and are dynamically adptable during run-time.

The graybat API is currently unstable.

Documentation

Have a look at the documentation that is available here or skim through the examples or test cases to have a quick start into graybat.

Referencing

Graybat is a scientific project. If you present and/or publish scientific results that used graybat, you should set this as a reference.

Software License

Graybat is licensed under the LGPLv3+. Please refer to our LICENSE.md

Project Organization

The project is organized in a couple of subdirectories.

Dependencies

Mandatory

Optional

Roadmap

Installation

System Installion

Installation into the operating system libery path e.g. to /usr/lib/graybat:

git clone https://github.com/ComputationalRadiationPhysics/graybat.git
cd graybat && mkdir build && cd build
cmake -DCMAKE_INSTALL_DIR=/usr ..
sudo make install

Package Install

Usage as Library

CMAKE-Configfile

Graybat is a header only library so nothing has to be build. The most easy way to include graybat into your application is to use the shiped CMAKE-Configfile, that can be used if your project is built with CMake. If graybat was not installed to a path where CMake usually has a look then you can instruct CMake to find graybat by adding the absolute path of graybat to your CMAKE_PREFIX_PATH, by setting the path within CMake find_package():

find_package(graybat 1.0.0 REQUIRED CONFIG PATHS <ABSOLUTE-PATH-TO-GRAYBAT>)

or by setting the graybat_DIR:

set(graybat_DIR <ABSOLUTE-PATH-TO-GRAYBAT>)

The CMAKE-Configfile of graybat provides the CMAKE variables ${graybat_INCLUDE_DIRS}, ${graybat_LIBRARIES}, ${graybat_GENERATED_FILES}, and ${graybat_DEFINITIONS}. Where ${graybat_INCLUDE_DIRS} contains all header files included by graybat,${graybat_LIBRARIES} contains all libraries used by graybat, ${graybat_GENERATED_FILES} contains all generated files that need to be compiled with the target, and ${graybat_DEFINITIONS} contains compile time definitions which can be used to toggle policies. The following is a an example of how to embed graybat into your CMakeLists.txt

 find_package(graybat REQUIRED CONFIG)
 include_directories(SYSTEM ${graybat_INCLUDE_DIRS})
 set(LIBS ${LIBS} ${graybat_LIBRARIES})

 add_executable(myTarget main.cpp ${graybat_GENERATED_FILES})
 target_compile_definitions(myTarget PRIVATE ${graybat_DEFINITIONS})
 target_link_libraries(signaling ${LIBS})

Finally, the application can use graybat e.g. #include <graybat/graybat.hpp>.

Compiling Tests/Examples

Benchmarks

There exist benchmarks for graybat:

make benchmark
./signaling_server&
mpiexec -n 1 ./benchmark

Run on (4 X 2493.8 MHz CPU s)
2016-11-14 19:35:09
Benchmark                                       Time           CPU Iterations
-----------------------------------------------------------------------------
meassureSingleMessageSendBmpi/1             25316 ns      25311 ns      27279
meassureSingleMessageSendBmpi/10            25822 ns      25823 ns      27864
meassureSingleMessageSendBmpi/100           30467 ns      30230 ns      24802
meassureSingleMessageSendBmpi/1000          50411 ns      50008 ns      14374
meassureSingleMessageSendBmpi/9.76562k     247629 ns     247566 ns       2933
meassureSingleMessageSendBmpi/97.6562k    2113853 ns    2113794 ns        329
meassureSingleMessageSendBmpi/976.562k   23066718 ns   22867737 ns         31
meassureSingleMessageSendZmq/1             348564 ns     176029 ns       3992
meassureSingleMessageSendZmq/10            549071 ns     184522 ns       3930
meassureSingleMessageSendZmq/100           363852 ns     188720 ns       3640
meassureSingleMessageSendZmq/1000          418714 ns     209411 ns       3220
meassureSingleMessageSendZmq/9.76562k      606935 ns     394426 ns       1776
meassureSingleMessageSendZmq/97.6562k     2511339 ns    2256736 ns        307
meassureSingleMessageSendZmq/976.562k    23033162 ns   22561309 ns         31

Predefined Targets

Tested Compilers

Related Material

Authors