質問

私のプログラムを評価するとき、私はある時点で私が最大100msecの時間経過を得ることを見ました。私はあらゆる操作を検索しましたが、今回は個別に操作はありませんでした。それから私がCudathReadSynchronize呼び出しを行うところはどこでも、最初の呼び出しは100ミリ秒かかります。それから私は以下の例を以下の例に書いた。CudathReadSynchronizeが1行目で呼び出されると、最後の経過時間値は1ミリ秒未満にあります。しかし、それが呼び出されていない場合、平均して110msecがかかります。

int main(int argc, char **argv)
{
    cudaThreadSynchronize(); //Comment out it then get 110msec as elapsed time..

    unsigned int timer;
    cutCreateTimer(&timer);
    cutStartTimer(timer);

    float *data;
    CUDA_SAFE_CALL(cudaMalloc(&data, sizeof(float) * 1024));

    cutStopTimer(timer);
    printf("CUT Elapsed: %.3f\n", cutGetTimerValue(timer));

    cutDeleteTimer(timer);

    return EXIT_SUCCESS;
}
.

StartのcudathReadSynchronize()がCUDAライブラリの初期化を処理すると思います。カーネルを完全に初期化する正しい方法であるため、他の操作の時間評価には影響しませんか。それは十分であり、開始時にCudathReadSynchronizeを呼び出すか、正しい方法があります。

役に立ちましたか?

解決

CUDAを使用するには、GPU上に「CUDAコンテキスト」を最初に作成する必要があります。これは約70~100msかかります。例のcudaThreadSynchronize();ではコンテキストを作成しています。コンテキストはアプリケーションの場合にのみ作成されます。タイミング分析を実行するとき、私はまたダミーメモリコピーを実行してコンテキストを作成します(cudaThreadSynchronize();を使用して上で行ったように)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top