gpt4 book ai didi

c - 指向 __local 结构中的 __global 内存的指针

转载 作者:太空宇宙 更新时间:2023-11-04 00:08:50 24 4
gpt4 key购买 nike

我对 OpenCL 编译器对指向存储在本地内存中的结构内的全局内存指针的响应感到困惑。这是一个最小的测试用例:

struct Helper {
unsigned char bytes[32769];
};

struct Main {
__global struct Helper *h;
};

void __kernel test(void)
{
__local struct Main m;
}

这在 clBuildProgram 期间失败,错误为 CL_BUILD_PROGRAM_FAILURE。但是,将上面的魔数(Magic Number)从 32769 更改为一个较小的数字可以让程序编译。

clBuildProgram 失败时,clGetProgramBuildInfo(... CL_PROGRAM_BUILD_LOG) 不会提供任何输出。系统日志中没有错误报告。

32k 恰好是我的视频卡(AMD Radeon HD 6750M)上每个计算单元的本地内存量。但正如您所见,我正在存储一个指向这个大型结构的指针,它将存储在全局内存中。我没有尝试在本地内存中创建结构本身。那么,为什么指向结构的大小会有所不同?

这个失败发生在我运行 OS X 10.8 的 Macbook Pro 上,在早期版本的 OS X 上也失败了。但是,它在我的带有 NVidia 显卡的 Linux 机器上编译成功。

我的驱动程序是here . (这只是 Apple 的演示程序,更改了内核)。它使用 gcc -o test test.c -framework OpenCL 在 OS X 上编译。

最佳答案

在 AMD 硬件 6970 上,我查看了您的内核生成的 ISA 代码,但它是一个 NOOP,所以我认为内核不会被执行,因为没有仅初始化的指令

ISA View 。

; --------  Disassembly --------------------

00 NOP NO_BARRIER
END_OF_PROGRAM

IL 的 View

       ;ARGEND:__OpenCL_test_kernel
func 1026 ; test ; @__OpenCL_test_kernel
; BB#0: ; %entry
ret_dyn
ret
endfunc ; test

关于c - 指向 __local 结构中的 __global 内存的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11671375/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com