[v0.21] Check that topology is valid in Intel backend. Print informative message if no valid topology is found

This commit is contained in:
Dr-Noob
2021-12-28 15:56:44 +01:00
parent 8d2f50b398
commit 9d2a07146a
3 changed files with 15 additions and 4 deletions

View File

@@ -147,9 +147,17 @@ char* get_str_peak_performance_tensor(struct gpu_info* gpu) {
}
char* get_str_generic(int32_t data) {
char* str;
if(data < 0) {
str = (char *) emalloc(sizeof(char) * (strlen(STRING_UNKNOWN) + 1));
strncpy(str, STRING_UNKNOWN, strlen(STRING_UNKNOWN) + 1);
return str;
}
// Largest int is 10, +1 for possible negative, +1 for EOL
uint32_t max_size = 12;
char* dummy = (char *) ecalloc(max_size, sizeof(char));
snprintf(dummy, max_size, "%d", data);
return dummy;
str = (char *) ecalloc(max_size, sizeof(char));
snprintf(str, max_size, "%d", data);
return str;
}

View File

@@ -9,6 +9,7 @@
#include "../common/global.hpp"
int64_t get_peak_performance_intel(struct gpu_info* gpu) {
if(gpu->topo_i->eu_subslice < 0 || gpu->topo_i->subslices < 0) return -1;
return gpu->freq * 1000000 * gpu->topo_i->eu_subslice * gpu->topo_i->subslices * 8 * 2;
}
@@ -48,5 +49,7 @@ bool print_gpu_intel(struct gpu_info* gpu) {
}
char* get_str_eu(struct gpu_info* gpu) {
if(gpu->topo_i->subslices < 0 || gpu->topo_i->eu_subslice < 0)
return get_str_generic(-1);
return get_str_generic(gpu->topo_i->subslices * gpu->topo_i->eu_subslice);
}

View File

@@ -75,7 +75,7 @@ static const char *gt_str[] = {
#define CHECK_TOPO_START if (false) {}
#define CHECK_TOPO(topo, arch, uarch_, gt_, eu_sub, sub, sli) \
else if(arch->uarch == uarch_ && arch->gt == gt_) fill_topo(topo, eu_sub, sub, sli);
#define CHECK_TOPO_END else { printBug("TODOO"); fill_topo(topo, -1, -1, -1); }
#define CHECK_TOPO_END else { printBug("get_topology_info: Invalid uarch and gt combination: '%s' and '%s'", arch->chip_str, get_str_gt(arch)); fill_topo(topo, UNK, UNK, UNK); }
void fill_topo(struct topology_i* topo_i, int32_t eu_sub, int32_t sub, int32_t sli) {
topo_i->slices = sli;