为什么AMD GCN使用非零NULL?

时间:2016-12-12 14:21:26

标签: c opencl llvm amd-gcn

This commit说:

  

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

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

1 个答案:

答案 0 :(得分:1)

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

不要忘记,NULL =不可解除引用的指针= 0也只是常规C中的约定 - 一些非OpenCL系统在地址0处也有有效的内存。这里有一些复杂的问题。关于memset等的标准,如果你对确切的规范感兴趣,你最好自己阅读文档。

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