主机与硬件加速模块的交互方法、硬件加速设备及介质与流程

文档序号:17358030发布日期:2019-04-09 21:51阅读:165来源:国知局
主机与硬件加速模块的交互方法、硬件加速设备及介质与流程
本发明涉及计算机领域,特别是涉及一种主机与硬件加速模块的交互方法、硬件加速设备及介质。
背景技术
:硬件加速模块是指为主机提供计算加速的模块。硬件加速模块可以是附加在其他设备如存储设备中,也可以是单独的专门提供加速功能的设备。例如,在视频编解码技术中,如果使用主机的cpu(centralprocessingunit,中央处理器)用纯软件的方式来做编解码,编解码的容量有限;为了增加容量或减少视频编解码对cpu的资源消耗,可以将视频编解码的部分或全部功能用硬件来实现,即具有硬件加速功能的视频编解码器;其具体的产品可以是独立的视频编解码卡;也可以是内置于其他设备(如gpu)中的视频编码模块和/或视频解码模块。其中gpu为图形处理器,英语全称为graphicsprocessingunit。现有硬件加速模块中,主机与硬件加速模块之间的通信,需要通过厂家自定义的专用通信协议,或者公开标准的opencl(opencomputinglanguage,开放运算语言)架构。但是为了支持这些硬件加速模块需要专用的设备驱动程序;如果采用公开标准的架构,也需要能够支持opencl的设备驱动程序;因此,在升级主机中硬件加速模块的过程中,往往需要增加或修改设备驱动程序,就意味着要重新编译操作系统内核,重新安装操作系统,并安装库函数和应用软件,因此这种升级方式比较复杂,代价比较高。针对现有技术中,主机与硬件加速模块之间通信方式复杂、增加或升级硬件加速模块的方式比较复杂、升级成本较高的问题,本领域未给出有效的解决方案。技术实现要素:为了克服上述缺陷,本发明要解决的技术问题是提供一种主机与硬件加速模块的交互方法、硬件加速设备及介质,用以至少解决主机与硬件加速模块之间通信方式复杂的问题。为解决上述技术问题,本发明实施例中的一种主机与硬件加速模块的交互方法,包括:响应主机的硬件加速命令;根据pcie总线的非挥发性设备的接口标准nvme协议,与所述主机交互硬件加速数据。为解决上述技术问题,本发明实施例中的一种硬件加速设备包括存储器和处理器,所述存储器存储有交互计算机程序,所述处理器执行所述计算机程序,以实现如上所述方法的步骤。为解决上述技术问题,本发明实施例中的一种计算机可读存储介质存储有交互计算机程序,所述计算机程序可被至少一个处理器执行,以实现如上所述方法的步骤。本发明实施例有益效果如下:上述的各个实施例根据nvme协议与所述主机交互硬件加速数据,从而有效降低主机与硬件加速模块之间通信方式的复杂度,并且在升级主机中硬件加速模块的过程中,不需要增加或修改设备驱动程序,更不需要重新编译操作系统内核,以及不需重新安装操作系统、库函数和应用软件,从而在增加或升级硬件加速模块的的过程中,有效降低其复杂度和代价。上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。附图说明通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:图1是本发明实施例中一种主机与硬件加速模块的交互方法的流程图;图2是本发明实施例中主机与解码器的交互流程;图3是本发明实施例中主机与编码器的交互流程。具体实施方式下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。在后续的描述中,使用用于表示元件的诸如“模块”、“部件”或“单元”的后缀仅为了有利于本发明的说明,其本身没有特定的意义。因此,“模块”、“部件”或“单元”可以混合地使用。使用用于区分元件的诸如“第一”、“第二”等前缀仅为了有利于本发明的说明,其本身没有特定的意义。实施例一本发明实施例提供一种主机与硬件加速模块的交互方法,如图1所示,所述方法包括:s101,响应主机的硬件加速命令;s102,根据pcie总线的非挥发性设备的接口标准nvme协议,与所述主机交互硬件加速数据。其中,硬件加速模块可以可以附加在其他设备中,也可以是单独的专门提供硬件加速功能的设备,例如视频编码模块和/或视频解码模块;当然在本发明实施例中硬件加速模块可以简称为模块。在本发明实施例中根据nvme协议与所述主机交互硬件加速数据,从而有效降低主机与硬件加速模块之间通信方式的复杂度,并且在升级主机中的硬件加速模块的过程中,不需要增加或修改设备驱动程序,更不需要重新编译操作系统内核,以及不需重新安装操作系统、库函数和应用软件,从而在增加或升级硬件加速模块的的过程中,有效降低其复杂度和代价。在上述实施例的基础上,下面给出几个具体及可选实施方式,用以细化和优化本发明实施例,以使本发明实施例的方案的实施更方便,准确。需要说明的是,在不冲突的情况下,以下实施方式可以互相任意组合。在一些实施方式中,所述响应主机的硬件加速命令之前,可选地包括:通过所述nvme协议的第一厂家自定义字段或命令,接收所述主机的硬件加速命令。在一些实施方式中,所述根据pcie总线的非挥发性设备的接口标准nvme协议,与所述主机交互硬件加速数据,包括:在所述硬件加速命令为硬件加速模块的识别命令时,根据所述nvme协议,向所述主机返回硬件加速模块中硬件加速模块的指示信息;在所述硬件加速命令为硬件加速模块的控制命令时,根据所述nvme协议,执行与所述控制命令对应的管理操作;在所述硬件加速命令为硬件加速模块的交互命令时,根据所述nvme协议,按照所述交互命令,与所述主机进行读写交互操作。在一些实施方式中,通过识别命令对硬件加速模块进行识别的过程中,所述根据所述nvme协议,向所述主机返回硬件加速模块中硬件加速模块的指示信息,可以包括:将所述指示信息携带在所述nvme接口协议的第二厂家自定义字段中返回给所述主机。其中,将所述指示信息携带在所述nvme接口协议的厂家自定义字段中,可以包括:将所述指示信息携带在所述nvme接口协议的数据结构的厂家自定义字段中;所述数据结构为所述硬件加速模块隶属的控制器或命名空间的能力和状态的数据结构;所述指示信息用于指示所述主机根据指示信息进行资源分配。所述指示信息包括视频编码模块和/或视频解码模块的能力及状态信息。详细地,对硬件加速模块的识别:在nvme协议中,设备上可以有多个nvme控制器(controller),及多个命名空间(namespace,用来区分不同的存储盘)。在本发明实施例中,硬件加速模块可以直接隶属于控制器,也可以隶属于namespace。主机通过identify命令来询问设备有关控制器及namespace的能力和状态等信息。设备在回复identify命令的时候,会根据主机命令中cns(controllerornamespacestructure)的要求,返回一个描述控制器或namespace的能力和状态的数据结构。在nvme一些版本中,描述控制器的数据结构包含以下几个部分:在nvme一些版本中,描述namespace的数据结构包含以下几个部分:可以看到在对主机identify命令的回复中,nvme标准留出了一些厂家自定义的字段(vendor-specific)。在本发明实施例中,设备通过这些自定义字段来表明设备中含有某种或某些硬件加速模块,以及这种或这些硬件加速模块的能力和状态。在系统中的nvme设备,可能是存储设备如固态硬盘,也可以是支持某种或某些硬件加速模块的设备(也可以是支持某种硬件加速模块的固态硬盘)。主机可以通过这些厂家自定义字段,来判断设备是否支持某种或某些硬件加速模块,以及这些硬件加速的能力。例如,以下以nvme1.3接口形式的视频编码模块和/或视频解码模块为例子,描述识别视频编码模块和/或视频解码模块的过程。在本例中,设备中最多有一个nvme控制器,所有的视频编码模块和/或视频解码模块都直接隶属于控制器(而不是隶属于namespace),且每个控制器有最多16个视频编码模块和/或视频解码模块。每个编解码模块要么做编码,要么做解码。每个模块可以激活多个编码或解码实例。每个模块可以支持一种或多种视频编码格式。在identifycontrollerdatastructure中,对厂家自定义字段定义如下:每个模块的属性一共32个字节,定义如下:主机可以通过nvme协议的驱动程序向设备发出identifycontroller命令,然后从设备返回的数据中得到有关视频编码模块和/或视频解码模块的数量、能力等信息,主机可以根据这些信息做资源分配等工作。在一些实施方式中,可以控制硬件加速模块用以进行相应的管理操作。在nvme协议中,主机通过管理命令(admincommand)来控制设备。在nvme一些版本的管理命令集中,操作码(opcode)在c0h–ffh范围内的命令是厂家自定义的命令(例如厂家自定义的管理命令)。在本发明实施例中,主机可以通过厂家自定义的管理命令来控制硬件加速模块。比如可以对硬件加速功能进行初始化、改变配置或关闭等操作。例如,以nvme1.3接口形式的视频编码模块和/或视频解码模块为例,描述控制及查询视频编码模块和/或视频解码模块的流程。其中,利用厂家自定义操作码(opcode),定义如下的管理命令来控制及查询视频编码模块和/或视频解码模块。一、厂家自定义命令xcoder-open:xcoder-open命令在指定的模块上分配并初始化一个编码或解码实例,命令成功完成后返回一个编码或解码实例标识符(instanceid),如果有错则返回错误状态码。此命令沿用nvme命令的基本格式。主机发送命令到“管理命令提交队列(adminsubmissionqueue)”里,而设备在完成命令后将完成信息发送到“管理命令完成队列(admincompletionqueue)”里。其中,管理命令提交队列中的记录格式(submissionqueueentry):管理命令提交队列中的xcoder-open命令记录的datapointer(dptr)字段(字节范围39:24)在此命令中指向编码或解码参数。管理命令提交队列中的xcoder-open命令记录的cdw10字段(字节范围43:40)定义如下:比特位置含义31:24模块标识符(moduleid)23:16保留15:00编解码参数的长度其中,管理命令完成队列中的记录格式(completionqueueentry):管理命令完成队列中的xcoder-open命令记录的dw0字段(字节范围3:0)定义如下:比特位置含义31:24编码参数有关的错误状态码23:16编解码通用的错误状态码15:00编码或解码实例标识符(instanceid)二、厂家自定义命令xcoder-close:xcoder-close命令在指定的模块上关闭一个指定的编码或解码实例,命令完成后返回状态码。此命令沿用nvme命令的基本格式。主机发送命令到“管理命令提交队列(adminsubmissionqueue)”里,而设备在完成命令后将完成信息发送到“管理命令完成队列(admincompletionqueue)”里。其中,管理命令提交队列中的记录格式(submissionqueueentry):管理命令提交队列中的xcoder-close命令记录的cdw10字段(字节范围43:40)定义如下:其中,管理命令完成队列中的记录格式(completionqueueentry):管理命令完成队列中的xcoder-close命令记录的dw0字段(字节范围3:0)定义如下:比特位置含义31:24错误状态码23:00保留三、厂家自定义命令xcoder-query:xcoder-query命令查询一个指定的编解码模块的状态,命令完成后返回状态及一些统计信息。此命令沿用nvme命令的基本格式。主机发送命令到“管理命令提交队列(adminsubmissionqueue)”里,而设备在完成命令后将完成信息发送到“管理命令完成队列(admincompletionqueue)”里。其中,管理命令提交队列中的记录格式(submissionqueueentry):管理命令提交队列中的xcoder-query命令记录的cdw10字段(字节范围43:40)定义如下:比特位置含义31:24模块标识符(moduleid)23:00保留管理命令完成队列中的记录格式(completionqueueentry):管理命令完成队列中的xcoder-query命令记录的dw0字段(字节范围3:0)定义如下:比特位置含义31:24模块状态码23:16该模块的负载百分比15:00该模块上被激活的编码或解码实例的数量四、厂家自定义命令xcoder-reconfig:xcoder-reconfig命令重新配置一个编码或解码实例,命令完成后返回状态码。此命令沿用nvme命令的基本格式。主机发送命令到“管理命令提交队列(adminsubmissionqueue)”里,而设备在完成命令后将完成信息发送到“管理命令完成队列(admincompletionqueue)”里。其中,管理命令提交队列中的记录格式(submissionqueueentry):管理命令提交队列中的xcoder-reconfig命令记录的datapointer(dptr)字段(字节范围39:24)在此命令中指向编码或解码参数。管理命令提交队列中的xcoder-reconfig命令记录的cdw10字段(字节范围43:40)定义如下:比特位置含义31:24模块标识符(moduleid)23:16保留15:00编码或解码实例标识符(instanceid)管理命令提交队列中的xcoder-reconfig命令记录的cdw11字段(字节范围47:44)定义如下:比特位置含义31:16保留15:00编解码参数的长度其中,管理命令完成队列中的记录格式(completionqueueentry):管理命令完成队列中的xcoder-reconfig命令记录的dw0字段(字节范围3:0)定义如下:比特位置含义31:24错误状态码23:00保留当然,在一些实施方式中,所述硬件加速模块可以包括视频编码模块;所述根据所述nvme协议,按照所述交互命令,与所述主机进行读写交互操作,可选地包括:通过所述nvme协议的第三厂家自定义字段或命令,接收所述主机逐帧传递过来的原始视频;将所述原始视频进行编码得到编码后的视频;通过所述nvme协议的第四厂家自定义字段或命令,将编码后的视频逐帧传输给所述主机。在一些实施方式中,所述硬件加速模块包括视频解码模块;所述根据所述nvme协议,按照所述交互命令,与所述主机进行读写交互操作,可选地包括:通过所述nvme协议的第五厂家自定义字段或命令,接收所述主机逐帧传递过来的编码视频;将所述编码视频进行解码得到解码后的视频;通过所述nvme协议的第六厂家自定义字段或命令,将解码后的视频逐帧传输给所述主机。详细地,在主机和硬件加速模块之间的数据交换过程,在nvme协议中,主机通过nvm命令(也即io命令)来向设备写入数据或从设备读出数据。在nvme一些版本的nvm命令集中,操作码(opcode)在80h–ffh范围内的命令是厂家自定义的io命令。在本发明实施例中,主机可以通过自定义的io命令或nvme的标准读写命令与设备交换数据。数据交换需要考虑nvme协议对命令的执行次序的规定。nvme协议不保证同时进行的命令的次序,也就是说如果主机同时给设备下达多个命令,这些命令并不一定按照下达顺序来执行。所以如果主机上的应用与设备之间数据交换需要顺序进行,则可以在每次命令得到设备的回复之后再发下一条命令;否则,主机上的应用可以一次向设备下发多个命令。例如,以nvme1.3接口形式的视频编码模块和/或视频解码模块为例,描述主机与视频编码模块和/或视频解码模块的数据交换。利用厂家自定义操作码(opcode),定义如下的nvm命令来进行主机与视频编码模块和/或视频解码模块的数据交换。一、厂家自定义命令xcoder-write:xcoder-write命令传送一个压缩视频数据包到一个解码实例,或传送一个yuv视频数据包到一个编码实例;命令完成后返回一些状态信息。此命令沿用nvme命令的基本格式。主机发送命令到“io命令提交队列(iosubmissionqueue)”里,而设备在完成命令后将完成信息发送到“io命令完成队列(iocompletionqueue)”里。其中,io命令提交队列中的记录格式(submissionqueueentry):io命令提交队列中的xcoder-write命令记录的datapointer(dptr)字段(字节范围39:24)在此命令中指向主机内存中的数据地址。io命令提交队列中的xcoder-write命令记录的cdw10字段(字节范围43:40)定义如下:io命令提交队列中的xcoder-write命令记录的cdw11字段(字节范围47:44)定义如下:比特位置含义31:00视频数据的长度io命令提交队列中的xcoder-write命令记录的cdw12字段(字节范围51:48)定义如下:比特位置含义31:16图像的宽度15:0图像的高度其中,管理命令完成队列中的记录格式(completionqueueentry):管理命令完成队列中的xcoder-write命令记录的dw0字段(字节范围3:0)定义如下:比特位置含义31:28保留27:24帧序号(frameindex),仅对编码实例有效23:00缓存中剩余空间长度,仅对解码实例有效二、厂家自定义命令xcoder-read:xcoder-read命令从一个解码实例读出一帧yuv图像,或从一个编码实例读出一帧压缩图像;命令完成后返回一些状态信息。此命令沿用nvme命令的基本格式。主机发送命令到“io命令提交队列(iosubmissionqueue)”里,而设备在完成命令后将完成信息发送到“io命令完成队列(iocompletionqueue)”里。其中,io命令提交队列中的记录格式(submissionqueueentry):io命令提交队列中的xcoder-read命令记录的datapointer(dptr)字段(字节范围39:24)在此命令中指向主机内存中缓存的地址。io命令提交队列中的xcoder-read命令记录的cdw10字段(字节范围43:40)定义如下:io命令提交队列中的xcoder-read命令记录的cdw11字段(字节范围47:44)定义如下:比特位置含义31:00向主机传送的数据的最大长度其中,io命令完成队列中的记录格式(completionqueueentry):io命令完成队列中的xcoder-read命令记录的dw0字段(字节范围3:0)定义如下:例如,基于本发明实施例的一个实施方式,主机与硬件加速模块(例如解码器)之间的解码流程如图2所示,可以包括:步骤1,视频解码开始的时候,用xcoder-open命令分配并初始化一个解码实例;将压缩视频一帧一帧地用xcoder-write命令送给解码实例。步骤2,判断是否还有视频帧需要发送给解码器;若否执行步骤6,若是执行步骤3。步骤3,判断是否是最后一帧;若否执行步骤5,若是执行步骤4。步骤4,设置end-of-stream标志。步骤5,利用xcoder-write命令传送一个压缩视频帧给解码器。步骤6,利用.xcoder-read命令,如果有解码出来的yuv帧,则从解码器读回每次送一帧压缩视频的时候都用xcoder-read命令从解码实例读出一帧解码出来的yuv视频帧。步骤7,判断是否读回了最后一个解码视频帧,也即判断是否收到了end-of-stream标志,若是执行步骤8,若否执行步骤2;其中,最后传给解码实例的视频帧设置end-of-stream标志;步骤8,如果读出来的yuv视频帧有end-of-stream标志,则用xcoder-close命令关闭视频解码实例。又如,基于本发明实施例的一个实施方式,主机与硬件加速模块(例如编码器)之间的编码流程如图3所示,可以包括:步骤1,视频编码开始的时候,用xcoder-open命令分配并初始化一个编码实例;步骤2,判断是否还有视频帧需要发送给编码器;若否执行步骤6,若是执行步骤3。步骤3,判断是否是最后一帧;若否执行步骤5,若是执行步骤4。步骤4,设置end-of-stream标志。步骤5,将yuv视频一帧一帧地用xcoder-write命令送给编码实例;步骤6,每次送一帧yuv视频的时候都用xcoder-read命令从解码实例读出一帧编码码出来的压缩视频帧。步骤7,判断是否收到最后一帧视频帧,也就是判断是否收到了最后传给编码实例的视频帧设置end-of-stream标志。若是执行步骤8,若否执行步骤2。步骤8,如果读出来的压缩视频帧有end-of-stream标志,则用xcoder-close命令关闭视频编码码实例。实施例二本发明实施例基于实施例一提供一种硬件加速设备,所述设备包括存储器和处理器,所述存储器存储有交互计算机程序,所述处理器执行所述计算机程序,以实现如实施例一中任意一中实施方式所述方法的步骤。实施例三本发明实施例基于实施例一提供一种计算机可读存储介质,所述存储介质存储有交互计算机程序,所述计算机程序可被至少一个处理器执行,以实现如实施例一中任意一中实施方式所述方法的步骤。其中,实施例二和实施例三在具体实现的过程中,其中的实施细节可以参阅实施例一,具有相应的技术效果。需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,这些均属于本发明的保护之内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1