1 //===-------------------------- Server.h - Server -------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // Offloading gRPC server for remote host. 10 // 11 //===----------------------------------------------------------------------===// 12 13 #ifndef LLVM_OPENMP_LIBOMPTARGET_PLUGINS_REMOTE_SERVER_SERVER_H 14 #define LLVM_OPENMP_LIBOMPTARGET_PLUGINS_REMOTE_SERVER_SERVER_H 15 16 #include <grpcpp/server_context.h> 17 18 #include "Utils.h" 19 #include "device.h" 20 #include "omptarget.h" 21 #include "openmp.grpc.pb.h" 22 #include "openmp.pb.h" 23 #include "rtl.h" 24 25 using grpc::ServerContext; 26 using grpc::ServerReader; 27 using grpc::ServerWriter; 28 using grpc::Status; 29 30 using namespace openmp::libomptarget::remote; 31 using namespace RemoteOffloading; 32 33 using namespace google; 34 35 extern PluginManager *PM; 36 37 class RemoteOffloadImpl final : public RemoteOffload::Service { 38 private: 39 int32_t mapHostRTLDeviceId(int32_t RTLDeviceID); 40 41 std::unordered_map<const void *, __tgt_device_image *> 42 HostToRemoteDeviceImage; 43 std::unordered_map<const void *, std::unique_ptr<__tgt_bin_desc>> 44 Descriptions; 45 __tgt_target_table *Table = nullptr; 46 47 int DebugLevel; 48 uint64_t MaxSize; 49 uint64_t BlockSize; 50 std::unique_ptr<protobuf::Arena> Arena; 51 52 public: RemoteOffloadImpl(uint64_t MaxSize,uint64_t BlockSize)53 RemoteOffloadImpl(uint64_t MaxSize, uint64_t BlockSize) 54 : MaxSize(MaxSize), BlockSize(BlockSize) { 55 DebugLevel = getDebugLevel(); 56 Arena = std::make_unique<protobuf::Arena>(); 57 } 58 59 Status Shutdown(ServerContext *Context, const Null *Request, 60 I32 *Reply) override; 61 62 Status RegisterLib(ServerContext *Context, 63 const TargetBinaryDescription *Description, 64 I32 *Reply) override; 65 Status UnregisterLib(ServerContext *Context, const Pointer *Request, 66 I32 *Reply) override; 67 68 Status IsValidBinary(ServerContext *Context, 69 const TargetDeviceImagePtr *Image, 70 I32 *IsValid) override; 71 Status GetNumberOfDevices(ServerContext *Context, const Null *Null, 72 I32 *NumberOfDevices) override; 73 74 Status InitDevice(ServerContext *Context, const I32 *DeviceNum, 75 I32 *Reply) override; 76 Status InitRequires(ServerContext *Context, const I64 *RequiresFlag, 77 I32 *Reply) override; 78 79 Status LoadBinary(ServerContext *Context, const Binary *Binary, 80 TargetTable *Reply) override; 81 Status IsDataExchangeable(ServerContext *Context, const DevicePair *Request, 82 I32 *Reply) override; 83 84 Status DataAlloc(ServerContext *Context, const AllocData *Request, 85 Pointer *Reply) override; 86 87 Status DataSubmit(ServerContext *Context, ServerReader<SubmitData> *Reader, 88 I32 *Reply) override; 89 Status DataRetrieve(ServerContext *Context, const RetrieveData *Request, 90 ServerWriter<Data> *Writer) override; 91 92 Status DataExchange(ServerContext *Context, const ExchangeData *Request, 93 I32 *Reply) override; 94 95 Status DataDelete(ServerContext *Context, const DeleteData *Request, 96 I32 *Reply) override; 97 98 Status RunTargetRegion(ServerContext *Context, const TargetRegion *Request, 99 I32 *Reply) override; 100 101 Status RunTargetTeamRegion(ServerContext *Context, 102 const TargetTeamRegion *Request, 103 I32 *Reply) override; 104 }; 105 106 #endif 107