1 //===--------------------- rtl.cpp - Remote RTL Plugin --------------------===//
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
7 //===----------------------------------------------------------------------===//
11 //===----------------------------------------------------------------------===//
19 #include "omptarget.h"
20 #include "omptargetplugin.h"
22 #define TARGET_NAME RPC
23 #define DEBUG_PREFIX "Target " GETNAME(TARGET_NAME) " RTL"
25 RemoteClientManager
*Manager
;
27 __attribute__((constructor(101))) void initRPC() {
28 DP("Init RPC library!\n");
30 Manager
= new RemoteClientManager();
33 __attribute__((destructor(101))) void deinitRPC() {
34 Manager
->shutdown(); // TODO: Error handle shutting down
35 DP("Deinit RPC library!\n");
39 // Exposed library API function
44 int32_t __tgt_rtl_register_lib(__tgt_bin_desc
*Desc
) {
45 return Manager
->registerLib(Desc
);
48 int32_t __tgt_rtl_unregister_lib(__tgt_bin_desc
*Desc
) {
49 return Manager
->unregisterLib(Desc
);
52 int32_t __tgt_rtl_is_valid_binary(__tgt_device_image
*Image
) {
53 return Manager
->isValidBinary(Image
);
56 int32_t __tgt_rtl_number_of_devices() { return Manager
->getNumberOfDevices(); }
58 int32_t __tgt_rtl_init_device(int32_t DeviceId
) {
59 return Manager
->initDevice(DeviceId
);
62 int64_t __tgt_rtl_init_requires(int64_t RequiresFlags
) {
63 return Manager
->initRequires(RequiresFlags
);
66 __tgt_target_table
*__tgt_rtl_load_binary(int32_t DeviceId
,
67 __tgt_device_image
*Image
) {
68 return Manager
->loadBinary(DeviceId
, (__tgt_device_image
*)Image
);
71 int32_t __tgt_rtl_is_data_exchangable(int32_t SrcDevId
, int32_t DstDevId
) {
72 return Manager
->isDataExchangeable(SrcDevId
, DstDevId
);
75 void *__tgt_rtl_data_alloc(int32_t DeviceId
, int64_t Size
, void *HstPtr
,
77 if (Kind
!= TARGET_ALLOC_DEFAULT
) {
78 REPORT("Invalid target data allocation kind or requested allocator not "
83 return Manager
->dataAlloc(DeviceId
, Size
, HstPtr
);
86 int32_t __tgt_rtl_data_submit(int32_t DeviceId
, void *TgtPtr
, void *HstPtr
,
88 return Manager
->dataSubmit(DeviceId
, TgtPtr
, HstPtr
, Size
);
91 int32_t __tgt_rtl_data_retrieve(int32_t DeviceId
, void *HstPtr
, void *TgtPtr
,
93 return Manager
->dataRetrieve(DeviceId
, HstPtr
, TgtPtr
, Size
);
96 int32_t __tgt_rtl_data_delete(int32_t DeviceId
, void *TgtPtr
) {
97 return Manager
->dataDelete(DeviceId
, TgtPtr
);
100 int32_t __tgt_rtl_data_exchange(int32_t SrcDevId
, void *SrcPtr
,
101 int32_t DstDevId
, void *DstPtr
, int64_t Size
) {
102 return Manager
->dataExchange(SrcDevId
, SrcPtr
, DstDevId
, DstPtr
, Size
);
106 int32_t __tgt_rtl_run_target_region(int32_t DeviceId
, void *TgtEntryPtr
,
107 void **TgtArgs
, ptrdiff_t *TgtOffsets
,
109 return Manager
->runTargetRegion(DeviceId
, TgtEntryPtr
, TgtArgs
, TgtOffsets
,
113 int32_t __tgt_rtl_run_target_team_region(int32_t DeviceId
, void *TgtEntryPtr
,
114 void **TgtArgs
, ptrdiff_t *TgtOffsets
,
115 int32_t ArgNum
, int32_t TeamNum
,
117 uint64_t LoopTripCount
) {
118 return Manager
->runTargetTeamRegion(DeviceId
, TgtEntryPtr
, TgtArgs
,
119 TgtOffsets
, ArgNum
, TeamNum
, ThreadLimit
,
123 // Exposed library API function