2

我有一个有效的检测和跟踪过程(行和列中的像素图像),它不能给出完全可重复的结果,因为它使用 atomicAdd 意味着数据点可以以不同的顺序累积,从而导致在计算质心和其他方面时出现四舍五入错误跟踪统计。

atomicAdd 的主要冲突很少,因此大多数结果是相同的。但是,对于验证和验证,我需要能够使 atomicAdd 以一致的顺序添加这些冲突数据点,这样当两者都想使用 atomicAdd 在他们的行 N 上添加一个像素时,线程 3 将击败线程 10正在处理。

是否有一种机制允许 atomicAdd 在其线程顺序中具有确定性,或者我错过了什么?

4

1 回答 1

2

查看伯克利的“Fast Reproducible Atomic Summations”论文。

http://www.eecs.berkeley.edu/~hdnguyen/public/papers/ARITH21_Fast_Sum.pdf

但基本上你可以尝试像找到一个 abs 值的总和以及你的原始总和,将它乘以 O(N^2),然后减去并将它添加到/从你的原始总和 (sum = (sum - sumAbs * N^ 2) + sumAbs * N^2) 以抵消最低位(不确定的)。正如您所看到的,上限与 N^2 成正比...因此 N(总和中的元素数)越低,您的误差范围就越好。

您还可以尝试使用 Kahan 求和来结合上述方法来减少误差范围。

于 2015-08-04T21:53:25.513 回答