In CUDA, dato il valore di un puntatore, o l'indirizzo di una variabile, esiste una API intrinseca o un'altra che possa indagare su quale spazio di indirizzi si riferisce il puntatore?Come differenziare i puntatori alla memoria globale e condivisa?
5
A
risposta
6
Il CUDA file di intestazione sm_20_intrinsics.h
definisce la funzione
__device__ unsigned int __isGlobal(const void *ptr)
{
unsigned int ret;
asm volatile ("{ \n\t"
" .reg .pred p; \n\t"
" isspacep.global p, %1; \n\t"
" selp.u32 %0, 1, 0, p; \n\t"
#if (defined(_MSC_VER) && defined(_WIN64)) || defined(__LP64__)
"} \n\t" : "=r"(ret) : "l"(ptr));
#else
"} \n\t" : "=r"(ret) : "r"(ptr));
#endif
return ret;
}
Questa funzione restituisce 1
se l'indirizzo generico ptr
è nello spazio di memoria globale. Restituisce 0
se ptr
è nello spazio di memoria condiviso, locale o costante.
L'istruzione PTX isspacep
esegue il sollevamento pesante. Sembra che dovremmo essere in grado di costruire la funzione analoga in questo modo:
__device__ unsigned int __isShared(const void *ptr)
{
unsigned int ret;
asm volatile ("{ \n\t"
" .reg .pred p; \n\t"
" isspacep.shared p, %1; \n\t"
" selp.u32 %0, 1, 0, p; \n\t"
#if (defined(_MSC_VER) && defined(_WIN64)) || defined(__LP64__)
"} \n\t" : "=r"(ret) : "l"(ptr));
#else
"} \n\t" : "=r"(ret) : "r"(ptr));
#endif
return ret;
}
Problemi correlati
- 1. Puntatori all'interno del segmento di memoria condivisa
- 2. È possibile memorizzare puntatori nella memoria condivisa senza utilizzare offset?
- 3. Scambio molto brutale usando template, xor e puntatori alla memoria
- 4. Boost, memoria condivisa e vettori
- 5. Problemi con i puntatori e i puntatori ai puntatori
- 6. Memoria condivisa Java e C++
- 7. Cuda - copia dalla memoria globale del dispositivo alla memoria texture
- 8. Utilizzo della memoria con i puntatori
- 9. Elimina tutta la memoria condivisa e i semafori su Linux
- 10. Gunicorn memoria condivisa tra i processi di multiprocessing e lavoratori
- 11. postgresql impostazioni memoria condivisa
- 12. Cosa sono i puntatori potenti e i puntatori deboli
- 13. C++: Protezione memoria condivisa OpenMP
- 14. Autorizzazioni di accesso alla memoria condivisa su Windows
- 15. Differenza tra ottenere i puntatori di funzione dalla libreria condivisa
- 16. Instantiating degli oggetti nella memoria condivisa C++
- 17. Memoria condivisa tra processi C++ e Java
- 18. Memoria condivisa tra programma C++ e JS
- 19. Posix memoria condivisa e file mappati
- 20. Come è organizzata la memoria condivisa 2D in CUDA
- 21. Puntatori e allocazione della memoria in C
- 22. Variabile globale condivisa nella libreria statica C++
- 23. Come funzionano i puntatori ai puntatori e l'operatore di indirizzo?
- 24. In CUDA profiler nvvp, cosa significa "overhead di memoria condivisa/globale"? Come viene calcolato?
- 25. Blocco SRW nella memoria condivisa
- 26. Memoria condivisa distribuita in .NET
- 27. asprintf(): come liberare i puntatori?
- 28. Perdita di memoria condivisa in C++, come cancellare la memoria condivisa?
- 29. Cuda memoria condivisa variabile array
- 30. activerecord cache condivisa in memoria
Si noti che esiste anche 'isspacep.local' per la memoria locale. – BenC