blob: ca31f03f5128827dd74776fd12da4c16f2de935b [file] [log] [blame]
//===----------------- Utils.h - Utilities for Remote RTL -----------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// Utilities for data transfer through protobuf and debugging.
//
//===----------------------------------------------------------------------===//
#ifndef UTILS_H
#define UTILS_H
#include "Debug.h"
#include "omptarget.h"
#include "openmp.grpc.pb.h"
#include "openmp.pb.h"
#include "rtl.h"
#include <string>
#define CLIENT_DBG(...) \
{ \
if (DebugLevel > 0) { \
fprintf(stderr, "[[Client]] --> "); \
fprintf(stderr, __VA_ARGS__); \
fprintf(stderr, "\n"); \
} \
}
#define SERVER_DBG(...) \
{ \
if (DebugLevel > 0) { \
fprintf(stderr, "[[Server]] --> "); \
fprintf(stderr, __VA_ARGS__); \
fprintf(stderr, "\n"); \
} \
}
namespace RemoteOffloading {
using namespace openmp::libomptarget::remote;
using openmp::libomptarget::remote::DeviceOffloadEntry;
using openmp::libomptarget::remote::TargetBinaryDescription;
using openmp::libomptarget::remote::TargetOffloadEntry;
using openmp::libomptarget::remote::TargetTable;
struct RPCConfig {
std::vector<std::string> ServerAddresses;
uint64_t MaxSize;
uint64_t BlockSize;
RPCConfig() {
ServerAddresses = {"0.0.0.0:50051"};
MaxSize = 1 << 30;
BlockSize = 1 << 20;
}
};
/// Helper function to parse common environment variables between client/server
void parseEnvironment(RPCConfig &Config);
/// Loads a target binary description into protobuf.
void loadTargetBinaryDescription(const __tgt_bin_desc *Desc,
TargetBinaryDescription &Request);
/// Unload a target binary description from protobuf. The map is used to keep
/// track of already copied device images.
void unloadTargetBinaryDescription(
const TargetBinaryDescription *Request, __tgt_bin_desc *Desc,
std::unordered_map<const void *, __tgt_device_image *>
&HostToRemoteDeviceImage);
/// Frees argument as constructed by loadTargetBinaryDescription
void freeTargetBinaryDescription(__tgt_bin_desc *Desc);
/// Copies from TargetOffloadEntry protobuf to a tgt_bin_desc during unloading.
void copyOffloadEntry(const TargetOffloadEntry &EntryResponse,
__tgt_offload_entry *Entry);
/// Copies from tgt_bin_desc into TargetOffloadEntry protobuf during loading.
void copyOffloadEntry(const __tgt_offload_entry *Entry,
TargetOffloadEntry *EntryResponse);
/// Shallow copy of offload entry from tgt_bin_desc to TargetOffloadEntry
/// during loading.
void shallowCopyOffloadEntry(const __tgt_offload_entry *Entry,
TargetOffloadEntry *EntryResponse);
/// Copies DeviceOffloadEntries into table during unloading.
void copyOffloadEntry(const DeviceOffloadEntry &EntryResponse,
__tgt_offload_entry *Entry);
/// Loads tgt_target_table into a TargetTable protobuf message.
void loadTargetTable(__tgt_target_table *Table, TargetTable &TableResponse,
__tgt_device_image *Image);
/// Unloads from a target_table from protobuf.
void unloadTargetTable(
TargetTable &TableResponse, __tgt_target_table *Table,
std::unordered_map<void *, void *> &HostToRemoteTargetTableMap);
/// Frees argument as constructed by unloadTargetTable
void freeTargetTable(__tgt_target_table *Table);
void dump(const void *Start, const void *End);
void dump(__tgt_offload_entry *Entry);
void dump(TargetOffloadEntry Entry);
void dump(__tgt_target_table *Table);
void dump(__tgt_device_image *Image);
} // namespace RemoteOffloading
#endif