In amdgcn target, null pointers in global, constant, and generic address space take value 0 but null pointers in private and local address space take value -1.
他们如何使用这两个不同的 NULL 值?
最佳答案
至于原因:我确实不知道这一点,但本地/私有(private)地址空间指针几乎肯定只是作为平面物理寄存器文件/内存区域中的偏移量/索引来实现。没有类似虚拟内存的地址重新映射,只是一个大数组。您仍然希望能够访问数组索引 0,因此“无效指针”(无效索引)需要是其他内容。
不要忘记,NULL = 不可解引用指针 = 0 也只是常规 C 中的一个约定 - 某些非 OpenCL 系统在地址 0 处也有有效内存。关于 memset 等的标准,因此如果您对确切的规范感兴趣,您最好自己阅读该文档。
我不确定您到底要问什么“如何” - 您无法在不同 OpenCL 地址空间中的指针之间明智地进行转换,因此不存在冲突。
关于c - 为什么 AMD GCN 使用非零 NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41102947/