В верхней части я заметил, что моя c-программа (с использованием CUDA 3.2) имеет виртуальный размер 28 г или более (смотря на VIRT), при каждом запуске с самого начала. Это не имеет для меня никакого смысла. Резидентная память имеет смысл и составляет всего около 2 г на моем самом большом наборе данных. Я знаю, что в какой-то момент в прошлом виртуальный размер был не таким большим, но я не уверен, когда произошло изменение.
Почему мой процесс будет использовать 28 г виртуальной памяти (или почему бы VIRT был бы таким большим)? Я понимаю, что VIRT включает исполняемый двоичный файл (только 437K), разделяемые библиотеки и "область данных". Что такое "область данных"? Как узнать, сколько памяти требуются разделяемым библиотекам? Что относительно других элементов моего процесса общая память?
содержимое/proc/<pid> /smaps (1022 строки) здесь: http://pastebin.com/fTJJneXr
Одна из записей smaps показывает, что одна из них учитывает MOST, но не имеет метки... как я могу узнать, что эта "пустая" запись имеет 28gb?
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 ГБ