predictor --zmqThe following C++ file can be used for communication:
#include <iostream>
#include <zmq.hpp>
#include <msgpack.hpp>
int main() {
zmq::context_t context(1);
zmq::socket_t socket(context, ZMQ_PUSH);
socket.bind("tcp://127.0.0.1:5555");
// Create a MessagePack object to hold the data
msgpack::sbuffer buffer;
msgpack::packer<msgpack::sbuffer> packer(&buffer);
// Pack the data into the MessagePack buffer
packer.pack_map(4);
packer.pack("ranks");
packer.pack(8);
// packer.pack("floatData");
// packer.pack(3.14);
// Pack the arrays
packer.pack("b");
packer.pack_array(5);
packer.pack(3.0);
packer.pack(0.0);
packer.pack(3.0);
packer.pack(0.0);
packer.pack(3.0);
packer.pack("ts");
packer.pack_array(5);
packer.pack(1.0);
packer.pack(2.0);
packer.pack(3.0);
packer.pack(4.0);
packer.pack(5.0);
packer.pack("te");
packer.pack_array(5);
packer.pack(5.0);
packer.pack(6.0);
packer.pack(7.0);
packer.pack(8.0);
packer.pack(9.0);
zmq::message_t message(buffer.size());
memcpy(message.data(), buffer.data(), buffer.size());
socket.send(message, zmq::send_flags::none);
return 0;
}ftio and predictor can be used with TMIO. This is still under development.
For communication, a port is used. From the sender side (TMIO), the port can be specified in a local file called ftio_port. The file contains just a single line, for example:
tcp://127.0.0.1:XXXXFrom the receiver side (ftio), the port can be specified by --zmq_source flag.
First, compile TMIO with ZMQ. Go to the build folder in TMIO and execute:
make zmqAfterwards, just execute the program
mpirun -np 8 ./test_run For ftio, simply launch the script with:
ftio --zmq --zmq_source tmio -m write_async -f 100For predictor, execute:
predictor --zmq --zmq_source tmio -m write_async -f 100