Запустите nvidia-smi от c - PullRequest
       28

Запустите nvidia-smi от c

0 голосов
/ 13 марта 2020

Я пытаюсь получить вывод команды nvidia-smi из c, используя popen как здесь

C: запустить системную команду и получить вывод?

Команда хранится в строке буфера, и эта же строка используется для хранения вывода:

    const size_t pid = getpid();

    char pid_s[1000];

    sprintf(pid_s, "%lu", pid);

    FILE *file_command = NULL;

    char buffer[1000];

    sprintf(buffer, "nvidia-smi | grep %s |awk '{print $6}'", pid_s);

    file_command = popen(buffer, "r");

    if (file_command == NULL) //No error : file_command is not NULL
    {
        throw std::runtime_error("Command failed to execute");
    }

    sleep(4); //To get time for the command to be executed.

    while (fgets(buffer, sizeof(buffer), file_command) != NULL) //Read output
    {
        printf("Result from command %s \n", buffer); //Nothing printed
    }

...

Я пытаюсь получить 6-й аргумент вывода nvidia-smi которая является памятью запущенной в данный момент программы (ее pid взят из getpid ()).

Ничего не выводится на экран.

fgets возвращает NULL, хотя память была выделена на GPU (с cudaMallo c).

И я позаботился об использовании сна, как рекомендовано в этом посте

fgets возвращает ошибку FILE, возвращаемую popen

1 Ответ

0 голосов
/ 16 марта 2020

Наконец-то я нашел лучший способ получить память графического процессора из c, используя библиотеку NVML

, как предложено в этой публикации .

Использование с c довольно просто (см., Например, здесь )

...