gpt4 book ai didi

c++ - 如何使用 OpenCL 内核制作累加器?

转载 作者:太空宇宙 更新时间:2023-11-04 15:42:37 30 4
gpt4 key购买 nike

    __kernel void cl_test(__global int* Number)
{
int id = get_global_id(0);
if (id%5==0)
{
Number[0]++;
}
if (id%10==0)
{
Number[1]++;
}
}

如您所见,这是一个非常简单的OpenCL内核测试代码,我想要的是收集一个范围内可被5和10整除的数字。

问题来了: 由于每个工作项的计算不是完全并行的,因此不同项中的 Number[0] 或 [1] 是相关的。 我无法通过读取 Number[0] 或 Number[1] 得到正确的结果。

有没有类似C++中的“全局变量”的解决方案?

谢谢!

最佳答案

你需要使用原子操作。

__kernel void cl_test(__global int* Number)
{
int id = get_global_id(0);
if (id%5==0)
{
atomic_inc(Number);
}
if (id%10==0)
{
atomic_inc(&Number[1]);
}
}

您应该尽可能避免使用它们,因为原子操作往往相当慢,正是因为它们确保它可以跨线程正确工作。

关于c++ - 如何使用 OpenCL 内核制作累加器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20971145/

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