2013-11-30 3 views
1

Говоря, что если мы выполняем системный вызов mmap() и сопоставляем некоторую память устройства PCIE (например, графический процессор) в пространстве пользователя, тогда приложение может получить доступ к этой области памяти на устройстве без каких-либо накладных расходов ОС , Данные могут быть скопированы из буфера файловой системы непосредственно в память устройства без какой-либо другой копии.Память устройства mmap() в пользовательском пространстве

Выше должно быть неправильно ... Может ли кто-нибудь сказать мне, где ошибка? Благодаря!

+0

'strace' сервер' X11' (например, 'Xorg'), чтобы понять, что он делает (и как это« mmap »на GPU). –

+2

Что заставляет вас думать, что ваше заявление неверно? Попробуйте также 'cat/proc/$ (pidof/usr/bin/X)/maps' .... –

+0

@BasileStarynkevitch Я думаю, что это неверно, потому что я знаю в CUDA, если вы хотите скопировать данные в память GPU, вам нужно сначала скопируйте данные с диска в память хоста, затем из памяти хоста в память устройства, используя cudaMemCopy. Если приведенное выше утверждение верно, то почему nvidia делает эти копии? Они могут делать mmap() и копировать непосредственно с диска на память устройства gpu. – fyang29

ответ

1

Для обычного устройства то, что вы сказали, является правильным. Если память GPU ведет себя по-разному для чтения/записи, они могут это сделать. Мы должны посмотреть на документацию cudaMemcpy().

С Nvidia's basics of CUDA страницы 22,

направление определяет местоположения (хост или устройство) из ЦСИ и целевой_адреса Блоков CPU потока: возвращается после завершения копирования. Не запускается копирование, пока предыдущий CUDA не требует полной

Это кажется довольно очевидным, что cudaMemcpy() синхронизируется перед GPU регистров пишет, что может быть причиной памяти mmap() быть обновлена. Поскольку конвейер GPU является конвейером, предыдущие ошибки могут не выполняться, когда cudaMemcpy() выдается из CPU.

Смежные вопросы