Changming Yu
Changming Yu
P99 代码有误
樊老师你好,第9章原子函数的合理使用中,neighbor2gpu.cu程序find_neighbor_atomic函数内,d_NN[n1] = 0;这一行代码可能与d_NL[n2 * MN + atomicAdd(&d_NN[n2], 1)] = n1;这一行发生冲突,导致存储的d_NL有误。 假设n1线程执行过程中,修改了某个n2对应的d_NN[n2],但若n2线程随后刚开始执行,则会在开始处执行d_NN[n2] = 0;这行代码,这导致了之前对d_NN[n2]的累加修改又重置为了零,因为这时又从0开始累加,会使得实际存储的某个粒子的邻居的数目减少,即重置为0之前的存储邻居会被新的邻居粒子覆盖。 例如在我的本地测试中,第14514个粒子的坐标为49.2969659427102 154.94173688193416,在neighbor1cpu.cu版本的程序中测试,其存储下来的neighbor.txt中对应的数据为3 14316 14514 14516 NaN NaN NaN NaN NaN NaN NaN,但在原子函数的版本中则输出为2 14514 14516 NaN NaN NaN...
樊老师你好,第10章线程束基本函数与协作组中,如下这一段: > 如果想要在循环内去掉对线程号的约束,又要避免出现读-写竞争,可以将相关代码 段改写如下: real v = s_y[tid]; for (int offset = 16; offset > 0; offset >>= 1) { v += s_y[tid + offset]; __syncwarp(); s_y[tid] = v; __syncwarp();...
This PR introduces a new function `fillHoles()` to the run-length morphology module: - Adds hole filling capability for run-length encoded binary images - Supports both 4 and 8 connectivity options...