一、简介

出于性能考虑,通常 CPU 无法满足耗时的要求,网络需要执行在 GPU 上增强性能,而数据的处理通常使用 OpenCL 也会比 CPU 快很多。

所以我们要是可以直接将 OpenCL 处理后的内存给 OpenVINO 执行,就可以避免将 OpenCL 内存拷贝到 CPU 上,再从 CPU 拷贝到 OpenVINO 中。

其实 OpenVINO 已经支持直接使用 OpenCL 的内存,只要他们公用一个 Context 即可。

二、使用

1.官方资料

本文是基于 OpenVINO 2021 的 SDK 写的,参考的官方文档链接为:https://docs.openvino.ai/2021.4/openvino_docs_IE_DG_supported_plugins_GPU_RemoteBlob_API.html

另外 OpenVINO 2022 的接口有所变动,可以参考这篇文档:https://docs.openvino.ai/latest/openvino_docs_OV_UG_supported_plugins_GPU_RemoteTensor_API.html

2.使用外部cl_context

#include <inference_engine.hpp>
#include <gpu/gpu_context_api_ocl.hpp>
#include <opencv2/core/ocl.hpp>
#include <opencv2/core/opencl/runtime/opencl_core.hpp>using namespace InferenceEngine;// 1.创建
Core ie;
auto net = ie.ReadNetwork("network.xml");
// 举例使用 OpenCV 提供的 cl_context,用者替换为自己的 cl_context
cl_context ctx = static_cast<cl_context>(cv::ocl::Context::getDefault().ptr());
auto remote_context = gpu::make_shared_context(mCore, "GPU", ctx);
ExecutableNetwork network = ie.LoadNetwork(net, remote_context);
InferRequest request = network.CreateInferRequest();// 2.设置数据
InputsDataMap& inputs = network.getInputsInfo();
for (auto& input : inputs) {auto& input_name = input.first;InputInfo::Ptr& input_info = input.second;// 这里是 cv::UMat uMat,用者替换为自己的 cl_memcl_mem shared_buffer = static_cast<cl_mem>(umat_in.u->handle);auto shared_blob = gpu::make_shared_blob(input_info->getTensorDesc(), network.GetContext(), shared_buffer);request.SetBlob(input_name, shared_blob);
}
for (auto& output : outputs) {auto& output_name = output.first; //output也是一个键值对类型DataPtr& output_info = output.second;// 这里是 cv::UMat uMat,用者替换为自己的 cl_memcl_mem shared_buffer = static_cast<cl_mem>(umat_out.u->handle);auto shared_blob = gpu::make_shared_blob(output_info->getTensorDesc(), network.GetContext(), shared_buffer);request.SetBlob(output_name, shared_blob);
}// 3.执行
request.Infer();// 4.获取输出,输出数据已经直接输出到 umat_out 中了。

