Мне интересно, выполняется ли cudaMemcpy на процессоре или графическом процессоре при копировании с хоста на устройство?
В случае синхронного вызова API с обычной страницей, выделенной пользователем, выделенной памятиответ он работает на обоих .Драйвер должен сначала скопировать данные из исходной памяти в исходный буфер, сопоставленный с DMA на хосте, а затем сообщить GPU, что данные ожидают передачи.Затем графический процессор выполняет передачу.Процесс повторяется столько раз, сколько необходимо для полного копирования из исходной памяти в графический процессор.
Пропускная способность процесса может быть улучшена с помощью закрепленной памяти, которую драйвер может напрямую передавать в DMA или без промежуточного копирования.(хотя закрепление имеет большие накладные расходы на инициализацию / выделение, которые также необходимо амортизировать).
Что касается остальной части вопроса, я подозреваю, что две копии памяти непосредственно из исходной памяти были бы более эффективными, чем альтернатива, но это тот тип вопроса, на который можно окончательно ответить только путем сравнительного анализа.