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