CUDA:Cutil Timer - 経過時間の混乱
-
13-12-2019 - |
質問
私のプログラムを評価するとき、私はある時点で私が最大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();
を使用して上で行ったように)。
所属していません StackOverflow