SWDEV-339150 - [catch2][dtest] Updating test Unit_hipGetDeviceAttribute_CheckFineGrainSupport: (#2846)
This PR fixes the failure of test Unit_hipGetDeviceAttribute_CheckFineGrainSupport on MI100
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
a3ed68d072
Коммит
a772958efd
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2021 Advanced Micro Devices, Inc. All rights reserved.
|
Copyright (c) 2022 Advanced Micro Devices, Inc. All rights reserved.
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
@@ -22,10 +22,12 @@ THE SOFTWARE.
|
|||||||
// Test the device info API extensions for HIP
|
// Test the device info API extensions for HIP
|
||||||
|
|
||||||
#include <hip_test_common.hh>
|
#include <hip_test_common.hh>
|
||||||
|
#include <string.h>
|
||||||
|
#ifdef __linux__
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static hipError_t test_hipDeviceGetAttribute(int deviceId,
|
static hipError_t test_hipDeviceGetAttribute(int deviceId,
|
||||||
hipDeviceAttribute_t attr,
|
hipDeviceAttribute_t attr,
|
||||||
int expectedValue = -1) {
|
int expectedValue = -1) {
|
||||||
@@ -234,15 +236,78 @@ TEST_CASE("Unit_hipGetDeviceAttribute_CheckAttrValues") {
|
|||||||
/**
|
/**
|
||||||
* Validate the hipDeviceAttributeFineGrainSupport property in AMD.
|
* Validate the hipDeviceAttributeFineGrainSupport property in AMD.
|
||||||
*/
|
*/
|
||||||
|
#ifdef __linux__
|
||||||
#if HT_AMD
|
#if HT_AMD
|
||||||
|
#define COMMAND_LEN 256
|
||||||
|
#define BUFFER_LEN 512
|
||||||
|
|
||||||
|
static bool isRocmPathSet() {
|
||||||
|
FILE *fpipe;
|
||||||
|
char const *command = "echo $ROCM_PATH";
|
||||||
|
fpipe = popen(command, "r");
|
||||||
|
|
||||||
|
if (fpipe == nullptr) {
|
||||||
|
printf("Unable to create command\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
char command_op[BUFFER_LEN];
|
||||||
|
if (fgets(command_op, BUFFER_LEN, fpipe)) {
|
||||||
|
size_t len = strlen(command_op);
|
||||||
|
if (len > 1) { // This is because fgets always adds newline character
|
||||||
|
pclose(fpipe);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pclose(fpipe);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// This is AMD specific property test
|
// This is AMD specific property test
|
||||||
TEST_CASE("Unit_hipGetDeviceAttribute_CheckFineGrainSupport") {
|
TEST_CASE("Unit_hipGetDeviceAttribute_CheckFineGrainSupport") {
|
||||||
int deviceId;
|
int deviceId;
|
||||||
int deviceCount = 0;
|
int deviceCount = 0;
|
||||||
|
FILE *fpipe;
|
||||||
|
char command[COMMAND_LEN] = "";
|
||||||
|
const char *rocmpath = nullptr;
|
||||||
|
if (isRocmPathSet()) {
|
||||||
|
// For STG2 testing where /opt/rocm path is not present
|
||||||
|
rocmpath = "$ROCM_PATH/bin/rocminfo";
|
||||||
|
} else {
|
||||||
|
// Check if the rocminfo tool exists
|
||||||
|
rocmpath = "/opt/rocm/bin/rocminfo";
|
||||||
|
}
|
||||||
|
snprintf(command, COMMAND_LEN, "%s", rocmpath);
|
||||||
|
strncat(command, " | grep -i \"Segment:\\|Uuid:\"", COMMAND_LEN);
|
||||||
|
// Execute the rocminfo command and extract the segment info
|
||||||
|
fpipe = popen(command, "r");
|
||||||
|
if (fpipe == nullptr) {
|
||||||
|
printf("Unable to create command file\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
HIP_CHECK(hipGetDeviceCount(&deviceCount));
|
HIP_CHECK(hipGetDeviceCount(&deviceCount));
|
||||||
REQUIRE(deviceCount > 0);
|
assert(deviceCount > 0);
|
||||||
// Check hipDeviceAttributeFineGrainSupport for all available device
|
int *fine_grained_val = new int[deviceCount];
|
||||||
// in system.
|
assert(fine_grained_val != nullptr);
|
||||||
|
bool *gpuFound = new bool[deviceCount];
|
||||||
|
assert(gpuFound != nullptr);
|
||||||
|
for (int i = 0; i < deviceCount; i++) {
|
||||||
|
gpuFound[i] = false;
|
||||||
|
fine_grained_val[i] = 0; // Initialize to 0
|
||||||
|
}
|
||||||
|
char command_op[BUFFER_LEN];
|
||||||
|
int count = -1;
|
||||||
|
// Extract each segment flags
|
||||||
|
while (fgets(command_op, BUFFER_LEN, fpipe)) {
|
||||||
|
std::string rocminfo_line(command_op);
|
||||||
|
if ((std::string::npos != rocminfo_line.find("GPU-")) &&
|
||||||
|
(std::string::npos != rocminfo_line.find("Uuid:"))) {
|
||||||
|
count++;
|
||||||
|
gpuFound[count] = true;
|
||||||
|
} else if (gpuFound[count] &&
|
||||||
|
(std::string::npos != rocminfo_line.find("FLAGS: FINE GRAINED"))) {
|
||||||
|
fine_grained_val[count] = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
for (int dev = 0; dev < deviceCount; dev++) {
|
for (int dev = 0; dev < deviceCount; dev++) {
|
||||||
HIP_CHECK(hipSetDevice(dev));
|
HIP_CHECK(hipSetDevice(dev));
|
||||||
HIP_CHECK(hipGetDevice(&deviceId));
|
HIP_CHECK(hipGetDevice(&deviceId));
|
||||||
@@ -250,21 +315,15 @@ TEST_CASE("Unit_hipGetDeviceAttribute_CheckFineGrainSupport") {
|
|||||||
HIP_CHECK(hipGetDeviceProperties(&props, deviceId));
|
HIP_CHECK(hipGetDeviceProperties(&props, deviceId));
|
||||||
int value = 0;
|
int value = 0;
|
||||||
HIP_CHECK(hipDeviceGetAttribute(&value,
|
HIP_CHECK(hipDeviceGetAttribute(&value,
|
||||||
hipDeviceAttributeFineGrainSupport, deviceId));
|
hipDeviceAttributeFineGrainSupport, deviceId));
|
||||||
std::string gpu_arch_name(props.gcnArchName);
|
REQUIRE(value == fine_grained_val[dev]);
|
||||||
if (std::string::npos != gpu_arch_name.find("gfx90a")) {
|
|
||||||
// Current GPU is gfx90a architecture
|
|
||||||
REQUIRE(value == 1);
|
|
||||||
} else if (std::string::npos != gpu_arch_name.find("gfx906")) {
|
|
||||||
// Current GPU is gfx906 architecture
|
|
||||||
REQUIRE(value == 0);
|
|
||||||
} else if (std::string::npos != gpu_arch_name.find("gfx908")) {
|
|
||||||
// Current GPU is gfx908 architecture
|
|
||||||
REQUIRE(value == 0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
// Validate hipDeviceAttributeFineGrainSupport
|
||||||
|
delete[] fine_grained_val;
|
||||||
|
delete[] gpuFound;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
/**
|
/**
|
||||||
* Validates negative scenarios for hipDeviceGetAttribute
|
* Validates negative scenarios for hipDeviceGetAttribute
|
||||||
* scenario1: pi = nullptr
|
* scenario1: pi = nullptr
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user