From 44f3022cdf01b26d46ebff3c26a5e572aee2acdf Mon Sep 17 00:00:00 2001 From: Johannes Doerfert Date: Wed, 10 Feb 2021 10:50:09 -0600 Subject: [PATCH] [OpenMP][NFC] Pass a DeviceTy, not the device number to `target` This unifies the API of `target` relative to `targetUpdateData` and such. Reviewed By: tianshilei1992, grokos Differential Revision: https://reviews.llvm.org/D96429 --- openmp/libomptarget/src/interface.cpp | 6 ++++-- openmp/libomptarget/src/omptarget.cpp | 9 ++++----- openmp/libomptarget/src/private.h | 3 ++- openmp/libomptarget/src/rtl.cpp | 5 ++--- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/openmp/libomptarget/src/interface.cpp b/openmp/libomptarget/src/interface.cpp index 52929e1..6c20819 100644 --- a/openmp/libomptarget/src/interface.cpp +++ b/openmp/libomptarget/src/interface.cpp @@ -407,7 +407,8 @@ EXTERN int __tgt_target_mapper(ident_t *loc, int64_t device_id, void *host_ptr, } #endif - int rc = target(loc, device_id, host_ptr, arg_num, args_base, args, arg_sizes, + DeviceTy &Device = PM->Devices[device_id]; + int rc = target(loc, Device, host_ptr, arg_num, args_base, args, arg_sizes, arg_types, arg_names, arg_mappers, 0, 0, false /*team*/); HandleTargetOutcome(rc == OFFLOAD_SUCCESS, loc); return rc; @@ -487,7 +488,8 @@ EXTERN int __tgt_target_teams_mapper(ident_t *loc, int64_t device_id, } #endif - int rc = target(loc, device_id, host_ptr, arg_num, args_base, args, arg_sizes, + DeviceTy &Device = PM->Devices[device_id]; + int rc = target(loc, Device, host_ptr, arg_num, args_base, args, arg_sizes, arg_types, arg_names, arg_mappers, team_num, thread_limit, true /*team*/); HandleTargetOutcome(rc == OFFLOAD_SUCCESS, loc); diff --git a/openmp/libomptarget/src/omptarget.cpp b/openmp/libomptarget/src/omptarget.cpp index 8eba837..8c1ed5b 100644 --- a/openmp/libomptarget/src/omptarget.cpp +++ b/openmp/libomptarget/src/omptarget.cpp @@ -159,9 +159,8 @@ static int InitLibrary(DeviceTy &Device) { DP("Has pending ctors... call now\n"); for (auto &entry : lib.second.PendingCtors) { void *ctor = entry; - int rc = - target(nullptr, device_id, ctor, 0, nullptr, nullptr, nullptr, - nullptr, nullptr, nullptr, 1, 1, true /*team*/); + int rc = target(nullptr, Device, ctor, 0, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, 1, 1, true /*team*/); if (rc != OFFLOAD_SUCCESS) { REPORT("Running ctor " DPxMOD " failed.\n", DPxPTR(ctor)); Device.PendingGlobalsMtx.unlock(); @@ -1238,11 +1237,11 @@ static int processDataAfter(ident_t *loc, int64_t DeviceId, void *HostPtr, /// performs the same action as data_update and data_end above. This function /// returns 0 if it was able to transfer the execution to a target and an /// integer different from zero otherwise. -int target(ident_t *loc, int64_t DeviceId, void *HostPtr, int32_t ArgNum, +int target(ident_t *loc, DeviceTy &Device, void *HostPtr, int32_t ArgNum, void **ArgBases, void **Args, int64_t *ArgSizes, int64_t *ArgTypes, map_var_info_t *ArgNames, void **ArgMappers, int32_t TeamNum, int32_t ThreadLimit, int IsTeamConstruct) { - DeviceTy &Device = PM->Devices[DeviceId]; + int32_t DeviceId = Device.DeviceID; TableMap *TM = getTableMap(HostPtr); // No map for this host pointer found! diff --git a/openmp/libomptarget/src/private.h b/openmp/libomptarget/src/private.h index 3b0e57d..36d7539 100644 --- a/openmp/libomptarget/src/private.h +++ b/openmp/libomptarget/src/private.h @@ -13,6 +13,7 @@ #ifndef _OMPTARGET_PRIVATE_H #define _OMPTARGET_PRIVATE_H +#include "device.h" #include #include #include @@ -36,7 +37,7 @@ extern int targetDataUpdate(ident_t *loc, DeviceTy &Device, int32_t arg_num, void **arg_mappers, __tgt_async_info *async_info_ptr = nullptr); -extern int target(ident_t *loc, int64_t DeviceId, void *HostPtr, int32_t ArgNum, +extern int target(ident_t *loc, DeviceTy &Device, void *HostPtr, int32_t ArgNum, void **ArgBases, void **Args, int64_t *ArgSizes, int64_t *ArgTypes, map_var_info_t *arg_names, void **ArgMappers, int32_t TeamNum, int32_t ThreadLimit, diff --git a/openmp/libomptarget/src/rtl.cpp b/openmp/libomptarget/src/rtl.cpp index 6807b8b..fbe4d7d 100644 --- a/openmp/libomptarget/src/rtl.cpp +++ b/openmp/libomptarget/src/rtl.cpp @@ -401,9 +401,8 @@ void RTLsTy::UnregisterLib(__tgt_bin_desc *desc) { Device.PendingGlobalsMtx.lock(); if (Device.PendingCtorsDtors[desc].PendingCtors.empty()) { for (auto &dtor : Device.PendingCtorsDtors[desc].PendingDtors) { - int rc = - target(nullptr, Device.DeviceID, dtor, 0, nullptr, nullptr, - nullptr, nullptr, nullptr, nullptr, 1, 1, true /*team*/); + int rc = target(nullptr, Device, dtor, 0, nullptr, nullptr, nullptr, + nullptr, nullptr, nullptr, 1, 1, true /*team*/); if (rc != OFFLOAD_SUCCESS) { DP("Running destructor " DPxMOD " failed.\n", DPxPTR(dtor)); } -- 2.7.4