6

Udacityコースのレッスン 1 の最後の問題を解決しようとしていますが、タイプミスしただけなのか、実際のコードが間違っているのかわかりません。

void your_rgba_to_greyscale(const uchar4 * const h_rgbaImage, uchar4 * const d_rgbaImage, unsigned char* const d_greyImage, size_t numRows, size_t numCols)
{
    size_t totalPixels = numRows * numCols;
    size_t gridRows = totalPixels / 32;
    size_t gridCols = totalPixels / 32;
    const dim3 blockSize(32,32,1);
    const dim3 gridSize(gridCols,gridRows,1);
    rgba_to_greyscale<<<gridSize, blockSize>>>(d_rgbaImage, d_greyImage, numRows, numCols);
    cudaDeviceSynchronize(); checkCudaErrors(cudaGetLastError());
}

他の方法は次のとおりです。

void rgba_to_greyscale(const uchar4* const rgbaImage, unsigned char* const greyImage, int numRows, int numCols)
{   
    int x = (blockIdx.x * blockDim.x) + threadIdx.x;
    int y = (blockIdx.y * blockDim.y) + threadIdx.y;
    uchar4 rgba = rgbaImage[x * numCols + y];
    float channelSum = 0.299f * rgba.x + 0.587f * rgba.y + 0.114f * rgba.z;
    greyImage[x * numCols + y] = channelSum;
}

エラーメッセージには次のように記載されています。

libdc1394 error: failed to initialize libdc1394
Cuda error at student_func.cu:76
unspecified launch failure cudaGetLastError()
we were unable to execute your code. Did you set the grid and/or block size correctly?

しかし、その後、コードがコンパイルされたと表示されます。

Your code compiled!
error output: libdc1394 error: Failed to initialize libdc1394
Cuda error at student_func.cu:76
unspecified launch failure cudaGetLastError()

行 76 は最初のコード ブロックの最後の行であり、私が知る限り、何も変更していません。76 行目は次のとおりです。

rgba_to_greyscale<<<gridSize, blockSize>>>(d_rgbaImage, d_greyImage, numRows, numCols);

の宣言が実際には見つかりませんcudaGetLastError()

私は主に、グリッド/ブロックの寸法の設定に関する理解と、ピクセル位置の 1D 配列とスレッド間のマッピングに関して最初の方法のアプローチが正しかったかどうかに関心があります。

編集: 私は何かを誤解したと思います。numRows縦のピクセル数ですか?そしてnumCols、ピクセルは水平方向ですか?

私のブロックは 8 x 8 のスレッドで構成されています。各スレッドは 1 ピクセルを表していますか? gridRowsもしそうなら、画像が正方形ではないので、計算時に4で割る必要があったのはそのためだと思いますか? 2:1 の列: 行のブロックを作成することもできたと思います。

スクリーンショット

編集 2: 2:1 の比率になるようにブロックを変更しようとしたところ、同じ数で割ることができnumRowsましnumColたが、下部と側面に空白の領域が表示されました。下部と側面の両方に空白の領域があるのはなぜですか。グリッドまたはブロックごとに の y 次元を変更していません。

ここに画像の説明を入力

4

1 に答える 1