Как получить доступ к управляемой памяти одновременно CPU и GPU в вычислительной способности 5.0? - PullRequest
0 голосов
/ 22 января 2019

Поскольку одновременный доступ к управляемой памяти на устройствах с вычислительной способностью ниже 6.x невозможен (Документация по CUDA Toolkit) , существует ли способ одновременного доступа к управляемой памяти с помощью CPU и GPU с возможностью вычислений 5.0 или любой другой метод, который позволяет центральному процессору обращаться к управляемой памяти во время работы ядра графического процессора.

1 Ответ

0 голосов
/ 22 января 2019

есть способ одновременного доступа к управляемой памяти с помощью CPU и GPU с возможностью вычислений 5.0

No.

или любым методом, который может сделать CPUдоступ к управляемой памяти при работающем ядре графического процессора.

Не на устройстве с вычислительной способностью 5.0.

Вы можете иметь «одновременный» доступ ЦПУ и ГПУ к данным, используя CUDA нольметоды копирования .

Полное руководство как по памяти Unified, так и по памяти Pinned / Mapped / Zero-copy выходит за рамки того, что я могу написать в ответе здесь.Unified Memory имеет свой собственный раздел в руководстве по программированию.Обе эти темы подробно описаны здесь, в теге cuda в SO, а также во многих других местах в Интернете. Любые вопросы, вероятно, будут отвечать с помощью поиска Google.

В двух словах, память с нулевым копированием в 64-битной ОС доступна через API закрепления хоста, такой как cudaHostAlloc().Память, выделенная таким образом, является памятью хоста и всегда остается там, но она доступна для графического процессора.Доступ к этой памяти из графического процессора в память хоста осуществляется через шину PCIE, поэтому он намного медленнее, чем обычный глобальный доступ к памяти.Указатель, возвращаемый распределением (в 64-битной ОС), может использоваться как в коде хоста, так и в коде устройства.Вы можете изучить примеры кодов CUDA, которые используют методы нулевого копирования, такие как simpleZeroCopy.

В отличие от этого, обычная унифицированная память (UM) - это данные, которые будут перенесены в процессор, которыйиспользуй это.В режиме предварительного паскаля единой системы обмена сообщениями эта миграция запускается вызовами ядра и синхронизирующими операциями.Одновременный доступ хоста и устройства в этом режиме невозможен.Для устройств Pascal и других устройств в надлежащем пост-паскальском режиме единой системы обмена сообщениями (в основном только для 64-разрядной версии Linux, CUDA 8+) данные переносятся по требованию даже во время выполнения ядра, что обеспечивает ограниченную форму «одновременного» доступа.,Единая память имеет различные режимы поведения, и некоторые из них в некоторых случаях приводят к тому, что выделение объединенной памяти «затухает» в выделение хоста с фиксированным / нулевым копированием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...