我有一个工作检测和跟踪过程(行和列中的像素图像),它不能提供完美的可重复结果,因为它使用atomicAdd意味着数据点可以按不同的顺序累积,导致计算中的舍入错误质心和其他轨道统计。
主要是atomicAdd的冲突很少,所以大多数结果是相同的。然而,为了验证和验证,我需要能够使atomicAdd以一致的顺序添加这些冲突数据点,这样当线程3想要使用atomicAdd在行N上添加像素时,它们将击败线程10正在处理。
是否有一种机制允许atomicAdd在其线程顺序中具有确定性,或者我错过了什么?
答案 0 :(得分:1)
查看伯克利的“快速可重复的原子摘要”论文。
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求和来减少与上述相关的误差限制。