Ни в Руководстве по программированию CUDA C, ни в Руководстве по рекомендациям CUDA не упоминается, что сумма, выделенная cudaMallocHost
, может 't быть больше, чем память устройства, поэтому я пришел к выводу, что это возможно.
Передача данных из заблокированной страницы памяти на устройство выполняется быстрее, чем обычные передачи данных, и даже быстрее, если используется объединенная память записи. Кроме того, память, выделенная таким образом, может быть отображена в область памяти устройства, исключая необходимость (вручную) копировать данные вообще .Это происходит автоматически, поскольку данные необходимы, поэтому вы сможете обрабатывать больше данных, чем умещается в памяти устройства.
Однако производительность системы (хоста) может сильно пострадать, если количество заблокированных страниц составляетзначительная часть памяти хоста.
Итак, когда использовать эту технику ?, просто: если данные должны быть прочитанными только один раз и записанными только один раз , используйте их.Это приведет к повышению производительности, поскольку в любом случае придется копировать данные туда-сюда.Но как только возникает необходимость сохранять промежуточные результаты, которые не вписываются в регистры или разделяемую память, обрабатывают порции ваших данных, которые помещаются в память устройства, с помощью cudaMalloc
.