This commit is contained in:
Dr-Noob
2025-10-14 08:54:25 +02:00
parent 2d74d66f79
commit d83904e28e
4 changed files with 23 additions and 11 deletions

View File

@@ -11,6 +11,7 @@
#include "../intel/uarch.hpp"
#include "../intel/intel.hpp"
#include "../hsa/hsa.hpp"
#include "../hsa/uarch.hpp"
#include "../cuda/cuda.hpp"
#include "../cuda/uarch.hpp"

View File

@@ -108,7 +108,7 @@ struct gpu_info* get_gpu_info_hsa(struct pci_dev *devices, int gpu_idx) {
return NULL;
}
if (info.vendor_name != "AMD") {
if (strcmp(info.vendor_name, "AMD") != 0) {
printErr("HSA vendor name is: '%s'. Only AMD is supported!", info.vendor_name);
return NULL;
}
@@ -118,10 +118,9 @@ struct gpu_info* get_gpu_info_hsa(struct pci_dev *devices, int gpu_idx) {
gpu->topo_h = get_topology_info(info);
gpu->name = (char *) emalloc(sizeof(char) * (strlen(info.device_mkt_name) + 1));
strcpy(gpu->name, info.device_mkt_name);
gpu->arch = get_uarch_from_hsa(gpu);
gpu->arch = get_uarch_from_hsa(gpu, info.gpu_name);
if (gpu->arch->TARGET_UNKNOWN_HSA) {
printErr("Unknown LLVM target: '%s'", gpu->name);
if (gpu->arch == NULL) {
return NULL;
}

View File

@@ -1,3 +1,15 @@
// TODO: Cleanup includes
#include <cstdlib>
#include <cstdint>
#include <cstddef>
#include <cstdio>
#include <cstring>
#include "../common/uarch.hpp"
#include "../common/global.hpp"
#include "../common/gpu.hpp"
#include "chips.hpp"
// MICROARCH values
enum {
UARCH_UNKNOWN,
@@ -225,7 +237,7 @@ GPUCHIP get_chip_from_target_hsa(int32_t target) {
#define CHECK_TGT_STR_START if (false) {}
#define CHECK_TGT_STR(target, llvm_target, chip) \
else if (target == llvm_target) return chip;
else if (strcmp(target, llvm_target) == 0) return chip;
#define CHECK_TGT_STR_END else { return TARGET_UNKNOWN_HSA; }
// Maps the LLVM target string to the enum value
@@ -259,13 +271,13 @@ int32_t get_llvm_target_from_str(char* target) {
CHECK_TGT_STR_END
}
struct uarch* get_uarch_from_hsa(struct gpu_info* gpu) {
struct uarch* get_uarch_from_hsa(struct gpu_info* gpu, char* gpu_name) {
struct uarch* arch = (struct uarch*) emalloc(sizeof(struct uarch));
arch->llvm_target = get_llvm_target_from_str(gpu->name);
arch->llvm_target = get_llvm_target_from_str(gpu_name);
if (arch->llvm_target == TARGET_UNKNOWN_HSA) {
// Return early, error will be handled by the caller.
return arch;
printErr("Unknown LLVM target: '%s'", gpu_name);
return NULL;
}
arch->chip_str = NULL;
@@ -276,7 +288,7 @@ struct uarch* get_uarch_from_hsa(struct gpu_info* gpu) {
}
// TODO: Shouldnt we check that arch->uarch is valid?
char* get_str_uarch_hsa(struct uarch* arch) {
const char* get_str_uarch_hsa(struct uarch* arch) {
return uarch_str[arch->uarch];
}

View File

@@ -5,7 +5,7 @@
struct uarch;
struct uarch* get_uarch_from_hsa(struct gpu_info* gpu);
struct uarch* get_uarch_from_hsa(struct gpu_info* gpu, char* gpu_name);
char* get_str_uarch_hsa(struct uarch* arch);
char* get_str_process(struct uarch* arch); // TODO: Shouldnt we define this in the cpp?
void free_uarch_struct(struct uarch* arch);