int count =
atomicAdd(&pillar_count_histo[y_coor * grid_x_size + x_coor], 1);
apollo代码中有如上代码,使用cuda函数:其含义如下:
ex:
int a = 0;
int count = atomicAdd(&a, 1);
执行后结果:
count = 0;
a = 1;
此操作在一个原子事务中完成
原理为:
1.读取位于全局或共享存储器中地址address 处的32 位或64 位字值(也就是a的原始值,记为old值)
2.计算(old + val),old是0, val 是 1,所以此处结果为1;然后将结果存储在存储器的同一地址中,即此时a变为1了。
3.函数将返回old值,也就是返回0。