Арифметика указателей работает с кодом на стороне хоста, она довольно часто используется в примере кода, предоставленном nvidia.
"Линейная память существует на устройстве в 40-битном адресном пространстве, поэтому отдельно выделенные объекты могут ссылаться друг на друга с помощью указателей, например, в двоичном дереве."
Подробнее на: http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#ixzz4KialMz00
И из документации по примитивам производительности (npp), прекрасный пример арифметики указателей.
"4.5.1. Выбор канала - указатель источника изображения
Это указатель на интересующий канал в первом пикселе исходного изображения. Например. если pSrc является
указатель на первый пиксель в области интереса трехканального изображения. Используя соответствующую копию выбранного канала
примитивно можно скопировать второй канал этого исходного изображения в первый канал пункта назначения
изображение, заданное pDst путем смещения указателя на единицу:
nppiCopy_8u_C3CR (pSrc + 1, nSrcStep, pDst, nDstStep, oSizeROI); "
* Примечание: это работает без умножения на количество байтов на элемент данных, поскольку компилятор знает тип данных указателя и соответственно вычисляет адрес.
В C и C ++ арифметику указателей можно выполнить, как указано выше, или с помощью записи & ptr [offset] (для возврата адреса памяти устройства из данных вместо значения значение не будет работать в памяти устройства из кода на стороне хоста). При использовании любого обозначения размер типа данных обрабатывается автоматически, а смещение указывается в виде числа элементов данных, а не байтов.