gpt4 book ai didi

opencl - OpenCL 中的障碍

转载 作者:行者123 更新时间:2023-12-03 06:38:30 31 4
gpt4 key购买 nike

在OpenCL中,我的理解是可以使用barrier()函数来同步工作组中的线程。我(通常)确实了解它们的用途以及何时使用它们。我还知道工作组中的所有线程都必须遇到障碍,否则会出现问题。然而,到目前为止,每次我尝试使用屏障时,似乎都会导致我的视​​频驱动程序崩溃,或者出现有关访问某种无效内存的错误消息。到目前为止,我已经在 2 个不同的显卡(1 个 ATI、1 个 NVIDIA)上看到了这一点。

所以,我的问题是:

  1. 知道为什么会发生这种情况吗?
  2. barrier(CLK_LOCAL_MEM_FENCE)barrier(CLK_GLOBAL_MEM_FENCE) 有什么区别?我阅读了文档,但我不清楚。
  3. 是否有关于何时使用 barrier(CLK_LOCAL_MEM_FENCE)barrier(CLK_GLOBAL_MEM_FENCE) 的一般规则?
  4. 是否有时使用错误的参数类型调用 barrier() 可能会导致错误?

最佳答案

正如您所说,屏障只能同步同一工作组中的线程。无法同步内核中的不同工作组。

现在回答你的问题,我也不清楚该规范,但在我看来,第 6.11.9 节包含了答案:

CLK_LOCAL_MEM_FENCE – The barrier function will either flush anyvariables stored in local memory or queue a memory fence to ensurecorrect ordering of memory operations to local memory.

CLK_GLOBAL_MEM_FENCE – The barrier function will queue a memory fenceto ensure correct ordering of memory operations to global memory.This can be useful when work-items, for example, write to buffer orimage memory objects and then want to read the updated data.

因此,据我了解,在写入和读取 __local 内存空间时应使用 CLK_LOCAL_MEM_FENCE,在写入和读取 __global 内存空间时应使用 CLK_GLOBAL_MEM_FENCE。

我还没有测试这是否会更慢,但大多数时候,当我需要屏障并且我怀疑哪个内存空间受到影响时,我只是简单地使用两者的组合,即:

barrier(CLK_LOCAL_MEM_FENCE | CLK_GLOBAL_MEM_FENCE);

这样你就不会有任何内存读取\写入顺序问题(只要你确定组中的每个线程都通过屏障,但你知道这一点)。

希望有帮助。

关于opencl - OpenCL 中的障碍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6890302/

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