Вверху я заметил, что моя программа c (использующая CUDA 3.2) имеет виртуальный размер 28g или более (если посмотреть на VIRT) при каждом запуске с самого начала. Для меня это не имеет никакого смысла. Резидентная память имеет смысл и составляет всего около 2 ГБ на моем самом большом наборе данных. Я знаю, что в какой-то момент в прошлом виртуальный размер был не таким большим, но я не уверен, когда произошло это изменение.
Почему мой процесс будет использовать 28 г виртуальной памяти (или почему VIRT у вершины будет таким большим)? Я понимаю, что VIRT включает исполняемый двоичный файл (всего 437 КБ), разделяемые библиотеки и «область данных». Что такое «область данных»? Как я могу узнать, сколько памяти требуется разделяемым библиотекам? А как насчет других элементов общей памяти моего процесса?
содержимое / proc /
Одна из записей из smaps покажите, что одна из них составляет БОЛЬШУЮ из них, но не имеет ярлыка ... как я могу узнать, что это за "пустая" запись с 28 ГБ?
200000000-900000000 ---p 00000000 00:00 0
Size: 29360128 kB
Rss: 0 kB
Pss: 0 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
Referenced: 0 kB
Anonymous: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Locked: 0 kB
-
ubuntu 11.04 64-бит
16 ГБ ОЗУ