[v0.11] Adding uarch backend for intel iGPUs

This commit is contained in:
Dr-Noob
2021-11-26 12:52:45 +01:00
parent ce004725ad
commit 8740337145
16 changed files with 176 additions and 48 deletions

View File

@@ -20,6 +20,8 @@ struct gpu_list* get_gpu_list() {
list->gpus = (struct gpu_info**) malloc(sizeof(struct info*) * MAX_GPUS);
#ifdef BACKEND_CUDA
bool valid = true;
while(valid) {
list->gpus[idx] = get_gpu_info_cuda(idx);
if(list->gpus[idx] != NULL) idx++;

View File

@@ -2,33 +2,39 @@
#include "pci.hpp"
#include <cstddef>
/*
* doc: https://wiki.osdev.org/PCI#Class_Codes
* https://pci-ids.ucw.cz/read/PC
*/
#define VENDOR_ID_NVIDIA 0x10de
#define CLASS_VGA_CONTROLLER 0x0300
uint16_t pciutils_get_pci_vendor_id(struct pci_dev *devices) {
uint16_t pciutils_get_pci_vendor_id(struct pci_dev *devices, int id) {
for(struct pci_dev *dev=devices; dev != NULL; dev=dev->next) {
if(dev->vendor_id == VENDOR_ID_NVIDIA && dev->device_class == CLASS_VGA_CONTROLLER) {
if(dev->vendor_id == id && dev->device_class == CLASS_VGA_CONTROLLER) {
return dev->vendor_id;
}
}
printErr("Unable to find a CUDA device using pciutils");
printErr("Unable to find a valid device for id %d using pciutils", id);
return 0;
}
uint16_t pciutils_get_pci_device_id(struct pci_dev *devices) {
uint16_t pciutils_get_pci_device_id(struct pci_dev *devices, int id) {
for(struct pci_dev *dev=devices; dev != NULL; dev=dev->next) {
if(dev->vendor_id == VENDOR_ID_NVIDIA && dev->device_class == CLASS_VGA_CONTROLLER) {
if(dev->vendor_id == id && dev->device_class == CLASS_VGA_CONTROLLER) {
return dev->device_id;
}
}
printErr("Unable to find a CUDA device using pciutils");
printErr("Unable to find a valid device for id %d using pciutils", id);
return 0;
}
struct pci* get_pci_from_pciutils(struct pci_dev *devices, int id) {
struct pci* pci = (struct pci*) emalloc(sizeof(struct pci));
pci->vendor_id = pciutils_get_pci_vendor_id(devices, id);
pci->device_id = pciutils_get_pci_device_id(devices, id);
return pci;
}
struct pci_dev *get_pci_devices_from_pciutils() {
struct pci_access *pacc;
struct pci_dev *dev;

View File

@@ -6,8 +6,12 @@ extern "C" {
#include <pci/pci.h>
}
uint16_t pciutils_get_pci_vendor_id(struct pci_dev *devices);
uint16_t pciutils_get_pci_device_id(struct pci_dev *devices);
struct pci {
uint16_t vendor_id;
uint16_t device_id;
};
struct pci* get_pci_from_pciutils(struct pci_dev *devices, int id);
struct pci_dev *get_pci_devices_from_pciutils();
#endif

20
src/common/uarch.hpp Normal file
View File

@@ -0,0 +1,20 @@
#ifndef __COMMON_UARCH__
#define __COMMON_UARCH__
typedef uint32_t GPUCHIP;
typedef uint32_t MICROARCH;
struct uarch {
int32_t cc_major;
int32_t cc_minor;
int32_t compute_capability;
MICROARCH uarch;
GPUCHIP chip;
int32_t process;
char* uarch_str;
char* chip_str;
};
#endif