[Openmp-commits] [openmp] 4cf30c5 - Revert "Revert "Revert "[Libomptarget] Add checks for AMDGPU TargetID using new image info"""
Saiyedul Islam via Openmp-commits
openmp-commits at lists.llvm.org
Mon Jul 25 09:35:51 PDT 2022
Author: Saiyedul Islam
Date: 2022-07-25T11:35:37-05:00
New Revision: 4cf30c5157a6ff7d22c7f663ed48d079877cb71b
URL: https://github.com/llvm/llvm-project/commit/4cf30c5157a6ff7d22c7f663ed48d079877cb71b
DIFF: https://github.com/llvm/llvm-project/commit/4cf30c5157a6ff7d22c7f663ed48d079877cb71b.diff
LOG: Revert "Revert "Revert "[Libomptarget] Add checks for AMDGPU TargetID using new image info"""
This reverts commit 281eb9223cf2e9366b5356fafab275abf0ea1d2b.
Added:
Modified:
openmp/libomptarget/plugins/amdgpu/dynamic_hsa/hsa.h
openmp/libomptarget/plugins/amdgpu/src/rtl.cpp
Removed:
################################################################################
diff --git a/openmp/libomptarget/plugins/amdgpu/dynamic_hsa/hsa.h b/openmp/libomptarget/plugins/amdgpu/dynamic_hsa/hsa.h
index 8627860aef089..ebdd642dfebec 100644
--- a/openmp/libomptarget/plugins/amdgpu/dynamic_hsa/hsa.h
+++ b/openmp/libomptarget/plugins/amdgpu/dynamic_hsa/hsa.h
@@ -56,8 +56,7 @@ typedef enum {
} hsa_device_type_t;
typedef enum {
- HSA_ISA_INFO_NAME_LENGTH = 0,
- HSA_ISA_INFO_NAME = 1
+ HSA_ISA_INFO_NAME = 1,
} hsa_isa_info_t;
typedef enum {
diff --git a/openmp/libomptarget/plugins/amdgpu/src/rtl.cpp b/openmp/libomptarget/plugins/amdgpu/src/rtl.cpp
index 796ec8a0c57ab..9ecf2b126253f 100644
--- a/openmp/libomptarget/plugins/amdgpu/src/rtl.cpp
+++ b/openmp/libomptarget/plugins/amdgpu/src/rtl.cpp
@@ -35,13 +35,9 @@
#include "omptargetplugin.h"
#include "print_tracing.h"
-#include "llvm/ADT/StringMap.h"
-#include "llvm/ADT/StringRef.h"
#include "llvm/Frontend/OpenMP/OMPConstants.h"
#include "llvm/Frontend/OpenMP/OMPGridValues.h"
-using namespace llvm;
-
// hostrpc interface, FIXME: consider moving to its own include these are
// statically linked into amdgpu/plugin if present from hostrpc_services.a,
// linked as --whole-archive to override the weak symbols that are used to
@@ -469,7 +465,6 @@ class RTLDeviceInfoTy : HSALifetime {
std::vector<int> ThreadsPerGroup;
std::vector<int> WarpSize;
std::vector<std::string> GPUName;
- std::vector<std::string> TargetID;
// OpenMP properties
std::vector<int> NumTeams;
@@ -1898,156 +1893,11 @@ hsa_status_t allow_access_to_all_gpu_agents(void *Ptr) {
}
} // namespace core
-static hsa_status_t GetIsaInfo(hsa_isa_t isa, void *data) {
- hsa_status_t err;
- uint32_t name_len;
- err = hsa_isa_get_info_alt(isa, HSA_ISA_INFO_NAME_LENGTH, &name_len);
- if (err != HSA_STATUS_SUCCESS) {
- DP("Error getting ISA info length\n");
- return err;
- }
-
- char TargetID[name_len];
- err = hsa_isa_get_info_alt(isa, HSA_ISA_INFO_NAME, TargetID);
- if (err != HSA_STATUS_SUCCESS) {
- DP("Error getting ISA info name\n");
- return err;
- }
-
- auto TripleTargetID = llvm::StringRef(TargetID);
- if (TripleTargetID.consume_front("amdgcn-amd-amdhsa")) {
- DeviceInfo.TargetID.push_back(TripleTargetID.ltrim('-').str());
- }
- return HSA_STATUS_SUCCESS;
-}
-
-/// Parse a TargetID to get processor arch and feature map.
-/// Returns processor subarch.
-/// Returns TargetID features in \p FeatureMap argument.
-/// If the \p TargetID contains feature+, FeatureMap it to true.
-/// If the \p TargetID contains feature-, FeatureMap it to false.
-/// If the \p TargetID does not contain a feature (default), do not map it.
-StringRef parseTargetID(StringRef TargetID, StringMap<bool> &FeatureMap) {
- if (TargetID.empty())
- return llvm::StringRef();
-
- auto ArchFeature = TargetID.split(":");
- auto Arch = ArchFeature.first;
- auto Features = ArchFeature.second;
- if (Features.empty())
- return Arch;
-
- if (Features.contains("sramecc+")) {
- FeatureMap.insert(std::pair<std::string, bool>("sramecc", true));
- } else if (Features.contains("sramecc-")) {
- FeatureMap.insert(std::pair<std::string, bool>("sramecc", false));
- }
- if (Features.contains("xnack+")) {
- FeatureMap.insert(std::pair<std::string, bool>("xnack", true));
- } else if (Features.contains("xnack-")) {
- FeatureMap.insert(std::pair<std::string, bool>("xnack", false));
- }
-
- return Arch;
-}
-
-/// Checks if an image \p ImgInfo is compatible with current
-/// system's environment \p EnvInfo
-bool IsImageCompatibleWithEnv(const char *ImgInfo, std::string EnvInfo) {
- llvm::StringRef ImgTID(ImgInfo), EnvTID(EnvInfo);
-
- // Compatible in case of exact match
- if (ImgTID == EnvTID) {
- DP("Compatible: Exact match \t[Image: %s]\t:\t[Environment: %s]\n",
- ImgTID.data(), EnvTID.data());
- return true;
- }
-
- // Incompatible if Archs mismatch.
- StringMap<bool> ImgMap, EnvMap;
- StringRef ImgArch = parseTargetID(ImgTID, ImgMap);
- StringRef EnvArch = parseTargetID(EnvTID, EnvMap);
-
- // Both EnvArch and ImgArch can't be empty here.
- if (EnvArch.empty() || ImgArch.empty() || !ImgArch.contains(EnvArch)) {
- DP("Incompatible: Processor mismatch \t[Image: %s]\t:\t[Environment: %s]\n",
- ImgTID.data(), EnvTID.data());
- return false;
- }
-
- // Incompatible if image has more features than the environment, irrespective
- // of type or sign of features.
- if (ImgMap.size() > EnvMap.size()) {
- DP("Incompatible: Image has more features than the environment \t[Image: "
- "%s]\t:\t[Environment: %s]\n",
- ImgTID.data(), EnvTID.data());
- return false;
- }
-
- // Compatible if each target feature specified by the environment is
- // compatible with target feature of the image. The target feature is
- // compatible if the iamge does not specify it (meaning Any), or if it
- // specifies it with the same value (meaning On or Off).
- for (const auto &ImgFeature : ImgMap) {
- auto EnvFeature = EnvMap.find(ImgFeature.first());
- if (EnvFeature == EnvMap.end()) {
- DP("Incompatible: Value of Image's non-ANY feature is not matching with "
- "the Environment feature's ANY value \t[Image: %s]\t:\t[Environment: "
- "%s]\n",
- ImgTID.data(), EnvTID.data());
- return false;
- } else if (EnvFeature->first() == ImgFeature.first() &&
- EnvFeature->second != ImgFeature.second) {
- DP("Incompatible: Value of Image's non-ANY feature is not matching with "
- "the Environment feature's non-ANY value \t[Image: "
- "%s]\t:\t[Environment: %s]\n",
- ImgTID.data(), EnvTID.data());
- return false;
- }
- }
-
- // Image is compatible if all features of Environment are:
- // - either, present in the Image's features map with the same sign,
- // - or, the feature is missing from Image's features map i.e. it is
- // set to ANY
- DP("Compatible: Target IDs are compatible \t[Image: %s]\t:\t[Environment: "
- "%s]\n",
- ImgTID.data(), EnvTID.data());
- return true;
-}
-
extern "C" {
int32_t __tgt_rtl_is_valid_binary(__tgt_device_image *Image) {
return elfMachineIdIsAmdgcn(Image);
}
-int32_t __tgt_rtl_is_valid_binary_info(__tgt_device_image *image,
- __tgt_image_info *info) {
- if (!__tgt_rtl_is_valid_binary(image))
- return false;
-
- // A subarchitecture was not specified. Assume it is compatible.
- if (!info->Arch)
- return true;
-
- int32_t NumberOfDevices = __tgt_rtl_number_of_devices();
-
- for (int32_t DeviceId = 0; DeviceId < NumberOfDevices; ++DeviceId) {
- __tgt_rtl_init_device(DeviceId);
- hsa_agent_t agent = DeviceInfo.HSAAgents[DeviceId];
- hsa_status_t err = hsa_agent_iterate_isas(agent, GetIsaInfo, &DeviceId);
- if (err != HSA_STATUS_SUCCESS) {
- DP("Error iterating ISAs\n");
- return false;
- }
- if (!IsImageCompatibleWithEnv(info->Arch, DeviceInfo.TargetID[DeviceId]))
- return false;
- }
- DP("Image has Target ID compatible with the current environment: %s\n",
- info->Arch);
- return true;
-}
-
int __tgt_rtl_number_of_devices() {
// If the construction failed, no methods are safe to call
if (DeviceInfo.ConstructionSucceeded) {
More information about the Openmp-commits
mailing list