Skip to content

Commit 995a496

Browse files
ThorBlronlieb
authored andcommitted
Re-implemented the method to return the sysem's XNACK status. Instead of using ROCt, the envvar HSA_XNACK and ther kernel parameter noretry is used. Removed dependencies on ROCt
Change-Id: I768d4566df664ff7fe45a8ed932d5905b6ae9b09
1 parent f857af4 commit 995a496

File tree

3 files changed

+31
-24
lines changed

3 files changed

+31
-24
lines changed

openmp/libomptarget/plugins-nextgen/amdgpu/CMakeLists.txt

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,6 @@ if (NOT LIBOMPTARGET_BUILD_AMDGPU_PLUGIN)
1919
return()
2020
endif()
2121

22-
# libhsakmt.a
23-
find_library(HSAKMT_LIB libhsakmt.a REQURIED HINTS ${CMAKE_INSTALL_PREFIX} PATHS /opt/rocm)
24-
get_filename_component(HSAKMT_LIB_PATH ${HSAKMT_LIB} DIRECTORY)
25-
link_directories (${HSAKMT_LIB_PATH})
26-
27-
# lib_amdgpu
28-
pkg_check_modules(drm_amdgpu REQUIRED IMPORTED_TARGET libdrm_amdgpu)
29-
30-
# lib_drm
31-
pkg_check_modules(drm REQUIRED IMPORTED_TARGET libdrm)
32-
33-
# libnuma
34-
find_library(numa libnuma.so REQUIRED HINTS /usr/lib/x86_64-linux-gnu/)
35-
3622
# as of rocm-3.7, hsa is installed with cmake packages and kmt is found via hsa
3723
find_package(hsa-runtime64 QUIET 1.2.0 HINTS ${CMAKE_INSTALL_PREFIX} PATHS /opt/rocm)
3824

@@ -117,7 +103,7 @@ add_dependencies(omptarget.rtl.amdgpu.nextgen amdgcn_hostexec_services)
117103
if (LIBOMP_HAVE_VERSION_SCRIPT_FLAG)
118104
target_link_libraries(
119105
omptarget.rtl.amdgpu.nextgen
120-
PRIVATE hsakmt
106+
# PRIVATE hsakmt
121107
PRIVATE drm_amdgpu
122108
PRIVATE drm
123109
PRIVATE numa

openmp/libomptarget/plugins-nextgen/amdgpu/src/rtl.cpp

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
#include "UtilitiesRTL.h"
3030
#include "omptarget.h"
3131

32-
#include "hsakmt/hsakmt.h"
32+
#include "hsakmt/hsakmt.h"
3333

3434
#include "print_tracing.h"
3535

@@ -3491,7 +3491,6 @@ struct AMDGPUPluginTy final : public GenericPluginTy {
34913491
NoMapChecks = BoolEnvar("OMPX_DISABLE_MAPS", true);
34923492
DisableUsmMaps = BoolEnvar("OMPX_DISABLE_USM_MAPS", false);
34933493
HsaXnack = BoolEnvar("HSA_XNACK", false);
3494-
IsHsaXnackDefined = HsaXnack.isPresent();
34953494
}
34963495

34973496
void setUpEnv() override final {
@@ -3647,12 +3646,7 @@ struct AMDGPUPluginTy final : public GenericPluginTy {
36473646
}
36483647

36493648
bool IsXnackEnabled() const {
3650-
// -1 instructs the runtime to query the XNACK status without modifying it.
3651-
int32_t enable = -1;
3652-
KMT_EXPECT_SUCCESS(hsaKmtOpenKFD());
3653-
KMT_EXPECT_SUCCESS(hsaKmtGetXNACKMode(&enable));
3654-
KMT_EXPECT_SUCCESS(hsaKmtCloseKFD());
3655-
return (enable > 0);
3649+
return ((HsaXnack.get()) || (utils::IsXnackEnabledViaKernelParam()));
36563650
}
36573651

36583652
bool checkForDeviceByGFXName(const llvm::StringRef GfxLookUpName) {
@@ -3705,7 +3699,6 @@ struct AMDGPUPluginTy final : public GenericPluginTy {
37053699
BoolEnvar NoMapChecks;
37063700
BoolEnvar DisableUsmMaps;
37073701
BoolEnvar HsaXnack;
3708-
bool IsHsaXnackDefined{false};
37093702

37103703
// Set by OMPX_APU_MAPS environment variable.
37113704
// If set, maps cause no copy operations. USM is used instead. Allocated

openmp/libomptarget/plugins-nextgen/amdgpu/utils/UtilitiesRTL.h

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,34 @@ extractXnackModeFromBinary(__tgt_device_image *TgtImage) {
199199
return XNACK_MINUS;
200200
}
201201

202+
bool IsXnackEnabledViaKernelParam() {
203+
204+
ErrorOr<std::unique_ptr<MemoryBuffer>> FileOrError =
205+
MemoryBuffer::getFileAsStream("/proc/cmdline");
206+
207+
if (std::error_code ErrorCode = FileOrError.getError()) {
208+
FAILURE_MESSAGE("Cannot open /proc/cmdline : %s\n",
209+
ErrorCode.message().c_str());
210+
return false;
211+
}
212+
213+
StringRef FileContent = (FileOrError.get())->getBuffer();
214+
215+
StringRef RefString("amdgpu.noretry=");
216+
int SizeOfRefString = RefString.size();
217+
218+
size_t Pos = FileContent.find_insensitive(RefString);
219+
// Is noretry defined?
220+
if (Pos != StringRef::npos) {
221+
bool NoRetryValue = FileContent[Pos + SizeOfRefString] - '0';
222+
// is noretry set to 0
223+
if (!NoRetryValue)
224+
return true;
225+
}
226+
227+
return false;
228+
}
229+
202230
void checkImageCompatibilityWithSystemXnackMode(__tgt_device_image *TgtImage,
203231
bool IsXnackEnabled) {
204232
XnackBuildMode ImageXnackMode = utils::extractXnackModeFromBinary(TgtImage);

0 commit comments

Comments
 (0)