- Каково время жизни массива устройств и массива, который копируется в память графического процессора?Сохраняются ли их значения от одного вызова ядра к другому?
В Numba глобальные выделения памяти сохраняются до тех пор, пока они не будут освобождены.
- Do Iнужно поместить определения массивов устройств в цикл (до того, как я вызову ядро), или я просто делаю это один раз, прежде чем войти в цикл?
Последнее.
- Нужно ли вручную удалять / удалять массивы устройств в коде, или диспетчер памяти CUDA сделает это вконец программы?
Первое, что нужно осознать, это то, что в вашем воображении нет менеджера памяти CUDA.Выделение памяти автоматически освобождается при разрушении контекста, иначе это не происходит ни при каких обстоятельствах.Единственное исключение - если вы используете Numba device_array
, который может быть мусором, собранным Python, если он выпадает из области видимости.Но в целом вы должны предполагать, что все, что вы выделяете, остается в памяти до тех пор, пока вы явно не освободите его, и всегда включайте в свой код явное освобождение памяти.