OpenVINO使用OpenCL内存执行,避免拷贝相关推荐

  1. linux系统内存执行elf的多种方式

    一.前言 无文件(fileless)恶意软件攻击现在已经越来越流行,这一点并不奇怪,因为这种技术通常不会留下蛛丝马迹.本文的重点不是介绍如何在Windows RAM中执行程序,我们的目标是GNU/Li ...

  2. OpenCL内存性能优化 (2)

    OpenCL内存性能优化 (2) 7.1.4 全局内存 7.1.4.1 缓冲区 7.1.4.2 图片 7.1.4.3 使用图像对象与缓冲区对象 7.1.4.4 图像和缓冲区对象的使用 7.1.4.5 ...

  3. Linux内存uncache区域拷贝优化

    1.概述 内存非cache区域拷贝速度很慢,严重影响了系统性能,因此采用多种方法进行优化,主要有对齐拷贝.批量拷贝.减少循环次数.NEON拷贝方法. 2.高级SIMD和浮点寄存器介绍 2.NEON指令 ...

  4. 内存重叠的拷贝--memmove

    1.memmove要解决的问题 strcpy只能拷贝字符串,为了解决这一问题,则有了memcpy这一函数.但是针对重叠内存的拷贝,memcpy最初并不能解决这一问题(后期优化过的memcpy能够实现重 ...

  5. 20亿行21.3G的文本数据打乱操作只需要2.2G的内存执行19分钟

    运行环境:支持所有Linux系统,苹果操作系统,所有Windows 64位的操作系统 需要内存:至少8GB,本工具软件实际消耗的内存大约在2.2GB左右 需要固态硬盘:固态硬盘剩余空间必须是被打乱数据 ...

  6. oracle cte 内存,执行Oracle CTE

    我在Oracle中构建了一个关系数据模型,现在使用Python创建了一个GUI.我需要一个SQL语句在IDE中执行,但是得到一条cx_Oracle.DatabaseError: ORA-00936: ...

  7. NVIDIA Nsight Systems CUDA 跟踪

    NVIDIA Nsight Systems CUDA 跟踪 CUDA跟踪 NVIDIA Nsight Systems能够捕获有关在概要过程中执行CUDA的信息. 可以在报告的时间轴上收集和呈现以下信息 ...

  8. OpenCL 平台模型 - 执行模型 - 内存模型 - 编程模型

    OpenCL 平台模型 - 执行模型 - 内存模型 - 编程模型 面向异构平台的应用需要完成以下步骤: 发现构成异构系统的组件. 探查这些组件的特征,使软件能够适应不同硬件单元的特定特性. 创建将在平 ...

  9. jvm 堆外内存_NIO效率高的原理之零拷贝与直接内存映射

    更多内容,欢迎关注微信公众号:全菜工程师小辉~ 前言 在笔者上一篇博客,详解了NIO,并总结NIO相比BIO的效率要高的三个原因,彻底搞懂NIO效率高的原理. 这篇博客将针对第三个原因,进行更详细的讲 ...

最新文章

  1. Using-更精彩更有用的做法-短签名
  2. Nginx优化、服务器状态模块(--with-http_stub_status_module 的安装使用)
  3. xubuntu14.04下编译pjsip及pjsua2 java
  4. jquery中的ajax如何接收json串形式的接口
  5. 工业以太网交换机品牌排行榜,国产工业交换机哪个品牌好?
  6. python raise
  7. CentOS 使用spawn-fcgi配置Nginx+PHP 启动脚本
  8. github使用命令
  9. PAIP.SQL的跟踪与调试
  10. CMS垃圾回收器总结
  11. js中outerHTML的问题
  12. C# 压缩解压Zip文件
  13. 美图秀秀证件照发现不能用了了,俩个 一寸照片,俩寸证件照 证件照在线的网址记录一下,
  14. AI_Drug: 分子生成模型之VAE(一)
  15. 域名备案或不备案有什么区别?备案一般要多久。
  16. JDK8新特性-Lambda
  17. MDSF:Mendix介绍
  18. 【NodeJs-5天学习】第三天实战篇③ ——基于MQTT的环境温度检测
  19. 用计算机制作程序框图,如何制作工艺流程图 电脑绘制工艺流程图方法
  20. 使用MNM(Microsoft Network Monitor)抓包

热门文章

  1. 【THUSC2017】【LOJ2977】巧克力 斯坦纳树
  2. 浅探 进程的家族关系
  3. chaos engineering读书笔记
  4. Cocos Creator 3.2 中实现2D地图3D人物45度角RPG游戏效果笔记(摄像机设置方案)
  5. Kubernetes介绍
  6. python黑屏改成白底_详解Python给照片换底色(蓝底换红底)
  7. [考试反思]0909csp-s模拟测试41:反典
  8. Android挂机 屏幕,游戏蜂窝新版支持全面屏手机 简单几步教你如何设置挂机
  9. GitHub 吸星大法 - 一年收获 2000+ Star 的心得
  10. 材质自发光过曝之后变白的问题