Указатель, созданный в ядре, явно пригоден для использования на устройстве. Вероятно, это физический адрес, хотя некоторые графические процессоры могут добавлять виртуализацию (MMU и TLB).
Похоже, cudaGetSymbolAddress
дает вам адрес, который можно использовать с хост-процессора. Это отличается тем, что память устройства отображена в виртуальном адресном пространстве хоста со смещением.
Код хоста должен использовать адрес, возвращаемый cudaGetSymbolAddress
, код ядра должен использовать оператор адреса &
.
Указатели, встроенные в структуры совместно используемых данных, должны использовать основанную адресацию (в основном, как и при индексировании массива, вы сохраняете смещение от известного местоположения, которое могут найти и хост, и ядро).