Утечка памяти с использованием NVML от Nvidia

В проекте я использую библиотеку nvml для получения информации о графическом процессоре в системе. Я использую его для запроса имени графического процессора и UUID графического процессора. Это происходит циклично от 6 до 8 раз в минуту. Я заметил небольшую утечку памяти, которая через несколько часов приводит к сбою моего приложения. Я использую nvml для запроса имени устройства графического процессора следующим образом:

nvmlReturn_t result = nvmlInit();

nvmlDevice_t device;
result = nvmlDeviceGetHandleByIndex(deviceNum, &device);

char nameBuffer[NVML_DEVICE_NAME_BUFFER_SIZE];
result = nvmlDeviceGetName(device, nameBuffer, NVML_DEVICE_NAME_BUFFER_SIZE);

result = nvmlShutdown();

Но даже если я изменю код, просто запустив и выключив nvml, используемая память все равно постоянно увеличивается:

nvmlReturn_t result = nvmlInit();

// nvmlDevice_t device;
// result = nvmlDeviceGetHandleByIndex(deviceNum, &device);

// char nameBuffer[NVML_DEVICE_NAME_BUFFER_SIZE];
// result = nvmlDeviceGetName(device, nameBuffer, NVML_DEVICE_NAME_BUFFER_SIZE);

result = nvmlShutdown();

Правильно ли я использую API или что-то не так? Есть ли известная проблема в библиотеке nvml?

Информация о системе:
ОС: Windows 10
Драйвер NVIDIA: 536.40
Куда: 12,2

Если вы считаете, что нашли ошибку, лучше сообщить об этом непосредственно NVIDIA, чем задавать вопрос здесь. Конечно, вам потребуется предоставить гораздо больше информации (ОС, версия драйвера, компилятор, минимальный воспроизводимый пример и т. д.), чем вы это сделали здесь.

talonmies 09.07.2024 22:52

Я создал простой файл C, который просто вызывает nvmlInit() и nvmlShutdown() в цикле. Я не вижу разницы в использовании памяти между 100, 1000 или 10 000 итерациями.

Homer512 09.07.2024 22:54

@Homer512 Homer512, возможно, это зависит от версии драйвера/библиотеки. Какую ОС вы использовали для тестирования? Я использую Windows 10.

Jakob 09.07.2024 23:02

@talonmies Я согласен. Но на данный момент я не уверен, нашел ли я ошибку. Возможно, это просто мое неправильное использование.

Jakob 09.07.2024 23:03

Я использую Linux с cuda-12.3.2 и драйвером 550.78. Вероятно, немного старше того, что у вас есть

Homer512 09.07.2024 23:05

Я добавил информацию об ОС, драйвере Nvidia и версии cuda, чтобы задать вопрос. @Homer512 Homer512 моя версия cuda и драйвер немного старше вашей.

Jakob 09.07.2024 23:15

Есть ли конкретная причина, по которой вы вызываете инициализацию и завершение работы каждый раз, а не только один раз?

Botje 10.07.2024 11:14

Да. Это часть dll, работающая как плагин в программном обеспечении, которым я не управляю. При каждом вызове он загружает движок tensorrt из файла. После загрузки он проверяет, соответствует ли графический процессор системы тому, на котором был построен движок.

Jakob 10.07.2024 13:37

Дальнейшие тесты сегодня показали, что существует проблема с драйвером nvidia 536.x. Более подробный ответ напишу позже.

Jakob 10.07.2024 13:40
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
9
94
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот простое решение проблемы:

Я тестировал с помощью простого файла c от Homer512 из комментариев (просто запускаем и выключаем nvml в цикле). Со временем тестовой системе не хватило памяти.

Затем я обновил драйвер Nvidia до последней версии (556.12). Кажется, это решает проблему.

Другие вопросы по теме

Ошибка сегментации (сброс ядра) при чтении двоичного файла, memmove-vec-unaligned-erms.S: Нет такого файла или каталога
Утечка памяти Haskell, работающая с зонированным временем и добавляющая/вычитающая секунды
Утечка памяти с использованием статического члена unique_ptr
Утечка памяти, которую не устраняет GC в отношении .Net Entity Framework версии 8 (консольное приложение C# .Net8.02)
ASAN показывает утечку памяти через конфигурацию отладки CMAKE, но не показывает утечку памяти через конфигурацию выпуска CMAKE. Почему?
Каковы возможные объекты GDI, которые могут быть обнаружены, но не перечислены как известные типы объектов GDI?
Кадр сопрограммы автоматически уничтожается и освобождается (т.е. освобождается выделенный кадр?) после co_return?
Как исправить IntersectionObserver, вызывающий утечку памяти в моем веб-приложении OpenLayers?
Деструктор связанного списка Object Pascal оставляет один блок несвободным
Np.load() занимает слишком много памяти