Я хочу посчитать время ядра, которое должно быть запущено более 1 раза, обрабатываемые данные различны для каждого выполняемого ядра. Мой код ниже, на время cudaMemcpy не следует учитывать.Временные ядра CUDA, которые должны выполняться более одного раза
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;
Мой вопрос заключается в том, что метод является правильным? потому что я не уверен. Очевидно, что время должно быть больше, чем обычно.
Я хочу, чтобы сравнить время между двумя алгоритма по общему методу GPU.The это выполнить еще раз после завершения программы, такие как 10 раз, поэтому среднее значение - это метод из проекта: ./NVIDIA_CUDA-5.0_Samples/C/0_Simple/matrixMul/matrixMul.cu ". По вашему мнению: «вам нужно скопировать операцию с двумя, и для записи требуется только одно событие CUDA для каждой итерации цикла. Тогда время для любого заданного вызова ядра можно вычислить, вызвав cudaEventElapsedTime() для смежных записанных событий». Не могли бы вы привести пример? потому что я не мог поймать твою идею. Спасибо! – taoyuanjl
cudaEventElapsedTime() передает обратно разницу во времени между двумя записанными событиями. – ArchaeaSoftware
Я отредактировал ответ, чтобы сделать его более понятным. Но за то, что вы хотите сделать, я не думаю, что вам нужно больше двух событий. – ArchaeaSoftware