Я понимаю, что cudaMallocManaged
упрощает доступ к памяти, устраняя необходимость в явных выделениях памяти на хост и устройство. Рассмотрим сценарий, в котором память хоста значительно больше, чем память устройства, скажем, 16 ГБ хоста & 2 ГБ устройства, которое довольно распространено в наши дни. Если я имею дело с входными данными большого размера, скажем, 4-5 ГБ, которые считываются из внешнего источника данных. Я вынужден прибегать к явному распределению памяти хоста и устройства (поскольку памяти устройства недостаточно для одновременного размещения) или у модели единой модели памяти CUDA есть способ обойти это (что-то вроде автоматического распределения/освобождения на основе необходимости)?cudaMallocManaged vs cudaMalloc - сценарий ограничения памяти устройства
ответ
Я вынужден прибегать к явному распределению памяти хоста и устройства?
Вы не вынуждены прибегать к явной хоста и устройства памяти распределения, но вы будете вынуждены обрабатывать объем выделенной памяти вручную. Это связано с тем, что, по крайней мере, на нынешнем оборудовании унифицированная виртуальная память CUDA не позволяет вам переписывать память GPU. Другими словами, cudaMallocManaged
сработает, если вы выделите больше памяти, чем то, что доступно на устройстве. Но это не значит, что вы не можете использовать cudaMallocManaged
, это просто означает, что вам нужно отслеживать объем выделенной памяти и никогда не превышать того, что может поддерживать устройство, путем «потоковой передачи» ваших данных, а не распределения всего сразу.
Чистое предположение, поскольку я не могу говорить для NVIDIA, но я считаю, что это может быть одним из будущих улучшений на предстоящем оборудовании.
И действительно, один год и полтора после выше прогноза, по состоянию на CUDA 8, Pascal графические процессоры в настоящее время усиливаются с возможностью страничного разломообразованием, что позволяет странице памяти мигрировать между хостом и устройством без явного вмешательства от программиста.
Спасибо! Да, мой вопрос был, если я вынужден прибегать к работе с памятью вручную, когда памяти устройства недостаточно. Это было бы действительно хорошим улучшением. – mssrivatsa
- 1. Проблемы с ошибкой cudaMalloc и «из памяти»
- 2. Почему cudaMalloc возвращает нелегальный доступ к памяти
- 3. CudaMallocManaged выделяет память на устройстве?
- 4. cudaMalloc vs cudaMalloc3D производительность для 2D-массива
- 5. Как сделать cudaMalloc динамически
- 6. Запуск очень быстро с cudaMallocManaged
- 7. IOS ограничения устройства вычислительной/память
- 8. cudaMalloc ошибка времени выполнения
- 9. Что происходит, когда вы вызываете cudaMalloc внутри устройства?
- 10. cudaMallocManaged вызывает нарушение прав доступа
- 11. Сценарий тестирования устройства
- 12. Копии памяти устройства CUDA: cudaMemcpyDeviceToDevice vs copy kernel
- 13. Cuda Неизвестная ошибка (ErrNo: 30) on cudaMalloc()
- 14. Медленность первого cudaMalloc (K40 vs K20), даже после cudaSetDevice
- 15. Ограничения IPad памяти
- 16. Ограничения памяти OSX php.ini
- 17. Ограничения памяти GL_SHADER_STORAGE_BUFFER
- 18. cudaMalloc failing После нескольких часов
- 19. Сценарий # IDeferred vs Task
- 20. Устройства памяти и указатели
- 21. Использование внутренней памяти устройства
- 22. Android - Углубление памяти устройства
- 23. Загрузка памяти Android-устройства
- 24. Сценарий о дисковой памяти
- 25. Как скопировать элементы вложенных структур в пространство памяти устройства CUDA?
- 26. cudamalloc из 2D-массива
- 27. неопределенные cudaMalloc символы
- 28. Почему cudaMalloc() не работает?
- 29. Как работает CudaMalloc?
- 30. Ошибка ограничения памяти в php mpdf
Если шаблон доступа не показывает много повторного использования (или если повторное использование может обслуживаться из иерархии кеша GPU), сопоставленная закрепленная память может быть хорошим вариантом. – ArchaeaSoftware
Интересно! Но, как говорится в документации, это ухудшит производительность хост-системы, если выделены большие куски закрепленной памяти, не так ли? Как вы сказали, когда он не демонстрирует много повторного использования, это действительный вариант. Благодаря! – mssrivatsa
Это зависит от того, что еще делает система. В ходе тестирования, которое я выполнил (в Windows 7), вам необходимо заблокировать более половины системной памяти, прежде чем производительность начнет заметно ухудшаться. – ArchaeaSoftware