从私有内存复制到全局内存时出现 OpenCL 无效命令队列错误

发布于 2025-01-04 21:28:12 字数 654 浏览 0 评论 0原文

我正在尝试修复程序中的错误,并将其精确定位到非常小的区域。

每当我尝试将数据从设备的私有内存复制到全局内存时,命令队列就会失效,并且 clFinish() 返回错误。

考虑一个简单的例子:

kernel void example(global int *data, const int width) {
    int id = get_global_id(0);

    if (id == 0) {
        int copy[width]; // private memory?
        for (int i = 0; i < width; i++) {
            copy[i] = data[i]; // works
            data[i] = copy[i]; // works
        }

        // whenever this loop is here
        // i get invalid command queue from clFinish
        for (int i = 0; i < width; i++) {
            data[i] = copy[i];
        }
    }
}

有人可以向我解释一下为什么会这样吗?

谢谢

I am trying to fix an error in the program and I pinpointed it to the really small area.

Whenever I am trying to copy data from private memory of the device into the global memory, command queue gets invalidated, and clFinish() returns an error.

Consider a simple example:

kernel void example(global int *data, const int width) {
    int id = get_global_id(0);

    if (id == 0) {
        int copy[width]; // private memory?
        for (int i = 0; i < width; i++) {
            copy[i] = data[i]; // works
            data[i] = copy[i]; // works
        }

        // whenever this loop is here
        // i get invalid command queue from clFinish
        for (int i = 0; i < width; i++) {
            data[i] = copy[i];
        }
    }
}

So can somebody explain to me why is that the reason?

Thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

谁许谁一生繁华 2025-01-11 21:28:12

如果宽度确实超过了最大尺寸,私有内存就没有问题。例如,我建议您使用 width=8/16 运行内核,并查看结果。如果您曾经传递一个较大的宽度值。可能无法将所有数据保存在私有内存中。它们是寄存器,大小非常有限。

If the width does exceed the maximum size, the private memory will be fine. I recommend you to run the kernel with width=8/16, for example, and see the result. If you used to pass a large value for width. It might not be possible to hold all data in the private memory. They are registers and have very limited size.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文