- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个内核在减少之前将一些部分结果存储在本地数组中它们变成一个单一的值(见下面的例子)。还原过程前开始时,放置一个屏障以确保所有线程都已成功写入它们的部分数据。但是,屏障将临时数组的值重置为默认值(即 float 为 0.0f)。
最小的例子:
__kernel void simulate_plate(__local float *partial)
{
__private int lpos;
lpos = get_local_id(0) + get_local_id(1) * get_local_size(1);
partial[lpos] = 1;
barrier(CLK_LOCAL_MEM_FENCE);
// At this point partial[i] == 0 for all i
// reduce data...
}
参数 partial
具有以下初始值设定项:
clSetKernelArg(kernel, 0, local_group_size * sizeof(float), NULL);
clSetKernelArg() 调用返回状态代码 CL_SUCCESS
和内核终止而没有任何错误。
另一个观察是交换行 partial[lpos] = 1
和barrier(CLK_LOCAL_MEM_FENCE)
实现了想要的结果 --- 所有组件数组 partial
现在等于 1。
任何输入为什么会发生这种行为将不胜感激。
最佳答案
我觉得索引应该是这样的
lpos = get_local_id(0) + get_local_id(1) * get_local_size(0);
关于c++ - OpenCL:屏障调用后 __local 数组的值丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47970865/
关于 __local 变量的原子访问: 我知道与本地操作相比,进行全局操作的速度很慢。从这个意义上说,我想对某些变量进行原子访问。 我知道我可以在 OpenCL 中进行原子操作: // Program
我有一个内核在减少之前将一些部分结果存储在本地数组中它们变成一个单一的值(见下面的例子)。还原过程前开始时,放置一个屏障以确保所有线程都已成功写入它们的部分数据。但是,屏障将临时数组的值重置为默认值(
我在这里对 OpenCL 中的 __local 内存感到困惑。我读了一些规范说数据流必须从主机到__Global,然后是__Local。但我也看到了一些像这样的内核函数: __kernel void
我对 OpenCL 编译器对指向存储在本地内存中的结构内的全局内存指针的响应感到困惑。这是一个最小的测试用例: struct Helper { unsigned char bytes[3276
在我的 C OpenCL 代码中,我使用 clSetKernelArg 创建“可变大小”__local 内存以用于我的内核,这在 OpenCL 本身中不可用。看我的例子: clSetKernelArg
我是一名优秀的程序员,十分优秀!