TensorRT使用记录

首先看到的是这个,包含比较完整的使用案例,包括直接读取onnx,读取序列化后的文件,dynamic shape等
TensorRT 7 C++ (almost) minimal examples
然后看到了这个,包含一些不同的函数定义写法,使用的cuda函数稍有不同,可以参考一定
TensorRTx
接下来遇到了推理时间波动较大的问题,看到了这篇文章,采用锁死最大显存频率的方式,但关机就会还原,写了一个bat放在开机自启里,用着用着发现也不是很稳定,后发现安装47x的显卡驱动也会有效果,也可以作为一种参考
【C++】【TensorRT】检测时间不稳定原因汇总(持续更新)
然后看到了下面两篇文章,知道了采用锁页内存,注意锁页内存是锁host端的内存,锁定了之后cudaMemcpyAsync的时间是减少了,但是几乎等量增加了cudaStreamSynchronize的时间
【遇见CUDA】要更快,请提高数据传输效率!
CUDA:cudaHostAlloc()
————————————
直接删掉cudaStreamSynchronize这一行好像也没什么问题,预测结果也是对的(前后结果完全一致)。
删掉cudaStreamSynchronize之后耗时又变成了后面的cudaFree的部分,很奇怪,跟我函数嵌套好几层有关系?
将bindings和input和output的指针都定义在infer函数循环外面,infer函数预测时间跟包裹函数外测得的时间有3-4ms的差额,跟参数存在可能的拷贝也许有关系,最后我认为也许steady_clock的时间不是那么准?
————————————
cudaStreamSynchronize删除,cudaFree拿到infer循环外——>耗时少,结果错误
cudaStreamSynchronize,cudaFree拿到infer循环外——>耗时多,结果正确
cudaStreamSynchronize加cudaFree——>耗时多,结果正确
可能是两者都存在等待设备流任务完成再执行的机制
————————————
发现cuda自己的计时方式后,重新对比了使用锁页内存前后的耗时,如下
CUDA: (六) 时间计算、CUDA stream(CUDA 流)
cudaMemcpyHostToDevice 4.5ms->3.5ms(8x3x96x2272)
cudaMemcpyDeviceToHost 1.3ms->0.9ms(8x13419x12)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值