Trong CUDA, được đưa ra giá trị của một con trỏ, hoặc địa chỉ của một biến, có một nội tại hoặc một API khác mà sẽ xem xét không gian địa chỉ mà con trỏ đề cập đến?Làm cách nào để phân biệt các con trỏ với bộ nhớ chung và toàn cục?
5
A
Trả lời
6
Các CUDA phần đầu tập tin sm_20_intrinsics.h
xác định chức năng
__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;
}
Hàm này trả 1
nếu địa chỉ chung chung ptr
là trong không gian bộ nhớ toàn cầu. Nó trả về 0
nếu ptr
nằm trong không gian bộ nhớ được chia sẻ, cục bộ hoặc không đổi.
Hướng dẫn PTX isspacep
thực hiện việc nâng hạng nặng. Có vẻ như chúng ta có thể xây dựng hàm tương tự theo cách này:
__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;
}
Các vấn đề liên quan
- 1. phân bổ bộ nhớ cho con trỏ
- 2. Con trỏ bên trong phân khúc bộ nhớ chia sẻ
- 3. Con trỏ và cấp phát bộ nhớ trong C
- 4. Phân bổ bộ nhớ động cho mảng con trỏ
- 5. Cách tính con trỏ trong cây nhị phân với bố cục van Emde Boas
- 6. Làm thế nào để phát hiện nếu con trỏ bị xóa và xóa an toàn?
- 7. iOS 5 + ARC - không gán con trỏ cho con trỏ để giải phóng bộ nhớ?
- 8. trả về một con trỏ cục bộ
- 9. Đóng cửa phân biệt và biến cục bộ
- 10. Làm cách nào để khai báo bộ nhớ cục bộ trong OpenCL?
- 11. Sự khác biệt giữa con trỏ lơ lửng và rò rỉ bộ nhớ
- 12. Làm cách nào để tắt hoàn toàn bộ nhớ cache?
- 13. Làm cách nào để phân biệt giữa các chữ ký chung và không chung bằng GetMethod trong .NET?
- 14. struct c, con trỏ và cấp phát bộ nhớ cho các lĩnh vực
- 15. Con trỏ thông minh/quản lý bộ nhớ an toàn cho C?
- 16. Cách xóa an toàn nhiều con trỏ
- 17. Trả về dữ liệu cục bộ từ các hàm trong C và C++ qua con trỏ
- 18. C#: Sử dụng chung để tạo mảng con trỏ
- 19. Tải con trỏ hoạt ảnh khi chạy từ bộ nhớ
- 20. Chuỗi an toàn C11 đối với các hàm trả về con trỏ tới bộ đệm tĩnh
- 21. Cấp phát bộ nhớ C++ cho một mảng con trỏ
- 22. Có thể lưu trữ con trỏ trong bộ nhớ dùng chung mà không sử dụng bù trừ không?
- 23. Bố cục bộ nhớ Đối tượng C++
- 24. Đây có phải là cách an toàn để chia sẻ bộ nhớ chỉ đọc với các tiến trình con không?
- 25. Bộ nhớ cục bộ và JSON
- 26. Có an toàn để "upcast" một con trỏ phương pháp và sử dụng nó với con trỏ lớp cơ sở?
- 27. Làm thế nào để loại bỏ các con trỏ void
- 28. Làm thế nào để in các lỗi toàn cục chỉ với biểu mẫu: lỗi?
- 29. Làm cách nào để phân biệt giữa các tệp 'nhị phân' và 'văn bản'?
- 30. Thay đổi Con trỏ chuột cho toàn bộ trang?
Lưu ý rằng cũng có 'isspacep.local' cho bộ nhớ cục bộ. – BenC