gpt4 book ai didi

OpenCL Float 数组缩减为单个 bool

转载 作者:行者123 更新时间:2023-12-02 00:08:26 25 4
gpt4 key购买 nike

我有大量的 float ,可能有数百万个单元格和一个算法,该算法将对这些数据进行操作,直到它达到无法完成更多工作的状态。如果其中一个 float 大于零,则应将 bool 值设置为真,然后传递给主机,这意味着应安排内核再次执行。每个单元格都有一个工作项进行计算。到目前为止,我已经考虑过对整个数组使用两阶段 |= 缩减,这似乎是正确的做事方式。另一种非常慢的方法是使用原子操作。

因为我只想在工作项完成某些工作时设置一个特定值,否则就不管它了,我可以传递一个全局 bool 值吗?它可以被每个工作组中的每个工作项修改,而无需使用原子达到预期效果?假设这个 bool 值被初始化为 false 并且只能由工作项设置为 true,我会得到错误的结果吗?这是一个坏主意吗?如果是,为什么?

最佳答案

有趣的问题。

As I only want to set a specific value if a work item does some work and leave it alone otherwise, can I pass a global boolean which can be modified by every work item in every work-group without the use of atomics and still achieve the intended effect?

我认为这个提议会奏效,而且它可能是最有效的解决方案。不过有两个注意事项:

  • 请记住,您的内核应该包含类似 if (condition) shouldContinue = 1 而不是 shouldContinue = condition - 即使后者具有更好的性能,您必须防止将 0 存储到内存中,因为您无法控制顺序。

  • 因为您想显式覆盖内存,所以我不会使用 bool,因为我想确保系统不必在存储之前加载整个单词.事实上,我会选择一些足够大的类型以允许编译器使用 non-temporal store。在这里,假设硬件和编译器支持 - 例如使用占用整个缓存行的类型,例如 int16,并将其设置为某个值。

关于OpenCL Float 数组缩减为单个 bool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16960672/

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