Разрушение контекста CUDA при завершении хост-процесса

Если моя хост-программа [выход]/[segfault]/[убита], каково соответствующее поведение в отношении разрушения контекста CUDA и соответствующих выделенных ресурсов?

Под «поведением» я подразумеваю автоматический механизм на стороне драйвера графического процессора, если я никогда явно не вызываю cudaDeviceReset в своей программе.

Я работаю под Linux, и я видел, как использование памяти моего графического процессора постепенно увеличивалось в течение нескольких дней (или даже одного дня), пока я запускал код CUDA, который несколько раз прерывался через (CTRL-C) или просто segfaulting (на принимающая сторона)...


person user2847075    schedule 04.10.2013    source источник


Ответы (2)


Возможно, если правильно управлять исключениями, можно использовать atexit()? Ниже приведен пример использования atexit():

void ExitFunction() {
    cudaDeviceReset();
}

int main(...) {
    atexit(ExitFunction); 
    ...
    return 0;
}
person Vitality    schedule 04.10.2013

Все выделения на устройстве инкапсулированы в контекст. При использовании API среды выполнения контексты CUDA создаются автоматически «под капотом».

Когда приложение завершает работу, независимо от того, каким образом, контекст (и любые связанные с ним выделения, инкапсулированные внутри) должны уничтожаться.

Если вы испытываете «небольшие» изменения в свободной памяти после различных событий, это может быть просто тот факт, что драйвер выделяет дополнительное пространство для собственного использования для внутренних служебных задач. (Драйвер похож на операционную систему для устройства.) Если вы испытываете «большие» изменения в свободной памяти после различных событий выхода из приложения, то я бы сказал, что что-то не так, но поскольку ваш вопрос не содержит подробностей или указаний на то, как воспроизвести его, я не уверен, что еще можно сказать.

Если вы хотите принудительно «сбросить» драйвер извне, вы можете попробовать выгрузить драйвер через:

sudo rmmod nvidia
sudo nvidia-smi -a 

И ваша свободная память должна вернуться к «нормальному состоянию».

person Robert Crovella    schedule 04.10.2013