0

这个提交说:

amdgcn目标中,全局、常量和通用地址空间中的空指针取值为 0,但私有和本地地址空间中的空指针取值为 -1。

他们如何使用这两个不同的 NULL 值?

4

1 回答 1

1

至于为什么:我不知道这一点,但本地/私有地址空间指针几乎肯定只是作为平面物理寄存器文件/内存区域中的偏移量/索引实现的。没有类似虚拟内存的地址重映射,只有一个大数组。您仍然希望能够访问数组索引 0,因此“无效指针”(invalid index)需要是别的东西。

不要忘记,NULL = non-dereferenceable pointer = 0 也只是常规 C 中的一个约定——一些非 OpenCL 系统在地址 0 处也有有效内存。关于 memset 等的标准有一些复杂性,所以你'如果您对确切的规范感兴趣,最好自己阅读文档。

我不确定你到底在问什么“如何”——你不能在不同的 OpenCL 地址空间中的指针之间进行明智的转换,所以那里没有冲突。

于 2016-12-13T16:43:02.107 回答