#pragma once #include #include #include #include #include #include #include namespace c10d { using namespace std::chrono_literals; class TORCH_API ControlCollectives : public torch::CustomClassHolder { public: virtual void barrier( const std::string& key, std::chrono::milliseconds timeout = 5min, bool block = true) = 0; virtual void broadcastSend( const std::string& key, const std::vector& data, std::chrono::milliseconds timeout = 5min) = 0; virtual std::vector broadcastRecv( const std::string& key, std::chrono::milliseconds timeout = 5min) = 0; virtual void gatherSend( const std::string& key, const std::vector& data, std::chrono::milliseconds timeout = 5min) = 0; virtual std::vector> gatherRecv( const std::string& key, const std::vector& data, std::chrono::milliseconds timeout = 5min) = 0; virtual std::vector scatterSend( const std::string& key, const std::vector>& data, std::chrono::milliseconds timeout = 5min) = 0; virtual std::vector scatterRecv( const std::string& key, std::chrono::milliseconds timeout = 5min) = 0; virtual std::vector> allGather( const std::string& key, const std::vector& data, std::chrono::milliseconds timeout = 5min) = 0; virtual int64_t allSum( const std::string& key, int64_t data, std::chrono::milliseconds timeout = 5min) = 0; }; } // namespace c10d