GPU高性能计算CUDA编程:完成时间戳

GPU高性能计算CUDA编程:完成时间戳

声明:本文不做商用

我们将GPU→CPU传输结束时的时间戳存放在time4中,准备好计算每个事件所需的时间,如下所示:

cudaEventSynchronize(time1);
cudaEventSynchronize(time2);
cudaEventSynchronize(time3);
cudaEventSynchronize(time4);
cudaEventElapsedTime(&totalTime,time1,time4);
cudaEventElapsedTime(&tfrCPUtoGPU,time1,time2);
cudaEventElapsedTime(&kernelExecutionTime,time2,time3);
cudaEventElapsedTime(&tfrGPUtoCPU,time3,time4);

变量 time1、time2、time3 和 time4 都是 CPU端变量,存储了CPU 和 GPU 之间进行数据传输时的时间戳,以及GPU代码在设备端执行过程中的时间戳。上面代码中一个奇怪的地方是,我们只用Nvidia的API为与GPU相关的事件添加时间戳。任何涉及GPU的东西都必须用Nvidia的API来得到时间戳,此处是cudaEventRecord()。参见【0voice C++】但为什么?为什么我们不能简单地使用表现优异的gettimeofday()函数?我们在CPU代码清单中看到过它。

cudaEventSynchronize()告诉Nvidia运行时引擎对给定的事件执行同步操作,以确保变量 timel、…、time4具有正确的时间值。因为它们不是简单的数据类型,所以需要使用cudaEventElapsedTime()来计算它们之间的差值。例如,time1 和time4之间的差值表示数据离开CPU并到达GPU,以及GPU处理这些数据并返回给CPU内存这个过程所需要的所有时间。其余的很容易理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值