неинициализация / повторная инициализация библиотеки nvidia cuda
Мой код использует libcudart.so для выполнения некоторой работы cuda, и в середине работы я хочу иметь возможность перенести его на другую машину с помощью criu. Как мы знаем, libcudart.so/libcuda.so неявно открывает такие устройства, как / dev / nvidiactl и / dev /nvidia0, а также создает на них некоторые mmap, что не сработает. Поэтому я явно закрыл эти открытые fd и отключил эту область памяти.
Проблема в том, что при возобновлении процесса любые дальнейшие вызовы API cuda завершатся ошибкой. Я пытался повторно открыть эти файлы устройств и повторно выполнить mmap. Мой вызов mmap () для / dev /nvidia0 завершился неудачно (ошибка 22, недопустимый аргумент - кажется, требуется некоторый контекст отображения на fd, и я не знаю, как это сделать).
Мой вопрос: есть ли способ отменить инициализацию cuda (то есть закрыть открытые /mmap-ed файлы устройств), или, если это недоступно, способ повторно инициализировать cuda после того, как я вручную сделал это? или, может также помочь способ повторного отображения mmap.