2,408
社区成员




下面是我的代码,每一次得到的结果都不相同,请大神帮我看看~
__global__ void cuda_findExtrema(float* input, float* extremaX, float* extremaY, float* maxValues, float* extremiX, float* extremiY, float* minValues, int* numMax, int* numMin, int nz, int nx)
{ int i1 = threadIdx.x + blockIdx.x * blockDim.x; // 行索引
int i2 = threadIdx.y + blockIdx.y * blockDim.y; // 列索引
if (i1 > 0 && i1 < nz - 1 && i2 > 0 && i2 < nx - 1)
{ float center = input[i1 * nx + i2]; // 8邻域点
float up = input[(i1 - 1) * nx + i2];
float down = input[(i1 + 1) * nx + i2];
float left = input[i1 * nx + (i2 - 1)];
float right = input[i1 * nx + (i2 + 1)];
float upLeft = input[(i1 - 1) * nx + (i2 - 1)];
float upRight = input[(i1 - 1) * nx + (i2 + 1)];
float downLeft = input[(i1 + 1) * nx + (i2 - 1)];
float downRight = input[(i1 + 1) * nx + (i2 + 1)]; // 极大值点 - 与八个邻域点比较
if (center > up && center > down && center > left && center > right && center > upLeft && center > upRight && center > downLeft && center > downRight)
{ int idx = atomicAdd(numMax, 1);
extremaX[idx] = i2; extremaY[idx] = i1;
maxValues[idx] = center; } // 极小值点 - 与八个邻域点比较
else if (center < up && center < down && center < left && center < right && center < upLeft && center < upRight && center < downLeft && center < downRight)
{ int idx = atomicAdd(numMin, 1);
extremiX[idx] = i2; extremiY[idx] = i1; minValues[idx] = center; } } }