tensorrt优化笔记 版本管理

本文探讨了TensorRT的版本管理,强调了其作为软件入口的角色,以及对CUDA版本的依赖。同时,分析了不同batch size下TensorRT的性能差异,并深入解析了cudaMemcpy与cudaMemcpyAsync的同步与异步特性。此外,还提到了如何利用CUDA Streams进行高效的数据传输和并行执行。

目录

tensorrt版本管理

个人感觉:软件的入口是tensorrt,tensorrt来调用cuda基础算子。

tensorrt优化笔记

1.tensorrt在不同batchsize下的性能对比

2. cudaMemcpy与cudaMemcpyAsync的区别


tensorrt版本管理

tensorrt 是封装好的库,不用安装,直接调用使用。

 myelin64_1.dll
 nvinfer.dll
 nvinfer_plugin.dll
 nvonnxparser.dll
 nvparsers.dll

个人感觉:软件的入口是tensorrt,tensorrt来调用cuda基础算子。

 nvinfer.dll 会对cuda和cuda相关的库有版本要求。

tensorrt优化笔记

 常见网络tensorrt c++版实现:

https://github.com/wang-xinyu/tensorrtx

tensorrt 和pytorch结果不一致:

TensorRT加速pytorch模型 - 知乎

这个说是一致的:

Pytorch 模型tensorrt部署v1_debug_moner的专栏-CSDN博客_tensorrt部署pytorch

使用TensorRT集成推理inference_吴建明wujianming_110117-CSDN博客

1.tensorrt在不同batchsize下的性能对比

tensorrt在不同batchsize下的性能对比_大鱼的博客-CSDN博客_tensorrt 多batch

这个博客很奇怪,batch_size越大,时间越短。

【tensorrt】——trtexec动态batch支持与batch推理耗时评测_怡宝2号-CSDN博客_trtexec 动态

2. cudaMemcpy与cudaMemcpyAsync的区别

转载请注明来源:cudaMemcpy与cudaMemcpyAsync的区别 - shrimp_929 - 博客园

简单可以理解为:cudaMemcpy是同步的,而cudaMemcpyAsync是异步的。具体理解需要弄清以下概念:

1.CUDA Streams

在cuda中一个Stream是由主机代码发布的一系列再设备上执行的操作,必须确保顺序执行。不同streams里面的操作可以交叉执行或者并发执行。

2.默认stream

设备操作包括:数据传输和kernels,在cuda中,所有的设备操作都在stream中执行。当没有指定stream时,使用默认的stream。默认stream是一个针对设备操作同步的stream,也就是说,只有当所有之前设备上任何stream里面的操作全部完成时,才开始默认stream里面操作的执行,并且默认stream里面的一个操作必须完成,其他任何stream里面的操作才能开始。

例如以下代码:

cudaMemcpy(d_a, a, numBytes, cudaMemcpyHostToDevice);
increment<<<1,N>>>(d_a)
cudaMemcpy(a, d_a, numBytes, cudaMemcpyDeviceToHost);

从设备端来看,这三个操作都在默认stream中,并且按顺序执行;从主机端来看,数据传输是阻塞的或者同步传输,而kernel是异步的。第一步主机到设备的数据传输是同步的,CPU线程不能到达第二行直到主机到设备的数据传输完成。一旦kernel被处理,CPU线程移到第三行,但是改行的传输不能开始,因为设备端正在执行第二行的内容。

3.非默认stream

非默认stream中的数据传输使用函数cudaMemcpyAsync(),这个函数在主机端是非阻塞的,传输处理后控制权马上返回给主机线程

参考:https://devblogs.nvidia.com/parallelforall/how-overlap-data-transfers-cuda-cc/

c++ opencv转 cuda,ok的:

     void *data_d, *scores_d, *boxes_d, *classes_d, *masks_d, *output_d;
        cudaMalloc(&data_d, batch * INPUT_H * INPUT_W * 3 * sizeof(float));



        cv::Mat cv_Mat = input.reshape(1,1);

        cudaMemcpy(data_d, cv_Mat.data, batch * INPUT_H * INPUT_W * 3 * sizeof(float), cudaMemcpyHostToDevice);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI算法网奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值