Sto eseguendo un semplice test che confronta la latenza di accesso dei dati allocati con malloc() e dati allocati con cudaHostAlloc() da l'host (la cpu sta eseguendo gli accessi). Ho notato che l'accesso ai dati assegnati con cudaHostAlloc() è molto più lento dell'accesso ai dati allocati con malloc() sul Jetson Tk1.Latenza di accesso alla memoria della CPU dei dati allocati con malloc() rispetto a cudaHostAlloc() su Tegra TK1
Questo non è il caso per le GPU discrete e sembra essere applicabile solo a TK1. Dopo alcune indagini, ho scoperto che i dati allocati con cudaHostAlloc() sono mappati in memoria (mmap) nelle aree/dev/nvmap dello spazio di indirizzamento del processo. Questo non è il caso per i normali dati malloc'd che sono mappati sull'heap del processo. Comprendo che questa mappatura potrebbe essere necessaria per consentire alla GPU di accedere ai dati poiché i dati di cudaHostAlloc devono essere visibili sia dall'host sia dal dispositivo.
La mia domanda è la seguente: Da dove proviene il sovraccarico di accesso ai dati di cudaHostAlloc'd dall'host? I dati sono mappati su/dev/nvmap senza cache sulle cache della CPU?