1 //===-------- LegacyAPI.cpp - Target independent OpenMP target RTL --------===//
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 // Legacy interfaces for libomptarget used to maintain backwards-compatibility.
10 //
11 //===----------------------------------------------------------------------===//
12
13 #include "omptarget.h"
14 #include "private.h"
15
__tgt_target_data_begin(int64_t DeviceId,int32_t ArgNum,void ** ArgsBase,void ** Args,int64_t * ArgSizes,int64_t * ArgTypes)16 EXTERN void __tgt_target_data_begin(int64_t DeviceId, int32_t ArgNum,
17 void **ArgsBase, void **Args,
18 int64_t *ArgSizes, int64_t *ArgTypes) {
19 TIMESCOPE();
20 __tgt_target_data_begin_mapper(nullptr, DeviceId, ArgNum, ArgsBase, Args,
21 ArgSizes, ArgTypes, nullptr, nullptr);
22 }
23
__tgt_target_data_begin_nowait(int64_t DeviceId,int32_t ArgNum,void ** ArgsBase,void ** Args,int64_t * ArgSizes,int64_t * ArgTypes,int32_t DepNum,void * DepList,int32_t NoAliasDepNum,void * NoAliasDepList)24 EXTERN void __tgt_target_data_begin_nowait(int64_t DeviceId, int32_t ArgNum,
25 void **ArgsBase, void **Args,
26 int64_t *ArgSizes, int64_t *ArgTypes,
27 int32_t DepNum, void *DepList,
28 int32_t NoAliasDepNum,
29 void *NoAliasDepList) {
30 TIMESCOPE();
31
32 __tgt_target_data_begin_mapper(nullptr, DeviceId, ArgNum, ArgsBase, Args,
33 ArgSizes, ArgTypes, nullptr, nullptr);
34 }
35
__tgt_target_data_end(int64_t DeviceId,int32_t ArgNum,void ** ArgsBase,void ** Args,int64_t * ArgSizes,int64_t * ArgTypes)36 EXTERN void __tgt_target_data_end(int64_t DeviceId, int32_t ArgNum,
37 void **ArgsBase, void **Args,
38 int64_t *ArgSizes, int64_t *ArgTypes) {
39 TIMESCOPE();
40 __tgt_target_data_end_mapper(nullptr, DeviceId, ArgNum, ArgsBase, Args,
41 ArgSizes, ArgTypes, nullptr, nullptr);
42 }
43
__tgt_target_data_update(int64_t DeviceId,int32_t ArgNum,void ** ArgsBase,void ** Args,int64_t * ArgSizes,int64_t * ArgTypes)44 EXTERN void __tgt_target_data_update(int64_t DeviceId, int32_t ArgNum,
45 void **ArgsBase, void **Args,
46 int64_t *ArgSizes, int64_t *ArgTypes) {
47 TIMESCOPE();
48 __tgt_target_data_update_mapper(nullptr, DeviceId, ArgNum, ArgsBase, Args,
49 ArgSizes, ArgTypes, nullptr, nullptr);
50 }
51
__tgt_target_data_update_nowait(int64_t DeviceId,int32_t ArgNum,void ** ArgsBase,void ** Args,int64_t * ArgSizes,int64_t * ArgTypes,int32_t DepNum,void * DepList,int32_t NoAliasDepNum,void * NoAliasDepList)52 EXTERN void __tgt_target_data_update_nowait(
53 int64_t DeviceId, int32_t ArgNum, void **ArgsBase, void **Args,
54 int64_t *ArgSizes, int64_t *ArgTypes, int32_t DepNum, void *DepList,
55 int32_t NoAliasDepNum, void *NoAliasDepList) {
56 TIMESCOPE();
57
58 __tgt_target_data_update_mapper(nullptr, DeviceId, ArgNum, ArgsBase, Args,
59 ArgSizes, ArgTypes, nullptr, nullptr);
60 }
61
__tgt_target_data_end_nowait(int64_t DeviceId,int32_t ArgNum,void ** ArgsBase,void ** Args,int64_t * ArgSizes,int64_t * ArgTypes,int32_t DepNum,void * DepList,int32_t NoAliasDepNum,void * NoAliasDepList)62 EXTERN void __tgt_target_data_end_nowait(int64_t DeviceId, int32_t ArgNum,
63 void **ArgsBase, void **Args,
64 int64_t *ArgSizes, int64_t *ArgTypes,
65 int32_t DepNum, void *DepList,
66 int32_t NoAliasDepNum,
67 void *NoAliasDepList) {
68 TIMESCOPE();
69
70 __tgt_target_data_end_mapper(nullptr, DeviceId, ArgNum, ArgsBase, Args,
71 ArgSizes, ArgTypes, nullptr, nullptr);
72 }
73
__tgt_target_mapper(ident_t * Loc,int64_t DeviceId,void * HostPtr,int32_t ArgNum,void ** ArgsBase,void ** Args,int64_t * ArgSizes,int64_t * ArgTypes,map_var_info_t * ArgNames,void ** ArgMappers)74 EXTERN int __tgt_target_mapper(ident_t *Loc, int64_t DeviceId, void *HostPtr,
75 int32_t ArgNum, void **ArgsBase, void **Args,
76 int64_t *ArgSizes, int64_t *ArgTypes,
77 map_var_info_t *ArgNames, void **ArgMappers) {
78 TIMESCOPE_WITH_IDENT(Loc);
79 __tgt_kernel_arguments KernelArgs{
80 1, ArgNum, ArgsBase, Args, ArgSizes, ArgTypes, ArgNames, ArgMappers, -1};
81 return __tgt_target_kernel(Loc, DeviceId, -1, -1, HostPtr, &KernelArgs);
82 }
83
__tgt_target(int64_t DeviceId,void * HostPtr,int32_t ArgNum,void ** ArgsBase,void ** Args,int64_t * ArgSizes,int64_t * ArgTypes)84 EXTERN int __tgt_target(int64_t DeviceId, void *HostPtr, int32_t ArgNum,
85 void **ArgsBase, void **Args, int64_t *ArgSizes,
86 int64_t *ArgTypes) {
87 TIMESCOPE();
88 return __tgt_target_mapper(nullptr, DeviceId, HostPtr, ArgNum, ArgsBase, Args,
89 ArgSizes, ArgTypes, nullptr, nullptr);
90 }
91
__tgt_target_nowait(int64_t DeviceId,void * HostPtr,int32_t ArgNum,void ** ArgsBase,void ** Args,int64_t * ArgSizes,int64_t * ArgTypes,int32_t DepNum,void * DepList,int32_t NoAliasDepNum,void * NoAliasDepList)92 EXTERN int __tgt_target_nowait(int64_t DeviceId, void *HostPtr, int32_t ArgNum,
93 void **ArgsBase, void **Args, int64_t *ArgSizes,
94 int64_t *ArgTypes, int32_t DepNum, void *DepList,
95 int32_t NoAliasDepNum, void *NoAliasDepList) {
96 TIMESCOPE();
97
98 return __tgt_target_mapper(nullptr, DeviceId, HostPtr, ArgNum, ArgsBase, Args,
99 ArgSizes, ArgTypes, nullptr, nullptr);
100 }
101
__tgt_target_nowait_mapper(ident_t * Loc,int64_t DeviceId,void * HostPtr,int32_t ArgNum,void ** ArgsBase,void ** Args,int64_t * ArgSizes,int64_t * ArgTypes,map_var_info_t * ArgNames,void ** ArgMappers,int32_t DepNum,void * DepList,int32_t NoAliasDepNum,void * NoAliasDepList)102 EXTERN int __tgt_target_nowait_mapper(
103 ident_t *Loc, int64_t DeviceId, void *HostPtr, int32_t ArgNum,
104 void **ArgsBase, void **Args, int64_t *ArgSizes, int64_t *ArgTypes,
105 map_var_info_t *ArgNames, void **ArgMappers, int32_t DepNum, void *DepList,
106 int32_t NoAliasDepNum, void *NoAliasDepList) {
107 TIMESCOPE_WITH_IDENT(Loc);
108
109 return __tgt_target_mapper(Loc, DeviceId, HostPtr, ArgNum, ArgsBase, Args,
110 ArgSizes, ArgTypes, ArgNames, ArgMappers);
111 }
112
__tgt_target_teams_mapper(ident_t * Loc,int64_t DeviceId,void * HostPtr,int32_t ArgNum,void ** ArgsBase,void ** Args,int64_t * ArgSizes,int64_t * ArgTypes,map_var_info_t * ArgNames,void ** ArgMappers,int32_t NumTeams,int32_t ThreadLimit)113 EXTERN int __tgt_target_teams_mapper(ident_t *Loc, int64_t DeviceId,
114 void *HostPtr, int32_t ArgNum,
115 void **ArgsBase, void **Args,
116 int64_t *ArgSizes, int64_t *ArgTypes,
117 map_var_info_t *ArgNames,
118 void **ArgMappers, int32_t NumTeams,
119 int32_t ThreadLimit) {
120 TIMESCOPE_WITH_IDENT(Loc);
121
122 __tgt_kernel_arguments KernelArgs{
123 1, ArgNum, ArgsBase, Args, ArgSizes, ArgTypes, ArgNames, ArgMappers, -1};
124 return __tgt_target_kernel(Loc, DeviceId, NumTeams, ThreadLimit, HostPtr,
125 &KernelArgs);
126 }
127
__tgt_target_teams(int64_t DeviceId,void * HostPtr,int32_t ArgNum,void ** ArgsBase,void ** Args,int64_t * ArgSizes,int64_t * ArgTypes,int32_t NumTeams,int32_t ThreadLimit)128 EXTERN int __tgt_target_teams(int64_t DeviceId, void *HostPtr, int32_t ArgNum,
129 void **ArgsBase, void **Args, int64_t *ArgSizes,
130 int64_t *ArgTypes, int32_t NumTeams,
131 int32_t ThreadLimit) {
132 TIMESCOPE();
133 return __tgt_target_teams_mapper(nullptr, DeviceId, HostPtr, ArgNum, ArgsBase,
134 Args, ArgSizes, ArgTypes, nullptr, nullptr,
135 NumTeams, ThreadLimit);
136 }
137
__tgt_target_teams_nowait(int64_t DeviceId,void * HostPtr,int32_t ArgNum,void ** ArgsBase,void ** Args,int64_t * ArgSizes,int64_t * ArgTypes,int32_t NumTeams,int32_t ThreadLimit,int32_t DepNum,void * DepList,int32_t NoAliasDepNum,void * NoAliasDepList)138 EXTERN int __tgt_target_teams_nowait(int64_t DeviceId, void *HostPtr,
139 int32_t ArgNum, void **ArgsBase,
140 void **Args, int64_t *ArgSizes,
141 int64_t *ArgTypes, int32_t NumTeams,
142 int32_t ThreadLimit, int32_t DepNum,
143 void *DepList, int32_t NoAliasDepNum,
144 void *NoAliasDepList) {
145 TIMESCOPE();
146
147 return __tgt_target_teams_mapper(nullptr, DeviceId, HostPtr, ArgNum, ArgsBase,
148 Args, ArgSizes, ArgTypes, nullptr, nullptr,
149 NumTeams, ThreadLimit);
150 }
151
__tgt_target_teams_nowait_mapper(ident_t * Loc,int64_t DeviceId,void * HostPtr,int32_t ArgNum,void ** ArgsBase,void ** Args,int64_t * ArgSizes,int64_t * ArgTypes,map_var_info_t * ArgNames,void ** ArgMappers,int32_t NumTeams,int32_t ThreadLimit,int32_t DepNum,void * DepList,int32_t NoAliasDepNum,void * NoAliasDepList)152 EXTERN int __tgt_target_teams_nowait_mapper(
153 ident_t *Loc, int64_t DeviceId, void *HostPtr, int32_t ArgNum,
154 void **ArgsBase, void **Args, int64_t *ArgSizes, int64_t *ArgTypes,
155 map_var_info_t *ArgNames, void **ArgMappers, int32_t NumTeams,
156 int32_t ThreadLimit, int32_t DepNum, void *DepList, int32_t NoAliasDepNum,
157 void *NoAliasDepList) {
158 TIMESCOPE_WITH_IDENT(Loc);
159
160 return __tgt_target_teams_mapper(Loc, DeviceId, HostPtr, ArgNum, ArgsBase,
161 Args, ArgSizes, ArgTypes, ArgNames,
162 ArgMappers, NumTeams, ThreadLimit);
163 }
164
__kmpc_push_target_tripcount_mapper(ident_t * Loc,int64_t DeviceId,uint64_t LoopTripcount)165 EXTERN void __kmpc_push_target_tripcount_mapper(ident_t *Loc, int64_t DeviceId,
166 uint64_t LoopTripcount) {
167 TIMESCOPE_WITH_IDENT(Loc);
168 if (checkDeviceAndCtors(DeviceId, Loc)) {
169 DP("Not offloading to device %" PRId64 "\n", DeviceId);
170 return;
171 }
172
173 DP("__kmpc_push_target_tripcount(%" PRId64 ", %" PRIu64 ")\n", DeviceId,
174 LoopTripcount);
175 PM->TblMapMtx.lock();
176 PM->Devices[DeviceId]->LoopTripCnt.emplace(__kmpc_global_thread_num(NULL),
177 LoopTripcount);
178 PM->TblMapMtx.unlock();
179 }
180
__kmpc_push_target_tripcount(int64_t DeviceId,uint64_t LoopTripcount)181 EXTERN void __kmpc_push_target_tripcount(int64_t DeviceId,
182 uint64_t LoopTripcount) {
183 __kmpc_push_target_tripcount_mapper(nullptr, DeviceId, LoopTripcount);
184 }
185