tgoop.com/cpluspluc/1125
Create:
Last Update:
Last Update:
π Π₯ΠΎΡΠΈΡΠ΅ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΡΡ Π·Π°Π³ΡΡΠ·ΠΊΡ Π²Π°ΡΠ΅ΠΉ NVIDIA GPU ΠΏΡΡΠΌΠΎ ΠΈΠ· C++?
ΠΠΎΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π½Π° C++, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ nvidia-smi
ΡΠ΅ΡΠ΅Π· ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ GPU ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ.
π Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ:
β’ Π£ΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ Π΄ΡΠ°ΠΉΠ²Π΅Ρ NVIDIA ΠΈ ΡΡΠΈΠ»ΠΈΡΠ° nvidia-smi
β’ C++17 ΠΈΠ»ΠΈ Π²ΡΡΠ΅
π ΠΠΎΠ΄:
#include <iostream>
#include <cstdlib>
#include <memory>
#include <array>
void get_gpu_utilization() {
std::array<char, 128> buffer;
std::string result;
std::unique_ptr<FILE, decltype(&pclose)> pipe(
popen("nvidia-smi --query-gpu=utilization.gpu,memory.used,memory.total --format=csv,nounits,noheader", "r"),
pclose
);
if (!pipe) {
std::cerr << "β ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ nvidia-smi" << std::endl;
return;
}
int gpu_id = 0;
while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr) {
std::string line(buffer.data());
size_t pos1 = line.find(',');
size_t pos2 = line.rfind(',');
std::string util = line.substr(0, pos1);
std::string mem_used = line.substr(pos1 + 1, pos2 - pos1 - 1);
std::string mem_total = line.substr(pos2 + 1);
std::cout << "π₯ GPU " << gpu_id++ << ": " << util << "% load | "
<< mem_used << " MiB / " << mem_total << " MiB";
}
}
int main() {
get_gpu_utilization();
return 0;
}
π¦ ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ:
bash
ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ
Π Π΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ
g++ gpu_monitor.cpp -o gpu_monitor -std=c++17
π ΠΡΠ²ΠΎΠ΄:
π₯ GPU 0: 17% load | 512 MiB / 8192 MiB
π§ ΠΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ:
β’ ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° GPU Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ
β’ ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Π² Π±ΡΠΊΠ΅Π½Π΄Ρ, Π±ΠΎΡΡ, ΡΠΈΡΡΠ΅ΠΌΡ Π»ΠΎΠ³Π³ΠΈΠ½Π³Π°
β’ ΠΡΠ³ΠΊΠΎΠΉ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ML/AI-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° C++
BY C++ Academy
Share with your friend now:
tgoop.com/cpluspluc/1125