我有大量的浮点数,可能有数百万个单元格和一个算法,它将对这些数据进行操作,直到它达到无法完成更多工作的状态。如果其中一个浮点数大于零,则应将布尔值设置为 true,然后将其传递给主机,这意味着应安排内核再次执行。每个单元格都有一个工作项进行计算。到目前为止,我已经考虑在整个数组上使用两阶段 |= 减少,这似乎是做事的正确方法。另一种非常慢的方法是使用原子操作。
因为我只想在工作项完成某些工作时设置一个特定值,否则我可以传递一个全局布尔值,它可以由每个工作组中的每个工作项修改而不使用原子,并且仍然达到预期影响?假设这个布尔值被初始化为 false 并且只能由工作项设置为 true,我会得到错误的结果吗?这是一个坏主意,如果是这样,为什么?