gpt4 book ai didi

c - OpenCL 2 维工作项顺序?

转载 作者:行者123 更新时间:2023-11-30 17:12:47 25 4
gpt4 key购买 nike

我有一个巨大的二维数组,正在对其进行计算(X 中的 43 亿(32 位无符号整数),Y 中的 512 行),我正在尝试使用 openCL 来加速。

我显然无法一次完成所有这些工作,因此我正在尝试二维工作组设置。

每个“列”(共 43 亿个)都有通过一些数学运算和前一行的位旋转生成的下一行。所以我可以即时生成所有值。

但是由于当前工作行上面的行必须已经设置了值,所以我需要确保当工作组启动时,“上面”的组已经完成。彼此相邻的组并不重要 - 列不会与其他列交互。

如何解雇工作组?穿过 X,然后将 X 重置为 0,并将 Y 加 1?随意跳跃?这其中有什么规律或理由吗?

工作组是否可以被告知推迟到其“上级”工作完成为止?

我知道我所有的旁边、上面、下面、行、列在二维数组编程意义上都是毫无意义的,但它至少可以帮助我可视化问题。

如果我能确保团队不会超前,我就能让它发挥作用。只是不知道如何。

我知道有一些围栏可以确保其他工作项目 catch

最佳答案

OpenCL 中的内核调用中无法在工作组之间进行同步。如果您需要跨多个工作组进行全局内存同步,则需要对多个内核进行排队。

如果每一列都是一项独立的工作,那么听起来每列启动一个工作项并让它执行该列的每一行会更简单。类似于以下内容:

kernel void foo(...)
{
int column = get_global_id(0);
for (int row = 0; row < 512; row++)
{
// Do processing for (column,row), based on (column,row-1),
// which was also processed by this work-item
}
}

这将作为一维内核启动,全局大小等于列数。

关于c - OpenCL 2 维工作项顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31280997/

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