NVctrl fetching

pull/109/head
FlightlessMango 4 years ago
parent 8ee0ec2c3f
commit aaaf30b807

@ -0,0 +1,81 @@
#include <stdio.h>
#include <regex>
#include "nvctrl.h"
#include "loaders/loader_nvctrl.h"
#include <iostream>
Display *display = XOpenDisplay(NULL);
libnvctrl_loader nvctrl("libXNVCtrl.so");
struct nvctrlInfo nvctrl_info;
char* get_attr_target_string(int attr, int target_type, int target_id) {
char* c;
if (!nvctrl.XNVCTRLQueryTargetStringAttribute(display, target_type, target_id, 0, attr, &c)) {
fprintf(stderr, "Failed to query attribute.");
}
return c;
}
void getNvctrlInfo(){
char* utilization = get_attr_target_string(NV_CTRL_STRING_GPU_UTILIZATION, NV_CTRL_TARGET_TYPE_GPU, 0);
char* s = utilization;
strtok(s, ",");
while (s != NULL)
{
std::string str = s;
if (str.find("graphics") != std::string::npos){
str = std::regex_replace(str, std::regex(R"([^0-9.])"), "");
nvctrl_info.load = std::stoi(str);
}
s = strtok (NULL, ",");
}
char* freq = get_attr_target_string(NV_CTRL_STRING_GPU_CURRENT_CLOCK_FREQS, NV_CTRL_TARGET_TYPE_GPU, 0);
char* freq_str = freq;
strtok(freq_str, ",");
while (freq_str != NULL)
{
std::string str = freq_str;
if (str.find("nvclock=") != std::string::npos){
str = std::regex_replace(str, std::regex(R"([^0-9.])"), "");
nvctrl_info.CoreClock = std::stoi(str);
}
if (str.find("memclock=") != std::string::npos){
str = std::regex_replace(str, std::regex(R"([^0-9.])"), "");
nvctrl_info.MemClock = std::stoi(str);
}
freq_str = strtok (NULL, ",");
}
printf("coreclock: %i\n", nvctrl_info.CoreClock);
printf("memclock: %i\n", nvctrl_info.MemClock);
int temp;
nvctrl.XNVCTRLQueryTargetAttribute(display,
NV_CTRL_TARGET_TYPE_GPU,
0,
0,
NV_CTRL_GPU_CORE_TEMPERATURE,
&temp);
nvctrl_info.temp = temp;
int memtotal;
nvctrl.XNVCTRLQueryTargetAttribute(display,
NV_CTRL_TARGET_TYPE_GPU,
0,
0,
NV_CTRL_TOTAL_DEDICATED_GPU_MEMORY,
&memtotal);
nvctrl_info.memoryTotal = memtotal;
int memused;
nvctrl.XNVCTRLQueryTargetAttribute(display,
NV_CTRL_TARGET_TYPE_GPU,
0,
0,
NV_CTRL_USED_DEDICATED_GPU_MEMORY,
&memused);
nvctrl_info.memoryUsed = memused;
}

@ -0,0 +1,12 @@
struct nvctrlInfo{
int load;
int temp;
float memoryUsed;
float memoryTotal;
int MemClock;
int CoreClock;
};
extern struct nvctrlInfo nvctrl_info;
void getNvctrlInfo(void);
char *get_attr_target_string(int attr, int target_type, int target_id);
Loading…
Cancel
Save