| #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 |