用户
 找回密码
 立即注册
发表于 2013-9-22 16:05:52
wch8802 发表于 2013-9-22 15:57
“请从第二次kernel执行开始计算kernel的执行时间”,这里的“第二次kernel执行开始计算”是什么意思,我 ...

LZ您好:

“第二次kernel执行”这里指的就是字面的意思。因为第一次kernel执行的时候会有一些自动的初始化工作,您测到的时间实际上是环境初始化时间+您的kernel执行时间。而从第二次kernel执行开始,将不再重新初始化,您可以测得较为准确的kernel执行实现。所以您可以执行您的kernel N+1次,其中第一次不测量,测量后面N次的总时间求平均值。

以及profiler是visual profiler的简称,该工具随CUDA Toolkit一同免费发放,供开发人员测试和评估自己的代码性能等。

祝您好运~
使用道具 举报 回复 支持 反对
发表于 2013-9-22 16:10:22
wch8802 发表于 2013-9-22 16:04
请问如何才能测内核函数第二次执行时的时间?是不是for循环求平均来减小第一次时间带来的初始化时间? ...

LZ您好:

您可以使用循环,也可以不使用循环。

以及,从“第二次开始计算”指的就是不计算第一次的时间,就是字面的意思,希望您能理解。

祝您好运~
使用道具 举报 回复 支持 反对
发表于 2013-9-22 16:28:01
ice 发表于 2013-9-22 15:04
LZ您好:

请您以profiler为准,并给出测试截图以便分析。

for (int j = 0; j <2; j++)
        {
                if(j==1)
                {
                        cudaEventRecord(start1, NULL);
                }
                matrixMul<<<blocks,threads>>>(d_c,d_a,d_b,N,N);
                if(j==1)
                {
                        cudaEventRecord(stop1, NULL);
                        cudaEventSynchronize(stop1);
                }

                //cudaThreadSynchronize();
        }
float msecTotal1 = 0.0f;
     cudaEventElapsedTime(&msecTotal1, start1, stop1);

         float msecPerMatrixMul1 = msecTotal1 ;
     double flopsPerMatrixMul1 = 2.0 * (double)N* (double)N * (double)N;
     double gigaFlops1 = (flopsPerMatrixMul1 * 1.0e-9f) / (msecPerMatrixMul1 / 1000.0f);
     printf( "matrixMul1erformance= %.2f GFlop/s, Time= %.3f msec, Size= %.0f Ops\n", gigaFlops1,msecPerMatrixMul1,flopsPerMatrixMul1);
C:\Users\wang\Desktop\实验结果.jpg
使用道具 举报 回复 支持 反对
发表于 2013-9-22 16:32:24
横扫千军 发表于 2013-9-22 15:11
楼主您持续拒绝接受我和ICE的正确:
原文:“请从第二次kernel执行开始计算kernel的执行时间”

C:\Users\wang\Desktop\实验结果.jpg
使用道具 举报 回复 支持 反对
12
发新帖
您需要登录后才可以回帖 登录 | 立即注册