blob: d4929938f19174411181fca38dcf77513a6743be [file] [log] [blame]
#include "caffe2/contrib/gloo/common.h"
#include "caffe2/core/logging.h"
#include "caffe2/core/tensor.h"
#include <gloo/transport/tcp/device.h>
#if defined(GLOO_USE_IBVERBS) && GLOO_USE_IBVERBS
#include <gloo/transport/ibverbs/device.h>
#endif
namespace caffe2 {
namespace gloo {
void signalFailure(Blob* status_blob, std::exception& /* unused */) {
auto* res = BlobGetMutableTensor(status_blob, CPU);
res->Resize(1);
res->template mutable_data<int32_t>()[0] = 1;
}
std::shared_ptr<::gloo::transport::Device> createDevice(
const createDeviceAttr attr) {
if (attr.transport == "tcp") {
::gloo::transport::tcp::attr tcpAttr;
if (attr.interface.size() > 0) {
tcpAttr.iface = attr.interface;
}
return ::gloo::transport::tcp::CreateDevice(tcpAttr);
} else if (attr.transport == "ibverbs") {
#if defined(GLOO_USE_IBVERBS) && GLOO_USE_IBVERBS
::gloo::transport::ibverbs::attr ibverbsAttr;
ibverbsAttr.port = 1;
ibverbsAttr.index = 0;
if (attr.interface.size() > 0) {
ibverbsAttr.name = attr.interface;
}
return ::gloo::transport::ibverbs::CreateDevice(ibverbsAttr);
#else
CAFFE_THROW(
"Gloo was not compiled with ibverbs support. ",
"Please recompile with -DUSE_IBVERBS=1.");
#endif
}
CAFFE_THROW("Invalid transport: ", attr.transport);
}
} // namespace gloo
} // namespace caffe2