TensorRT教程19:最佳实践:网络性能的分析与优化

本文介绍了一种网络性能分析与优化的最佳实践方法,通过同步推理进行网络性能的计时,并记录每层运行时间,最终汇总并打印出各层及整体的平均运行时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最佳实践:网络性能的分析与优化

Profier计时网络性能时采用同步推理

测量每一层的运行时间

// profile类,继承自 IProfiler
struct Profiler : public IProfiler
{
    typedef std::pair<std::string, float> Record;
    std::vector<Record> mProfile;

    // 将每一层的运行时间存放到 vector中
    virtual void reportLayerTime(const char* layerName, float ms)
    {
        // find_if找到第一个 r.first 与 layerName 相同的层,返回一个迭代器
        auto record = std::find_if(mProfile.begin(), mProfile.end(), [&](const Record& r){ return r.first == layerName; });
        // 如果是新的层就push_back进vector
        if (record == mProfile.end())
            mProfile.push_back(std::make_pair(layerName, ms));
        // 如果是vector中已有的层就直接累加时间,因为他是迭代1000次的,肯定会重复,所以要累加时间
        else
            record->second += ms;
    }

    // 打印各层的运行时间,打印时要除总的迭代次数
    void printLayerTimes()
    {
        float totalTime = 0;
        for (size_t i = 0; i < mProfile.size(); i++)
        {
            printf("%-40.40s %4.3fms\n", mProfile[i].first.c_str(), mProfile[i].second / TIMING_ITERATIONS);
            totalTime += mProfile[i].second;
        }
        printf("Time over all layers: %4.3f\n", totalTime / TIMING_ITERATIONS);
    }

} gProfiler;



//定义迭代次数
static const int TIMING_ITERATIONS = 1000;

// 设置profiler
context->setProfiler(&gProfiler);

// 初始化,将输入缓冲区归零 zero the input buffer ,目的是使用空数据运行推理以计时网络性能
CHECK(cudaMemset(buffers[inputIndex], 0, inputSize));

// Profiling不支持异步方式,只支持同步方式,因此要使用同步执行函数 execute() 
// 执行过程中,每一层都会调用 profiler 回调函数,存储执行时间
for (int i = 0; i < TIMING_ITERATIONS;i++)
    context->execute(batchSize, buffers);

// 打印各层的运行时间
gProfiler.printLayerTimes();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

米斯特龙_ZXL

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

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

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

打赏作者

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

抵扣说明:

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

余额充值