OpenVINO工具套件高级课程第二课:如何构建一个异构系统?

文章目录

  • 一、何为硬件加速器
    • 1、硬件加速器简介
    • 2、硬件加速器选择
  • 二、异构系统构建方法
  • 三、OpenVINO如何处理异构系统编程


一、何为硬件加速器

1、硬件加速器简介

1985年左右,那时候可以从intel公司购买到的最新最好的CPU是 i386处理器,如果需要用它来进行复杂的浮点运算,虽然说i386可以跑起来,但通过软件进行运算速度较慢。另外,还可以通过购买i387处理器,能够实现加速硬件上执行所有的数学运算,从而提升主处理器的性能。

大约4年后,下一款intel处理器i486,不再采用双芯片解决方案,取而代之的是i387协作处理器被集成至CPU中,数学辅助芯片加速器已经成为下一代CPU中的单元,这就是一个很好的例子。这让我们看到加速器最终被集成到CPU的框架中以提升整体性能,但是加速器中仍有一部分加速单元是独立的,必须在CPU的协同下工作。

2、硬件加速器选择

构建和使用计算设备是需要进行权衡。从下图可以看到,主要包括两类:
1)右侧是通用计算设备,可以运行所有类型的工作负载;
2)左侧是定制化的加速器,用于高速地执行特定的计算任务。
一般来说,通用架构需要匹配许多不同的模块来处理大量的任务,但是加速器仅需要专注于并运行特定的任务。
OpenVINO工具套件高级课程第二课:如何构建一个异构系统?_第1张图片
从另一个角度来看,CPU可以运行最广泛的应用,拥有最灵活的编辑模型并支持多种编程语言,拥有许多调试和分析工具。但CPU在执行3D渲染任务方面表现不如专门渲染构建的GPU,GPU执行3D渲染任务速度更快更高效,并且GPU执行的应用类型不如CPU广泛,不过在运行特色应用时表现会更加出色并且编程要求更复杂更独立,同时GPU的编程和调试工具相对比较少。如果有面向特定领域的高度定制化的加速器,比如VPU执行任务较少,但是可以在功率更低的情况下更高效地执行特定任务。

FPGA作为一个混合型解决方案,在使用FPGA时可以选择一定范围的应用去支持,同时可以选择可编程硬件进行硬件加速,因此从理论上讲,可以使用ASIC为它选用应用范围内和所需要的性能,但要注意到FPGA有其局限性。当然比较这些设备时,还需要考虑硬件的功效、价格等许多其他因素。
OpenVINO工具套件高级课程第二课:如何构建一个异构系统?_第2张图片
众所周知,CPU是一种通用计算设备,用途很广,几乎无所不能。但是,如果需要执行特定任务时,性能和效率就不如专门芯片。近几年来,市场上推出了各种加速不同任务的芯片,从通信芯片到GPU、VPU、AI加速器等特定领域芯片均有出现。

OpenVINO工具套件高级课程第二课:如何构建一个异构系统?_第3张图片
CPU作为主机Master,执行顶层应用,并且在需要加速时命令它们执行可以加速的任务,CPU向加速器发送数据和运行指令,最后等待返回结果。加速器做特定运算的速度将远远超过CPU,但在CPU和加速器之间来回传输数据会产生拷贝开销。因此,数据传输成本比较高,加速器对计算性能的提升会比较小,也许有时候在CPU上以较慢的速度执行该任务会更好。
OpenVINO工具套件高级课程第二课:如何构建一个异构系统?_第4张图片
总之,对硬件加速器的要求可以归结为两点:
1)将CPU作为主机
2)支持跨语言、API、内存模式、数据格式等进行通信

二、异构系统构建方法

对于异构系统的构建,通常有以下几个方法:

  • 建立在最高效的设备上以最高效的方式运行工作负载中的每一个任务,需要考虑的因素包括设备功能、计算能力、内存和占用空间等;
    OpenVINO工具套件高级课程第二课:如何构建一个异构系统?_第5张图片
  • 平衡系统中所有系统资源
  • 考虑传输成本以及加速器和主存储器之前来回传输数据的时间

三、OpenVINO如何处理异构系统编程

OpenVINO工具套件高级课程第二课:如何构建一个异构系统?_第6张图片
从上图可用看出,每个插件都有自己的底层实时库,CPU插件使用MKL-DNN库,该库具有对应内核、层或函数,用于针对所有intel的CPU类型的神经网络优化实施方案。
同时,推理引擎也可以使用MLUTI插件,其允许在多个类型设备上允许推理,在运行时期内推理引擎会去查看每一个设备的利用率,然后决定推理在哪个设备上运行,如果GPU可用,它将执行下一个推理任务,如果指定的CPU或者其他设备可用,它们将会用来执行推理任务。

由此看来,如果可能的话,系统内的所有设备都可以合理地分摊推理负载,这样可以使得机器的利用率更高。

你可能感兴趣的:(工具套件,openvino)