- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我对 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/
关于 __local 变量的原子访问: 我知道与本地操作相比,进行全局操作的速度很慢。从这个意义上说,我想对某些变量进行原子访问。 我知道我可以在 OpenCL 中进行原子操作: // Program
我有一个内核在减少之前将一些部分结果存储在本地数组中它们变成一个单一的值(见下面的例子)。还原过程前开始时,放置一个屏障以确保所有线程都已成功写入它们的部分数据。但是,屏障将临时数组的值重置为默认值(
我在这里对 OpenCL 中的 __local 内存感到困惑。我读了一些规范说数据流必须从主机到__Global,然后是__Local。但我也看到了一些像这样的内核函数: __kernel void
我对 OpenCL 编译器对指向存储在本地内存中的结构内的全局内存指针的响应感到困惑。这是一个最小的测试用例: struct Helper { unsigned char bytes[3276
在我的 C OpenCL 代码中,我使用 clSetKernelArg 创建“可变大小”__local 内存以用于我的内核,这在 OpenCL 本身中不可用。看我的例子: clSetKernelArg
我是一名优秀的程序员,十分优秀!