//This is my kernel function
__global__ void createSCM(Pixel*pixelMat, //image
                          int imgRows, //image dimensions
                          int imgCols,
                          int*matrizSCM, //Coocurrence matrix
                          int numNiveles, //coocurrence matrix levels = 256
                          int delta_R, //value = {-1,0 or 1}
                          int delta_C) //value = {-1,0 or 1}
{
    int i = blockIdx.y*blockDim.y+threadIdx.y;
    int j = blockIdx.x*blockDim.x+threadIdx.x;
    int cols = numNiveles;
    int posx,posy;
    if ( (j + delta_C) < imgCols && (i + delta_R) < imgRows && 
       ((j + delta_C) >= 0) && ((i + delta_R) >= 0) )
    {
       posx = pixelMat[i*imgCols+j].channel_0;
       posy = pixelMat[(i + delta_R)*imgCols+(j + delta_C)].channel_0;
       matrizSCM[posx*cols+posy]++;
       matrizSCM[posy*cols+posx]++;
    }
}
struct Pixel {
    int channel_0;
};
共起行列にカウントエラーがあります。
pixelMat[i*imgCols+j]とpixelMat[(i + delta_R)*imgCols+(j + delta_C)]
同じスレッドで異なる位置にアクセスしています。
これは私のカーネル呼び出しです
int Grid_Dim_x=imagenTest.rows, Grid_Dim_y=imagenTest.cols;
int Block_Dim_x=1, Block_Dim_y=1;   
dim3 Grid(Grid_Dim_x, Grid_Dim_y);  
dim3 Block(Block_Dim_x,Block_Dim_x);
createSCM<<<Grid,Block>>>(...)
各ブロックにはスレッドが 1 つだけあり、各ブロックはピクセルを表します
この問題に対する良い解決策はありますか?
ありがとう :)