関数を書きました。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) に関連していますか、それとも何らかのアクセス違反が発生していますか? どうすればこの問題を解決できますか?