W CUDA, biorąc pod uwagę wartość wskaźnika lub adres zmiennej, czy istnieje wewnętrzny lub inny interfejs API, który będzie introspekować, do której przestrzeni adresowej odnosi się wskaźnik?Jak rozróżnić wskaźniki na pamięć współużytkowaną i globalną?
5
A
Odpowiedz
6
CUDA plik header sm_20_intrinsics.h
określa funkcję
__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;
}
Funkcja ta zwraca 1
jeśli generic adres ptr
jest w globalnej przestrzeni pamięci. Zwraca 0
, jeśli ptr
jest w udostępnionym, lokalnym lub stałym miejscu pamięci.
Instrukcja obsługi PTX isspacep
wykonuje podnoszenie ciężkie. Wygląda na to, że powinniśmy być w stanie zbudować analogiczną funkcję w następujący sposób:
__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;
}
Powiązane problemy
- 1. malloc i nieważne Wskaźniki
- 2. Wspólna pamięć Java i C++
- 3. Jak rozróżnić lokalne, niezatwierdzone zmiany i pochodzenie
- 4. jak przechowywać wskaźniki na mapie
- 5. Rozróżnić między TCHAR i _TCHAR
- 6. Jak zdefiniować pamięć współużytkowaną CUDA o rozmiarze znanym w czasie wykonywania?
- 7. Wskaźniki i prędkość wykonywania
- 8. Współdzielone wskaźniki i wydajność
- 9. Co to są mocne wskaźniki i słabe wskaźniki
- 10. Jak uzyskać wskaźniki pracy iskrzenia?
- 11. c wskaźniki i tablica
- 12. indeks operator na wskaźniki
- 13. Pamięć niezarządzana i pamięć zarządzana
- 14. Jak zapisać wartość globalną (niekoniecznie zmienną globalną) w jQuery?
- 15. Rozróżnić pierwszy i ostatni element w każdym?
- 16. Wywołanie, wskaźniki i kopia tablicy
- 17. Rubymotion i wskaźniki do struktur
- 18. const i wskaźniki w C
- 19. Jak rozróżnić zestawy danych HDF5 i grupy za pomocą h5py?
- 20. Szablony edytora ASP.NET MVC i Html.EditorFor (...) - jak rozróżnić nazwę typu?
- 21. Wymienianie pamięci i pamięć wirtualna na iOS
- 22. Malloc, wskaźniki łańcuchowe i Valgrind
- 23. Wskaźniki i pętle w C
- 24. Jak zmienić globalną wysokość JTable?
- 25. Jak mogę rozróżnić między 0 i białymi znakami w Perlu?
- 26. Jak rozróżnić połączenia Rails API w Newrelic?
- 27. Jak rozróżnić etapy/produkcję z dynamiczną inwentaryzacją?
- 28. Przyrostowe wskaźniki
- 29. Rozróżnić między iPhone czarno-białych?
- 30. Freeglut, OpenGL i pamięć
Należy zauważyć, że istnieje również "isspacep.local" dla pamięci lokalnej. – BenC