複数回実行するカーネルの時間をカウントしたいのですが、実行中のカーネルごとに処理するデータが異なります。
1 cudaEvent_t start;
2 error = cudaEventCreate(&start);
3 cudaEvent_t stop;
4 error = cudaEventCreate(&stop);
6 float msecTotal = 0.0f;
7 int nIter = 300;
8 for (int j = 0; j < nIter; j++)
9 {
10 cudaMemcpy(...);
// Record the start event
11 error = cudaEventRecord(start, NULL);
12 matrixMulCUDA1<<< grid, threads >>>(...);
// Record the stop event
13 error = cudaEventRecord(stop, NULL);
14 error = cudaEventSynchronize(stop);
15 float msec = 0.0f;
16 error = cudaEventElapsedTime(&msec, start, stop);
17 msecTotal+=msec;
18 }
19 cout<<"Total time = "<<msecTotal<<endl;
公平を期すために、コントラスト アルゴリズムは次のようになります。
1 cudaEvent_t start;
2 error = cudaEventCreate(&start);
3 cudaEvent_t stop;
4 error = cudaEventCreate(&stop);
6 float msecTotal = 0.0f;
7 int nIter = 300;
8 for (int j = 0; j < nIter; j++)
9 {
// Record the start event
11 error = cudaEventRecord(start, NULL);
12 matrixMulCUDA2<<< grid, threads >>>(...);
// Record the stop event
13 error = cudaEventRecord(stop, NULL);
14 error = cudaEventSynchronize(stop);
15 float msec = 0.0f;
16 error = cudaEventElapsedTime(&msec, start, stop);
17 msecTotal+=msec;
18 }
19 cout<<"Total time = "<<msecTotal<<endl;
私の質問は、その方法は正しいですか?よくわからないからです。明らかに、時間は通常よりも長くする必要があります。