Переподписка памяти GPU с отображенной памятью, унифицированной виртуальной адресацией и унифицированной памятью
Я рассматриваю возможности обработки данных на GPU, который слишком велик для памяти GPU, и у меня есть несколько вопросов.
Если я правильно понимаю, что с отображенной памятью данные находятся в основной памяти и передаются в GPU только при обращении, поэтому не должно быть проблемой выделять больше, чем помещается в память GPU.
UVA аналогична отображаемой памяти, но данные могут храниться как в памяти процессора, так и в памяти графического процессора. Но возможно ли для графического процессора доступ к основной памяти (как с отображенной памятью), в то время как она заполнена собственными данными? Может ли в этом случае произойти переполнение памяти? Я читал, что с отображенной памятью данные направляются непосредственно в локальную память без предварительной передачи в глобальную, и в этом случае не должно быть переполнения. Это правда, и если да, то это также верно и для UVA?
В CUDA 6.0 UM не позволяет переподписывать память GPU (и, как правило, не позволяет выделять больше памяти, чем у GPU, даже в основной памяти), но с CUDA 8.0 это становится возможным ( https://devblogs.nvidia.com/parallelforall/beyond-gpu-memory-limits-unified-memory-pascal/). Я правильно понял?
1 ответ
Да, с отображенным (то есть закрепленным, "нулевым копированием") способом данные остаются в памяти хоста и по требованию передаются в GPU, но никогда не становятся резидентными в памяти GPU (если только код GPU не хранит их там). Если вы обращаетесь к нему несколько раз, вам может потребоваться передать его несколько раз с хоста.
UVA (Unified Virtual Addressing, см. Здесь) - это не то же самое, что UM (Unified Memory, см. Здесь) или управляемая память (== UM), поэтому я буду называть этот случай UM, а не UVA.
При использовании единой системы обмена сообщениями на устройстве с предварительным паскалем "управляемые" распределения единой системы обмена сообщениями будут автоматически перемещаться между процессором и графическим процессором с некоторыми ограничениями, но вы не можете переподписать память графического процессора. Максимальный объем всех обычных распределений GPU плюс выделений единой системы обмена сообщениями не может превышать физическую память GPU.
С UM plus CUDA 8.0 или более поздней версии плюс Pascal или более новой GPU вы можете переподписать память GPU с выделением UM ("управляемым"). Эти распределения тогда номинально ограничены размером вашей системной памяти (минус любые другие требования к системной памяти). В этом случае данные автоматически перемещаются назад и вперед между памятью хоста и устройства во время выполнения CUDA, используя метод подкачки по требованию.
UVA не является реальной техникой управления данными в CUDA. Это базовая технология, которая включает некоторые функции, например определенные аспекты отображаемой памяти, и, как правило, включает функции единой системы обмена сообщениями.