Может ли gpu использовать пространство подкачки, когда его оперативная память заполнена?

Я делаю некоторые вычисления с GPU, используя OpenCL, где мне нужно создать буфер размером около 5 ГБ. Мой ноутбук имеет встроенный графический процессор с объемом оперативной памяти 1,5 ГБ. Я попытался запустить код, и он дал неверный результат. Так что я думаю, это потому, что оперативная память GPU заполнена. Мой вопрос заключается в том, есть ли какое-то «пространство подкачки» (или виртуальная память), которое может использовать GPU, когда его оперативная память заполнена? Я знаю, что процессор имеет этот механизм. Но я не уверен для gpu.


person andy90    schedule 13.12.2014    source источник


Ответы (2)


Нет, не может (по крайней мере, на большинстве графических процессоров). Потому что графический процессор в целом использует свою собственную память (ОЗУ на вашей видеокарте).

Также код OpenCL в ваших ядрах не выполняет никаких malloc (внутри ядра). Вы будете использовать clCreateBuffer

person Basile Starynkevitch    schedule 13.12.2014
comment
Я считаю, что clCreateBuffer ограничен CL_DEVICE_MAX_MEM_ALLOC_SIZE, что несколько меньше размера памяти GPU. Может, это его проблема? - person Clifford; 13.12.2014
comment
@Clifford Я только что проверил CL_DEVICE_MAX_MEM_ALLOC_SIZE моего графического процессора. Интересно, что он возвращает 4 ГБ, что соответствует размеру оперативной памяти моего ноутбука. У меня встроенная видеокарта Intel Iris. Операционная система говорит, что у нее всего 1,5 ГБ видеопамяти. Таким образом, кажется, что GPU может использовать всю оперативную память. - person andy90; 13.12.2014
comment
@ andy90 andy90: Если хост 32-битный, адресация 4Gb даже с виртуальной памятью будет невозможна. - person Clifford; 14.12.2014

Это будет зависеть от графического процессора и от того, имеет ли он доступ к памяти хоста через MMU и DMA.

GPU с MMU может виртуализировать GPU и память хоста, чтобы они отображались как единое адресное пространство, а доступ к физической памяти хоста обрабатывался передачей DMA. Я бы предположил, что если бы у вашего графического процессора была такая возможность, это уже было бы сделано; в этом случае ваша проблема, скорее всего, в другом месте.

person Clifford    schedule 13.12.2014
comment
ИМХО, большинство реальных графических процессоров (в частности, на внешних видеокартах NVIDIA или AMD/ATI) не имеют MMU. Процессоры APU от AMD являются исключением. - person Basile Starynkevitch; 13.12.2014
comment
@BasileStarynkevitch: я не эксперт; Я провел небольшое исследование. Это предполагает, что это технически возможно, и это от 2006 года предполагает, что это было сделано. - person Clifford; 13.12.2014