1

関数を書きました。CPUで実行すると、正しい結果が得られます。CPUコードの一部は次のとおりです。

for(int x = startx; x < endx; x+=SampleStep)
    for(int y = starty; y < endy; y+=SampleMin)
    {
        int idoff = Width;

次に、次のように GPU に移植します。

int x = threadIdx.x + blockIdx.x * blockDim.x + startx;
int y = threadIdx.y + blockIdx.y * blockDim.y + starty;
int idoff = blockDim.x * gridDim.x;

コードを実行すると、黒い画面が発生し、しばらくすると回復しました。同時に、システムは次のようなメッセージを表示しましたDisplay drive stopped responding

cuda イベント時間の出力コスト時間が 0ms の場合、結果は正しくありません。

for (int k = CircleBegin; k < CircleEnd; k++)
    {
        bool Isright = (k-ww>=0) && (k+ww<Width);

        if (Isright)
        {
            float AverR = 0;

            for (int i = -ww; i <= ww; i++)
            {
                for (int j = -wh; j <= wh; j++)
                {
                    AverR += ImgR[(k+i)+(y+j)*idoff];
                }
            }

AverR += ImgR[(k+i)+(y+j)*idoff]; にコメントすると コードは黒い画面なしで実行できます。理由を知りたいです。これは私のディスプレイ デバイス (私のデバイスは nvida gt 240) に関連していますか、それとも何らかのアクセス違反が発生していますか? どうすればこの問題を解決できますか?

4

1 に答える 1