1.一种基于并行计算的像素筛查方法,其特征在于:包括以下步骤:
步骤一:首先根据一个像素分配到一个线程的原则将图像中的像素分配到各个线程,CUDA架构中thread的分布结构为多个thread组成一个block;多个block构成一个grid;其中,thread为线程,block为块,grid为格,每个分割图像的线程索引为idx=threadIdx.x+blockDim*blockIdx.x;
式中:threadIdx表示线程块X维度上的线程索引,blockDim.x表示一个线程块X维度上的线程数量,blockIdx.x表示块所在grid中X维度上的块号,idx得到的是当前线程在整个线程网格中X维度的索引;
步骤二:通过每个线程协作运行对分块图像进行运算:当一个线程完成一个像素的运算之后,把结果存放到共享内存当中去,接着马上直接运算第二个分块的相应像素的计算,同时把运算结果直接和第一个共享内存中的数据相加,图像的大小就是blockDim.x*gridDim.x,其中blockDim.x表示一个线程块X维度上的线程数量,gridDim.x表示一个线程格中X维度上的块数量,也就是每隔blockDim.x*gridDim.x像素的值在一个线程中计算,其结果存放在相应的共享内存中,依次类推,最后所有的相加结果都在共享内存中,其数组大小就是blockDim.x*gridDim.x;
步骤三:对每个像素和预设设定的缺陷阈值进行比较:如果像素值小于这个阈值,就是赋值1,大于这个阈值就赋值0,然后存入共享内存;
步骤四:利用规约算法对共享内存中的数据进行计算得出最终结果:把每block中的线程数对半分,让共享内存中的第一个数值和第一半加1的数值相加,结果仍然存在共享内存中,这样依次相加,得到结果的数组数量正好是原来的一半,然后接着再分一半,按照上面的方法再次相加,直到加到最后变成一个数值,然后存入一个长度是块数的数组变量,把这个数组变量直接从GPU拷贝到CPU中去,再采用传统的方法相加每个元素,最后得到一个数值,这个数值就是缺陷点数。