Use system files to look up gpu names instead of internal table

This commit is contained in:
Chris Freehill
2019-03-11 17:56:58 -05:00
والد d39752cee7
کامیت eaa5def17f
2فایلهای تغییر یافته به همراه53 افزوده شده و 4 حذف شده
-2
مشاهده پرونده
@@ -113,7 +113,6 @@ set(SMI_SRC_LIST ${SMI_SRC_LIST} "${SRC_DIR}/rocm_smi_monitor.cc")
set(SMI_SRC_LIST ${SMI_SRC_LIST} "${SRC_DIR}/rocm_smi.cc")
set(SMI_SRC_LIST ${SMI_SRC_LIST} "${SRC_DIR}/rocm_smi_power_mon.cc")
set(SMI_SRC_LIST ${SMI_SRC_LIST} "${SRC_DIR}/rocm_smi_utils.cc")
set(SMI_SRC_LIST ${SMI_SRC_LIST} "${SRC_DIR}/rocm_smi_dev_names.cc")
set(SMI_INC_LIST "${INC_DIR}/rocm_smi_device.h")
set(SMI_INC_LIST ${SMI_INC_LIST} "${INC_DIR}/rocm_smi_main.h")
@@ -122,7 +121,6 @@ set(SMI_INC_LIST ${SMI_INC_LIST} "${INC_DIR}/rocm_smi_power_mon.h")
set(SMI_INC_LIST ${SMI_INC_LIST} "${INC_DIR}/rocm_smi_utils.h")
set(SMI_INC_LIST ${SMI_INC_LIST} "${INC_DIR}/rocm_smi_common.h")
set(SMI_INC_LIST ${SMI_INC_LIST} "${INC_DIR}/rocm_smi_exception.h")
set(SMI_INC_LIST ${SMI_INC_LIST} "${INC_DIR}/rocm_smi_dev_names.h")
set(SMI_EXAMPLE_EXE "rocm_smi_ex")
+53 -2
مشاهده پرونده
@@ -51,13 +51,15 @@
#include <cstdint>
#include <unordered_map>
#include <map>
#include <fstream>
#include <iostream>
#include "rocm_smi/rocm_smi.h"
#include "rocm_smi/rocm_smi_main.h"
#include "rocm_smi/rocm_smi_device.h"
#include "rocm_smi/rocm_smi_utils.h"
#include "rocm_smi/rocm_smi_exception.h"
#include "rocm_smi/rocm_smi_dev_names.h"
#include "rocm_smi/rocm_smi64Config.h"
@@ -949,7 +951,56 @@ rsmi_dev_gpu_clk_freq_set(uint32_t dv_ind,
CATCH
}
static std::vector<std::string> pci_name_files = {
"/usr/share/misc/pci.ids",
"/usr/share/hwdata/pci.ids",
"/usr/share/pci.ids",
"/var/lib/pciutils/pci.ids"
};
// Parse pci.ids files. Comment lines have # in first column. Otherwise,
// Syntax:
// vendor vendor_name
// device device_name <-- single tab
// subvendor subdevice subsystem_name <-- two tabs
static std::string get_dev_name_from_id(uint64_t id) {
std::string ln;
std::string token1;
std::string description;
for (auto fl : pci_name_files) {
std::ifstream id_file_strm(fl);
while (std::getline(id_file_strm, ln)) {
std::istringstream ln_str(ln);
// parse line
if (ln_str.peek() == '#') {
continue;
}
if (ln[0] == '\t') {
if (ln[1] == '\t') {
if (ln[2] == '\t') {
// This is a subvendor line
}
} else { // ln[1] != '\t'
// This is a device line
ln_str >> token1;
if (std::stoul(token1, nullptr, 16) == id) {
int64_t pos = ln_str.tellg();
pos = ln.find_first_not_of("\t ", pos);
description = ln.substr(pos);
return description;
}
}
} else { // ln[0] != '\t'
// This is a vendor line
}
}
}
return description;
}
rsmi_status_t
rsmi_dev_name_get(uint32_t dv_ind, char *name, size_t len) {
TRY
@@ -967,7 +1018,7 @@ rsmi_dev_name_get(uint32_t dv_ind, char *name, size_t len) {
return ret;
}
val_str = get_dev_id_name_map(id);
val_str = get_dev_name_from_id(id);
if (val_str.size() == 0) {
ret = get_dev_mon_value_str(amd::smi::kMonName, dv_ind, -1, &val_str);