IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> tensorrt简单示例,使用parse -> 正文阅读

[游戏开发]tensorrt简单示例,使用parse

#include "NvInfer.h"
#include <iostream>
#include "NvOnnxParser.h"
#include <fstream>
#include "cuda_runtime_api.h"
#include <vector>

using namespace nvonnxparser;
using namespace nvinfer1;
using namespace std;

class Logger : public ILogger
{
    void log(Severity severity, const char* msg) noexcept override
    {
        // suppress info-level messages
        if (severity <= Severity::kWARNING)
            std::cout << msg << std::endl;
    }
} logger;


int main(int argc,char ** argv){

    if(*argv[1]== 's') {
        IBuilder *builder = createInferBuilder(logger);

        uint32_t flag = 1U << static_cast<uint32_t>(NetworkDefinitionCreationFlag::kEXPLICIT_BATCH);

        INetworkDefinition *network = builder->createNetworkV2(flag);

        IParser *parser = createParser(*network, logger);

        parser->parseFromFile("/home/wjd1/Downloads/vgg16-7.onnx",
                              static_cast<int32_t>(ILogger::Severity::kWARNING));
        for (int32_t i = 0; i < parser->getNbErrors(); ++i) {
            std::cout << parser->getError(i)->desc() << std::endl;
        }

        IBuilderConfig *config = builder->createBuilderConfig();

        builder->setMaxBatchSize(1);
        config->setMaxWorkspaceSize(1 << 30);

        IHostMemory *serializedModel = builder->buildSerializedNetwork(*network, *config);

        ofstream p("/home/wjd1/tensorrttest/test.engine", ios::binary);
        if (!p.good()) {
            cout << "open failed" << endl;
        }
        p.write(reinterpret_cast<const char *>(serializedModel->data()), serializedModel->size());
        delete parser;
        delete network;
        delete config;
        delete builder;
        delete serializedModel;

    }else if(*argv[1]=='d'){
        size_t size{0};
        char * trtModelStream{nullptr};
        ifstream file("/home/wjd1/tensorrttest/test.engine", ios::binary);
        if(file.good()){
            file.seekg(0,file.end);
            size = file.tellg();
            file.seekg(0,file.beg);
            trtModelStream = new char[size];
            file.read(trtModelStream,size);
            file.close();

        }


        IRuntime * runtime = createInferRuntime(logger);
        ICudaEngine * engine = runtime->deserializeCudaEngine(trtModelStream,size);
        IExecutionContext *context = engine->createExecutionContext();
        delete[] trtModelStream;


        void * buffers[2];
        const char * INPUT_NAME = "data";
        const char * OUTPUT_NAME="vgg0_dense2_fwd";
        int32_t inputIndex = engine->getBindingIndex(INPUT_NAME);
        int32_t outputIndex = engine->getBindingIndex(OUTPUT_NAME);

        int batchSize = 1;
        int INPUT_H=224;
        int INPUT_W=224;
        int OUTPUT_SIZE=1000;

        cudaMalloc(&buffers[inputIndex],batchSize*3*INPUT_H*INPUT_W*sizeof (float ));
        cudaMalloc(&buffers[outputIndex],batchSize*OUTPUT_SIZE*sizeof (float ));

        float data [3*INPUT_H*INPUT_W];
        float prob [OUTPUT_SIZE];

    for(int i = 0 ; i <3*INPUT_H*INPUT_W;++i){
        data[i]=1;
    }

        cudaStream_t stream;
        cudaStreamCreate(&stream);

        cudaMemcpyAsync(buffers[inputIndex],data,batchSize*3*INPUT_H*INPUT_W*sizeof (float ), cudaMemcpyHostToDevice,stream);
        context->enqueueV2(buffers,stream, nullptr);

        cudaMemcpyAsync(prob,buffers[outputIndex],batchSize*OUTPUT_SIZE*sizeof (float ), cudaMemcpyDeviceToHost,stream);
        cudaStreamSynchronize(stream);

        cudaStreamDestroy(stream);
        cudaFree(buffers[inputIndex]);
        cudaFree(buffers[outputIndex]);

        delete context;
        delete engine;
        delete runtime;

        for(auto i = 0 ; i<OUTPUT_SIZE;++i){
            cout<<prob[i]<<",";
        }


    }


}
cmake_minimum_required(VERSION 3.0)
project(test)
aux_source_directory(. src)

set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/)
set(CMAKE_BUILD_TYPE Debug)

include_directories(/usr/local/cuda-11.3/include)
link_directories(/usr/local/cuda-11.3/lib64)

include_directories(/home/wjd1/TensorRT-8.0.0.3/include)
link_directories(/home/wjd1/TensorRT-8.0.0.3/lib)

add_executable(testrt ${src})

target_link_libraries(testrt cudart cudnn cublas nvinfer nvparsers nvinfer_plugin nvonnxparser nvrtc )

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 18:15:32  更:2022-04-18 18:17:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/16 21:13:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码