1

を使用してタイミングを計っている単純なカーネルがありますclock()この関数については、NVIDIA CUDA で内部カーネル時間を測定する方法で知りましたか?

だから私はそれを 計るためclock_t start = clock();に(そして同様に停止して)使用しました。コンパイル時に、次のエラーが発生します。

tex1.cu(14): エラー: 明らかな呼び出しの括弧の前にある式には、(ポインターへの) 関数型が必要です`

ヘッダー ファイルまたはコンパイラ オプションがありませんか?

また、CUDA タイマー ( cudaEvent_t start, stop;) を使用してみましたが、取得した経過時間は 0 ミリ秒です。開始と停止を作成し、開始を記録し、CUDA を実行し、同期し、停止を記録し、イベントを同期し、経過時間を測定します。この部分は正常にコンパイルされますが、経過時間がゼロになります。

これは、テクスチャ メモリの理解度をテストするために使用している単純なカーネルです。カーネル:

__global__ void magic(float *mean, int *clock){
    int i, tid = threadIdx.x + blockIdx.x * blockDim.x;
    float t, sum=0.0;
    clock_t start = clock();
    if ( tid < dimy )
    {
        for(i=0;i<dimx; i++){
            t = tex2D( input, i, tid );
            sum = sum + t*t;
        }
        clock_t stop = clock();
        clock[tid] = (int)(stop-start);
    }
}
4

1 に答える 1

4

カーネルでは、カーネル パラメータに名前を付けないでください。これは、名前の変数と名前の関数clockがあるため、コンパイラを混乱させるためです。代わりにこれを行います:clockclock

__global__ void magic(float *mean, int *myclock){

...
myclock[tid] = (int)(stop-start);
}

その変更を行うと、括弧の前の式に関するエラーはなくなります。あなたが両方を持っているので、あなたがクロックと呼ばれる他の変数を持っているか、noで始まるかについての質問に答えたのは奇妙です.

cuda イベントの使用方法についてサポートが必要な場合は、タイミングのために使用している実際のコードを投稿してください。すべての cuda 呼び出しとカーネル呼び出しでエラー チェックを行っていますか?

于 2013-02-27T12:46:26.287 に答える