TG Telegram Group Link
Channel: C++ Academy
Back to Bottom
πŸš€ Π₯ΠΎΡ‚ΠΈΡ‚Π΅ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ вашСй 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++
Sane C++ Libraries β€” ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π·Π° июнь 2025

πŸ”§ Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Π·Π°ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ боль C++-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²: Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΅Ρ‰Ρ‘ большС асинхронщины ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΎΠΊ Π±Π΅Π· лишнСго шаблонного Π°Π΄Π°.

НовоС:
βœ… АсинхронныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ ΠΏΠ°ΠΏΠΊΠ°ΠΌΠΈ
- copy/remove/rename {file|folder}
- open/close/read/write file

βœ… Асинхронный UDP:
- SendTo, ReceiveFrom

βœ… Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС:
- Iterator, Watcher
- Π£Π±Ρ€Π°Π½Ρ‹ лишниС зависимости ΠΎΡ‚ памяти

πŸ”— https://pagghiu.github.io/site/blog/2025-06-30-SaneCppLibrariesUpdate.html
πŸ”— https://github.com/Pagghiu/SaneCppLibraries/releases/tag/release%2F2025%2F06

@cpluspluc
πŸ“₯ Palanteer β€” инструмСнт для Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ C++ ΠΈ Python-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΡƒΡŽ Ρ‚Π΅Π»Π΅ΠΌΠ΅Ρ‚Ρ€ΠΈΡŽ: ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠΊ выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π΄ΠΎ отслСТивания потрСблСния памяти ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ контСкста.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ минималистичной ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠ΅ΠΉ: Π² C++ достаточно ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», Π° Python-ΠΊΠΎΠ΄ анализируСтся автоматичСски. Визуализация Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ, flame graphs ΠΈ Π»ΠΎΠ³ΠΈ с наносСкундным Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ.

πŸ€– GitHub

@cpluspluc
HTML Embed Code:
2025/07/02 18:33:01
Back to Top