gpt4 book ai didi

c++ - OpenCL:屏障调用后 __local 数组的值丢失

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

我有一个内核在减少之前将一些部分结果存储在本地数组中它们变成一个单一的值(见下面的例子)。还原过程前开始时,放置一个屏障以确保所有线程都已成功写入它们的部分数据。但是,屏障将临时数组的值重置为默认值(即 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] = 1barrier(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/

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