Контекст:
CUDA 4.0, 64-битная версия Linux, модуль ядра NVIDIA UNIX x86_64 270.41.19, на GeForce GTX 480.
Я пытаюсь найти утечку памяти (устройства) в моей программе. Я использую API времени выполнения и cudaGetMemInfo (бесплатно, всего) для измерения использования памяти устройства. Я заметил значительную потерю (в данном случае 31M) после выполнения ядра. Сам код ядра не выделяет память устройства. Так что я думаю, это код ядра, который остается в памяти устройства. Даже я бы подумал, что ядро не такое большое. (Есть ли способ определить размер ядра?)
Когда код ядра загружается в память устройства? Я думаю, при выполнении строки кода хоста:
kernel<<<geom>>>(params);
Правильно?
И остается ли код в памяти устройства после звонка? Если да, могу ли я явно выгрузить код?
Меня беспокоит фрагментация памяти устройства. Подумайте о большой последовательности распределения памяти чередующегося устройства и выполнения ядра (разные ядра) Затем через некоторое время памяти устройства становится довольно мало. Даже если вы освободите часть памяти, код ядра останется свободным для нового выделения. Это приведет к огромной фрагментации памяти через некоторое время. Так ли был разработан CUDA?