[llvm] dfd74db - [ORC] Move SimpleRemoteEPCServer::Dispatcher into OrcShared.

Lang Hames via llvm-commits llvm-commits at lists.llvm.org
Fri Oct 8 13:46:39 PDT 2021


Hi Arthur,

Thanks for the fix!

-- Lang.

On Fri, Oct 8, 2021 at 11:43 AM Arthur Eubanks <aeubanks at google.com> wrote:

> In file included from
> ../../llvm/lib/ExecutionEngine/Orc/Shared/OrcRTBridge.cpp:9:
> In file included from
> ../../llvm/include/llvm/ExecutionEngine/Orc/Shared/OrcRTBridge.h:18:
> ../../llvm/include/llvm/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.h:161:8:
> error: no type named 'condition_variable' in namespace 'std'
>   std::condition_variable OutstandingCV;
>   ~~~~~^
> 1 error generated.
>
>
>
> Fixed in dd384d28140.
>
> On Fri, Oct 8, 2021 at 11:30 AM Lang Hames via llvm-commits <
> llvm-commits at lists.llvm.org> wrote:
>
>>
>> Author: Lang Hames
>> Date: 2021-10-08T11:29:57-07:00
>> New Revision: dfd74db9813b0c7c64038c303726ba43f335e07a
>>
>> URL:
>> https://github.com/llvm/llvm-project/commit/dfd74db9813b0c7c64038c303726ba43f335e07a
>> DIFF:
>> https://github.com/llvm/llvm-project/commit/dfd74db9813b0c7c64038c303726ba43f335e07a.diff
>>
>> LOG: [ORC] Move SimpleRemoteEPCServer::Dispatcher into OrcShared.
>>
>> Renames SimpleRemoteEPCServer::Dispatcher to SimpleRemoteEPCDispatcher and
>> moves it into OrcShared. SimpleRemoteEPCServer::ThreadDispatcher is
>> similarly
>> moved and renamed to DynamicThreadPoolSimpleRemoteEPCDispatcher.
>>
>> This will allow these classes to be reused by SimpleRemoteEPC on the
>> controller
>> side of the connection.
>>
>> Added:
>>
>>
>> Modified:
>>     llvm/include/llvm/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.h
>>
>> llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.h
>>     llvm/lib/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.cpp
>>     llvm/lib/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.cpp
>>     llvm/tools/lli/ChildTarget/ChildTarget.cpp
>>
>> llvm/tools/llvm-jitlink/llvm-jitlink-executor/llvm-jitlink-executor.cpp
>>
>> Removed:
>>
>>
>>
>>
>> ################################################################################
>> diff  --git
>> a/llvm/include/llvm/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.h
>> b/llvm/include/llvm/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.h
>> index f3dcb0fd8ba62..03a6710fccda8 100644
>> --- a/llvm/include/llvm/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.h
>> +++ b/llvm/include/llvm/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.h
>> @@ -15,6 +15,7 @@
>>  #define LLVM_EXECUTIONENGINE_ORC_SHARED_SIMPLEREMOTEEPCUTILS_H
>>
>>  #include "llvm/ADT/ArrayRef.h"
>> +#include "llvm/ADT/FunctionExtras.h"
>>  #include "llvm/ADT/SmallVector.h"
>>  #include "llvm/ADT/StringMap.h"
>>  #include "llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h"
>> @@ -138,6 +139,29 @@ class FDSimpleRemoteEPCTransport : public
>> SimpleRemoteEPCTransport {
>>    std::atomic<bool> Disconnected{false};
>>  };
>>
>> +/// Dispatches calls to runWrapper.
>> +class SimpleRemoteEPCDispatcher {
>> +public:
>> +  virtual ~SimpleRemoteEPCDispatcher();
>> +  virtual void dispatch(unique_function<void()> Work) = 0;
>> +  virtual void shutdown() = 0;
>> +};
>> +
>> +#if LLVM_ENABLE_THREADS
>> +class DynamicThreadPoolSimpleRemoteEPCDispatcher
>> +    : public SimpleRemoteEPCDispatcher {
>> +public:
>> +  void dispatch(unique_function<void()> Work) override;
>> +  void shutdown() override;
>> +
>> +private:
>> +  std::mutex DispatchMutex;
>> +  bool Running = true;
>> +  size_t Outstanding = 0;
>> +  std::condition_variable OutstandingCV;
>> +};
>> +#endif
>> +
>>  struct RemoteSymbolLookupSetElement {
>>    std::string Name;
>>    bool Required;
>>
>> diff  --git
>> a/llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.h
>> b/llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.h
>> index 38c413db2e947..dd721203410b4 100644
>> ---
>> a/llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.h
>> +++
>> b/llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.h
>> @@ -37,28 +37,6 @@ class SimpleRemoteEPCServer : public
>> SimpleRemoteEPCTransportClient {
>>  public:
>>    using ReportErrorFunction = unique_function<void(Error)>;
>>
>> -  /// Dispatches calls to runWrapper.
>> -  class Dispatcher {
>> -  public:
>> -    virtual ~Dispatcher();
>> -    virtual void dispatch(unique_function<void()> Work) = 0;
>> -    virtual void shutdown() = 0;
>> -  };
>> -
>> -#if LLVM_ENABLE_THREADS
>> -  class ThreadDispatcher : public Dispatcher {
>> -  public:
>> -    void dispatch(unique_function<void()> Work) override;
>> -    void shutdown() override;
>> -
>> -  private:
>> -    std::mutex DispatchMutex;
>> -    bool Running = true;
>> -    size_t Outstanding = 0;
>> -    std::condition_variable OutstandingCV;
>> -  };
>> -#endif
>> -
>>    class Setup {
>>      friend class SimpleRemoteEPCServer;
>>
>> @@ -68,7 +46,9 @@ class SimpleRemoteEPCServer : public
>> SimpleRemoteEPCTransportClient {
>>      std::vector<std::unique_ptr<ExecutorBootstrapService>> &services() {
>>        return Services;
>>      }
>> -    void setDispatcher(std::unique_ptr<Dispatcher> D) { S.D =
>> std::move(D); }
>> +    void setDispatcher(std::unique_ptr<SimpleRemoteEPCDispatcher> D) {
>> +      S.D = std::move(D);
>> +    }
>>      void setErrorReporter(unique_function<void(Error)> ReportError) {
>>        S.ReportError = std::move(ReportError);
>>      }
>> @@ -166,7 +146,7 @@ class SimpleRemoteEPCServer : public
>> SimpleRemoteEPCTransportClient {
>>    enum { ServerRunning, ServerShuttingDown, ServerShutDown } RunState;
>>    Error ShutdownErr = Error::success();
>>    std::unique_ptr<SimpleRemoteEPCTransport> T;
>> -  std::unique_ptr<Dispatcher> D;
>> +  std::unique_ptr<SimpleRemoteEPCDispatcher> D;
>>    std::vector<std::unique_ptr<ExecutorBootstrapService>> Services;
>>    ReportErrorFunction ReportError;
>>
>>
>> diff  --git
>> a/llvm/lib/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.cpp
>> b/llvm/lib/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.cpp
>> index 62f4ff8a34090..37d57c0d2d1bf 100644
>> --- a/llvm/lib/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.cpp
>> +++ b/llvm/lib/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.cpp
>> @@ -241,5 +241,32 @@ void FDSimpleRemoteEPCTransport::listenLoop() {
>>    C.handleDisconnect(std::move(Err));
>>  }
>>
>> +SimpleRemoteEPCDispatcher::~SimpleRemoteEPCDispatcher() {}
>> +
>> +#if LLVM_ENABLE_THREADS
>> +void DynamicThreadPoolSimpleRemoteEPCDispatcher::dispatch(
>> +    unique_function<void()> Work) {
>> +  {
>> +    std::lock_guard<std::mutex> Lock(DispatchMutex);
>> +    if (!Running)
>> +      return;
>> +    ++Outstanding;
>> +  }
>> +
>> +  std::thread([this, Work = std::move(Work)]() mutable {
>> +    Work();
>> +    std::lock_guard<std::mutex> Lock(DispatchMutex);
>> +    --Outstanding;
>> +    OutstandingCV.notify_all();
>> +  }).detach();
>> +}
>> +
>> +void DynamicThreadPoolSimpleRemoteEPCDispatcher::shutdown() {
>> +  std::unique_lock<std::mutex> Lock(DispatchMutex);
>> +  Running = false;
>> +  OutstandingCV.wait(Lock, [this]() { return Outstanding == 0; });
>> +}
>> +#endif
>> +
>>  } // end namespace orc
>>  } // end namespace llvm
>>
>> diff  --git
>> a/llvm/lib/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.cpp
>> b/llvm/lib/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.cpp
>> index b23d5670b2509..dba46ecdb7b0c 100644
>> --- a/llvm/lib/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.cpp
>> +++ b/llvm/lib/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.cpp
>> @@ -24,33 +24,6 @@ namespace orc {
>>
>>  ExecutorBootstrapService::~ExecutorBootstrapService() {}
>>
>> -SimpleRemoteEPCServer::Dispatcher::~Dispatcher() {}
>> -
>> -#if LLVM_ENABLE_THREADS
>> -void SimpleRemoteEPCServer::ThreadDispatcher::dispatch(
>> -    unique_function<void()> Work) {
>> -  {
>> -    std::lock_guard<std::mutex> Lock(DispatchMutex);
>> -    if (!Running)
>> -      return;
>> -    ++Outstanding;
>> -  }
>> -
>> -  std::thread([this, Work = std::move(Work)]() mutable {
>> -    Work();
>> -    std::lock_guard<std::mutex> Lock(DispatchMutex);
>> -    --Outstanding;
>> -    OutstandingCV.notify_all();
>> -  }).detach();
>> -}
>> -
>> -void SimpleRemoteEPCServer::ThreadDispatcher::shutdown() {
>> -  std::unique_lock<std::mutex> Lock(DispatchMutex);
>> -  Running = false;
>> -  OutstandingCV.wait(Lock, [this]() { return Outstanding == 0; });
>> -}
>> -#endif
>> -
>>  StringMap<ExecutorAddr> SimpleRemoteEPCServer::defaultBootstrapSymbols()
>> {
>>    StringMap<ExecutorAddr> DBS;
>>    rt_bootstrap::addTo(DBS);
>>
>> diff  --git a/llvm/tools/lli/ChildTarget/ChildTarget.cpp
>> b/llvm/tools/lli/ChildTarget/ChildTarget.cpp
>> index cf1b03a141c5e..a9e330984ef90 100644
>> --- a/llvm/tools/lli/ChildTarget/ChildTarget.cpp
>> +++ b/llvm/tools/lli/ChildTarget/ChildTarget.cpp
>> @@ -54,7 +54,7 @@ int main(int argc, char *argv[]) {
>>
>>  ExitOnErr(SimpleRemoteEPCServer::Create<FDSimpleRemoteEPCTransport>(
>>            [](SimpleRemoteEPCServer::Setup &S) -> Error {
>>              S.setDispatcher(
>> -
>> std::make_unique<SimpleRemoteEPCServer::ThreadDispatcher>());
>> +
>> std::make_unique<DynamicThreadPoolSimpleRemoteEPCDispatcher>());
>>              S.bootstrapSymbols() =
>>                  SimpleRemoteEPCServer::defaultBootstrapSymbols();
>>              S.services().push_back(
>>
>> diff  --git
>> a/llvm/tools/llvm-jitlink/llvm-jitlink-executor/llvm-jitlink-executor.cpp
>> b/llvm/tools/llvm-jitlink/llvm-jitlink-executor/llvm-jitlink-executor.cpp
>> index 7100c274b988b..b1ba6a9e6bac3 100644
>> ---
>> a/llvm/tools/llvm-jitlink/llvm-jitlink-executor/llvm-jitlink-executor.cpp
>> +++
>> b/llvm/tools/llvm-jitlink/llvm-jitlink-executor/llvm-jitlink-executor.cpp
>> @@ -158,7 +158,7 @@ int main(int argc, char *argv[]) {
>>
>>  ExitOnErr(SimpleRemoteEPCServer::Create<FDSimpleRemoteEPCTransport>(
>>            [](SimpleRemoteEPCServer::Setup &S) -> Error {
>>              S.setDispatcher(
>> -
>> std::make_unique<SimpleRemoteEPCServer::ThreadDispatcher>());
>> +
>> std::make_unique<DynamicThreadPoolSimpleRemoteEPCDispatcher>());
>>              S.bootstrapSymbols() =
>>                  SimpleRemoteEPCServer::defaultBootstrapSymbols();
>>              S.services().push_back(
>>
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20211008/d9852695/attachment.html>


More information about the llvm-commits mailing list