Channel: C++ Academy
π Π₯ΠΎΡΠΈΡΠ΅ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΡΡ Π·Π°Π³ΡΡΠ·ΠΊΡ Π²Π°ΡΠ΅ΠΉ NVIDIA GPU ΠΏΡΡΠΌΠΎ ΠΈΠ· C++?
ΠΠΎΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π½Π° C++, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ
π Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ:
β’ Π£ΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ Π΄ΡΠ°ΠΉΠ²Π΅Ρ NVIDIA ΠΈ ΡΡΠΈΠ»ΠΈΡΠ°
β’ C++17 ΠΈΠ»ΠΈ Π²ΡΡΠ΅
π ΠΠΎΠ΄:
π¦ ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ:
bash
ΠΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ
Π Π΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ
g++ gpu_monitor.cpp -o gpu_monitor -std=c++17
π ΠΡΠ²ΠΎΠ΄:
π§ ΠΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ:
β’ ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° GPU Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ
β’ ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Π² Π±ΡΠΊΠ΅Π½Π΄Ρ, Π±ΠΎΡΡ, ΡΠΈΡΡΠ΅ΠΌΡ Π»ΠΎΠ³Π³ΠΈΠ½Π³Π°
β’ ΠΡΠ³ΠΊΠΎΠΉ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ML/AI-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° 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++-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ²: ΡΠ΅ΠΏΠ΅ΡΡ Π΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½ΡΠΈΠ½Ρ ΠΈ ΡΠ΄ΠΎΠ±Π½ΡΡ ΠΎΠ±ΡΡΡΠΎΠΊ Π±Π΅Π· Π»ΠΈΡΠ½Π΅Π³ΠΎ ΡΠ°Π±Π»ΠΎΠ½Π½ΠΎΠ³ΠΎ Π°Π΄Π°.
ΠΠΎΠ²ΠΎΠ΅:
β ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΠΈ ΠΏΠ°ΠΏΠΊΠ°ΠΌΠΈ
-
-
β ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ UDP:
-
β Π£Π»ΡΡΡΠ΅Π½ΠΈΡ Π² ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅:
-
- Π£Π±ΡΠ°Π½Ρ Π»ΠΈΡΠ½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΏΠ°ΠΌΡΡΠΈ
π https://pagghiu.github.io/site/blog/2025-06-30-SaneCppLibrariesUpdate.html
π https://github.com/Pagghiu/SaneCppLibraries/releases/tag/release%2F2025%2F06
@cpluspluc
π§ ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ Π·Π°ΠΊΡΡΠ²Π°ΡΡ Π±ΠΎΠ»Ρ 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
ΠΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΡΡΠΈΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠ΅ΠΉ: Π² C++ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΠΎΠ΄ΠΈΠ½ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ», Π° Python-ΠΊΠΎΠ΄ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ. ΠΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π³ΡΠ°ΡΠΈΠΊΠΈ, flame graphs ΠΈ Π»ΠΎΠ³ΠΈ Ρ Π½Π°Π½ΠΎΡΠ΅ΠΊΡΠ½Π΄Π½ΡΠΌ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ.
π€ GitHub
@cpluspluc
HTML Embed Code: