-
memoria
- Host che è stato bloccato e mappati utilizzando
cudaHostAlloc(..., cudaHostAllocMapped)
ocudaHostRegister(..., cudaHostRegisterMapped)
con successo; - puntatori ai dispositivi sono stati ottenuti utilizzando
cudaHostGetDevicePointer(...)
.
ho iniziato cudaMemcpy(..., cudaMemcpyDeviceToDevice)
su puntatori src e dest dispositivo che puntano a due differenti regioni di memoria mappata bloccato + ottenuti con la tecnica di cui sopra. Tutto funziona bene.
Domanda: devo continuare a fare questo o semplicemente utilizzare uno stile CPU tradizionale memcpy()
poiché tutto è comunque nella memoria di sistema? ... o sono il stessa (cioè fa cudaMemcpy
mappa per una scala memcpy
quando entrambi src e dest sono riposte)?
(sto ancora utilizzando il metodo cudaMemcpy
perché in precedenza tutto era in memoria globale del dispositivo, ma da allora sono passati a memoria appuntato a causa di vincoli di dimensione GMEM)
E 'una domanda interessante. A condizione che si utilizza un memcpy ottimizzato, la CPU è probabilmente meglio - la memoria appartiene ad esso, dopo tutto - e la capacità di una GPU discreta per fare host-> memcpy host è limitato a larghezza di banda PCIe. Ma se la GPU sarebbe inattiva altrimenti, perché no? – ArchaeaSoftware
Spero che la GPU non stia facendo la copia. Spero che il runtime veda che i puntatori sono entrambi puntatori host e invocano una memcpy host. Ho chiesto di scoprire cosa succede realmente. – harrism