Graph Approach for Highly Generic Communication Schemes Based on Adaptive Topologies
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.
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.
Graybat is a scientific project. If you present and/or publish scientific results that used graybat, you should set this as a reference.
Graybat is licensed under the LGPLv3+. Please refer to our LICENSE.md
The project is organized in a couple of subdirectories.
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
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>
.
git clone https://github.com/computationalradiationphysics/graybat.git
cd graybat
mkdir -p build
cd build
export CXX=[g++,clang++]
cmake ..
make [target]
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
example: All example applications.
test : Build, unit and integration test.
benchmark : Benchmarks
signaling : Signaling server for zeroMQ communication policy.
doc: Build documentation in doc/
.
clean: Cleanup build directory.