c - 为什么 AMD GCN 使用非零 NULL?

标签 c opencl llvm amd-gcn

This commit说:

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/

相关文章:

c - 如何在linux终端上一行编译运行?

java - 使用 Aparapi 计算 vector 中的不同值

c++ - 在 clCreateContext() 中注册的回调中抛出 C++ 中的异常是否安全

python - 使用python模块numba时出错

c++ - 如何在 kdevelop 中设置 llvm?

c++ - 从编译的可执行文件中执行函数

C while 循环调用++ 当它是一个 char

检查数组中的重复值

opencl - 如何在 pyOpenCL 中传递向量数组

c++ - 快速编译高效排序算法(用于JIT编译)