Самый быстрый способ получить доступ к элементам вектора устройства непосредственно на хосте - PullRequest
4 голосов
/ 28 декабря 2011

Я отсылаю вас к следующей странице http://code.google.com/p/thrust/wiki/QuickStartGuide#Vectors. Пожалуйста, смотрите второй абзац, где говорится, что

Также обратите внимание, что к отдельным элементам device_vector можно получить доступ, используя стандартную скобочную запись.Однако, поскольку каждый из этих обращений требует вызова cudaMemcpy, они должны использоваться экономно.Мы рассмотрим некоторые более эффективные методы позже.

Я искал по всему документу, но не смог найти более эффективный метод.Кто-нибудь знает самый быстрый способ сделать это?то есть как получить быстрый доступ к вектору устройства / указателю устройства на хосте?

Ответы [ 2 ]

3 голосов
/ 29 декабря 2011

«Более эффективные методы», на которые ссылается руководство, - это алгоритмы тяги.Более эффективно получать доступ (или копировать через шину PCI-E) к миллионам элементов одновременно, чем к одному элементу, поскольку амортизируется фиксированная стоимость связи ЦП и ГП.копировать данные из GPU в CPU, чем вызывая cudaMemcpy, потому что это самый примитивный способ для программиста CUDA реализовать задачу.

0 голосов
/ 30 января 2012

Если у вас есть device_vector, на котором вам нужно больше обрабатывать, попробуйте сохранить данные на устройстве и обработать их с помощью алгоритмов Thrust или ваших собственных ядер. Если вам нужно прочитать только несколько значений из device_vector, просто получите доступ к значениям напрямую с помощью скобок. Если вам нужно получить доступ к нескольким значениям, скопируйте device_vector в host_vector и прочитайте значения оттуда.

thrust::device_vector<int> D;
...
thrust::host_vector<int> H = D;
...