灵活配置的本地异构计算环境中的高容量、低延迟数据处理

文档序号:1661750 发布日期:2019-12-27 浏览:9次 >En<

阅读说明:本技术 灵活配置的本地异构计算环境中的高容量、低延迟数据处理 (High-volume, low-latency data processing in flexibly-configured local heterogeneous computing environments ) 是由 李舒 周平 于 2018-04-13 设计创作,主要内容包括:资源管理包括:以第一模式操作,包括执行与多个本地元件相关的控制器操作,其中,控制器操作由可配置资源执行;从第一模式切换到第二模式;并且以第二模式操作,包括:在可配置资源的第一部分中执行数据处理任务;在可配置资源的第二部分中执行与多个本地元件相关的控制器操作。(The resource management comprises the following steps: operating in a first mode comprising performing controller operations associated with a plurality of native elements, wherein the controller operations are performed by a configurable resource; switching from a first mode to a second mode; and operating in a second mode comprising: performing a data processing task in a first portion of the configurable resources; controller operations associated with the plurality of native elements are performed in a second portion of the configurable resources.)

灵活配置的本地异构计算环境中的高容量、低延迟数据处理

背景技术

数据处理(诸如数据提取和识别、数据分析和预测等)是现代计算环境的重要方面。在诸如搜索、电子商务、金融、医疗、安全以及其他等这样的基于互联网的应用平台上,需要离线以及在线处理大量数据。

当前,为了处理高容量数据,现代计算环境(例如,基于云的计算环境)通常采用专用的硬件和软件集群来执行特定功能。数据通过高速结构在完成特定任务的不同集群之间进行传输。例如,数据可以由网络集群进行检查,发送到要处理的计算集群,然后发送到存储集群以进行存储。随着数据量增加,需要更大量的数据结构,并且必须扩展基础设施以满足要求。此外,数据延迟通常会随着更多数据被传输而增加。另外,由于专用集群所生成的中间数据的增加,可能需要修改集群以包括额外的存储容量,这增加了成本。如何在不显著增加延迟的情况下高效地管理高容量数据的处理正成为日益紧迫的问题。

具体实施方式

本发明可以以多种方式实现,包括作为处理;装置;系统;物质的组成;计算机程序产品,其包含在计算机可读存储介质上;和/或处理器,诸如处理器,其被配置为执行存储在联接到处理器的存储器上的指令和/或由联接到处理器的存储器提供的指令。在本说明书中,这些实现或本发明可以采用的任何其他形式可以称为技术。通常,可以在本发明的范围内改变所公开的处理的步骤的顺序。除非另有说明,否则可以将诸如被描述为被配置为执行任务的处理器或存储器这样的组件实现为被临时配置为在给定时间执行任务的通用组件或者被制造为执行任务的特定组件。如这里所使用的,术语“处理器”是指被配置为处理诸如计算机程序指令的数据的一个或更多个设备、电路和/或处理核。

下面提供本发明的一个或更多个实施例的详细描述以及说明本发明的原理的附图。结合这些实施例描述了本发明,但是本发明不限于任何实施例。本发明的范围仅由权利要求限定,并且本发明包括许多替换、修改和等同物。在以下描述中阐述了许多具体细节,以便提供对本发明的透彻理解。提供这些细节是出于示例的目的,并且可以在没有这些具体细节中的一些或全部的情况下根据权利要求来实践本发明。为了清楚起见,没有详细地描述与本发明相关的技术领域中已知的技术材料,使得不会不必要地使本发明模糊不清。

本申请公开了在能够处理高容量数据的系统中灵活配置资源。在本文中描述的各种实施例中,系统被配置为:以第一模式操作,包括执行与多个本地元件相关的控制器操作,其中,控制器操作由可配置资源执行;从第一模式切换到第二模式;并且以第二模式操作,包括:在可配置资源的第一部分中执行数据处理任务;在可配置资源的第二部分中执行与多个本地元件相关的控制器操作。

图1是示出数据中心中的异构计算集群的示例的框图。在该示例中,数据中心100包括多个集群(102-110)。具体地,集群110是包括诸如中央处理单元(CPU)、图形处理单元(GPU)、张量处理单元(TPU)、现场可编程门阵列(FPGA)等这样的各种计算元件的异构计算集群。该集群被配置为执行数据处理功能。

集群102-108被配置为执行与数据分析无关的其他专用数据处理功能,诸如数据存储、网络处理等。高容量数据通过网络结构112从集群102-108传输到异构计算集群110,以便异构计算集群执行诸如数据分析的数据处理功能。根据需要,处理结果被传回集群102-108。集群之间的数据传输通常需要百兆位或千兆位的带宽。因此,对于要处理从其他集群发送的高容量数据的计算集群110,网络结构112上的负载可以是大量的。

为了减轻网络结构上的带宽压力,开发了用于高容量数据处理的可配置架构。图2是示出在网络中部署的可配置架构的实施例的框图。系统200可以部署在数据中心、企业网络或任何其他适当的大规模网络上。在诸如202、204等的集群内,存在一个或更多个可配置多功能设备212、214等。如下面将更详细描述的,可配置多功能设备的实施例有多种操作模式。在专用模式中,可配置多功能设备被配置为充分利用诸如逻辑单元、存储器等的特定资源来执行诸如数据存储、网络处理等的专用数据处理功能。当要处理数据时,可配置多功能设备切换到共享模式,其中资源在专用数据处理功能和数据处理功能(诸如数据分析)之间共享。优选地,可配置多功能设备对其本地数据执行数据处理和/或数据处理功能,从而避免必须在集群之间移动大量数据。因此,显著降低了维护具有此类数据集群的数据中心的成本。

图3A和图3B是示出不同模式中的可配置多功能设备的实施例的资源分配的框图。在该示例中,示出了处于专用模式和共享模式的设备的逻辑组件。

图3A示出了可配置多功能设备的实施例在专用模式下的资源分配。如图所示,可配置多功能设备300包括前端接口302、多个控制器引擎304和多个后端通道(也称为后端接口)306。

可以使用一个或更多个PCIe总线、一个或更多个微处理器、一个或更多个微控制器、任何其他适当的硬件、软件、固件或其组合来实现前端接口302。前端接口302将设备300与一个或更多个其他设备(例如,设备300是其一部分的主机系统的CPU、外部系统等)连接,并促进设备300与其他设备之间的通信。特别地,前端接口302促进一个或更多个其他设备与可配置多功能设备内的控制器308之间的通信。例如,前端接口可以从主机接收请求,将请求发送到控制器,从控制器接收结果,并将结果发送到主机。

该示例中的可配置资源包括可配置逻辑单元(诸如FPGA单元、CPLD单元等)以及DRAM(视情况而定)。控制器308包括控制器引擎304和后端通道306,这两者都可以使用诸如FPGA、CPLD等的可配置逻辑来实现。在一些实施例中,控制器引擎和/或后端通道还包括诸如DRAM的存储器元件。控制器引擎304被配置为通过执行诸如读/写/重置、存储器管理、垃圾收集等的各种控制器功能来管理本地元件的功能。该示例中的控制器引擎使用FPGA来实现,控制器引擎的实例被配置为独立地操作。后端通道306被配置为将控制器引擎304与位于同一设备上的诸如NAND晶片、网络处理器等的本地元件(未示出)连接。后端通道306使用FPGA来实现,并且被配置为执行诸如复用的功能。

在专用模式下,设备内的可配置资源用于实现用于执行控制器功能的全套控制器引擎304和后端通道306。在此模式下,可配置多功能设备执行数据存储、联网或者设备设计所针对的其他专用数据处理操作。其他数据处理功能(如数据分析)未实现,因此在此模式下不会在设备上执行。

当需要执行附加数据处理,特别是计算密集型分析功能(诸如图像识别、语音识别、语言翻译、搜索索引等)时,可配置多功能设备切换到共享模式,其中,设备中的可配置资源的一部分用于执行控制器功能,并且设备中的可配置资源的另一部分用于促进数据处理操作。

图3B示出了处于共享模式的设备。在该示例中,可配置资源的一部分被配置为控制器引擎和后端通道,并且(示为314和316)执行控制器功能。可配置资源的另一部分(散列部分320和322)被配置为执行包括一个或更多个数据处理操作的一个或更多个数据处理任务。具体地,数据处理任务实现(例如,合成的FPGA逻辑和/或固件代码)从存储位置加载并用于重新编程FPGA和/或固件以实现数据处理任务。在这种模式下,在本地元件的数据吞吐量和总体数据处理效率之间进行权衡。换句话说,专用功能的吞吐量(例如,数据存储或网络处理)受到限制,资源从控制器转移以执行数据处理。具体而言,由于支持对本地元件的数据访问的控制引擎和后端通道较少,因此本地元件的数据吞吐量降低,但是由于被处理的数据优选地位于可配置多功能设备(例如,在同一卡上)的本地,因此总体处理效率提高并且网络负载减少。例如,在图像识别的情况下,被识别的图像被本地存储在可配置多功能设备中。通过使用灵活的可配置服务器,图像不必通过网络传输到单独的计算集群以进行识别,并且节省了网络带宽。

图4A和图4B是示出不同模式中的可配置多功能设备的另一个实施例的资源分配的框图。这些框图示出了示例设备的硬件资源的共享。

图4A示出了专用模式中的示例可配置多功能设备的资源分配。在所示的示例中,设备400支持异构计算,因为它包括多种类型的计算资源,诸如FPGA 402和DRAM 404。除了逻辑单元(未示出)之外,FPGA 402还包括处理器核(具体地,ARM核406-412)。FPGA逻辑单元可用于在硬件中实现寄存器转换级(RTL)或其他更高级代码。ARM核和DRAM可被配置为实现固件代码,提供存储等。在专用模式下,逻辑单元、ARM核和板载DRAM被配置为实现用于管理存储元件的控制器功能(在该情况下为NAND闪存420),诸如读、写、重置、垃圾回收等。

图4B示出了在共享模式下的示例可配置多功能设备的资源分配。在该示例中,重新配置以实现数据处理功能的硬件部分以阴影示出。重新配置的硬件的数量取决于被实现的数据处理功能。

除了或代替在FPGA中重新编程逻辑单元(未示出)的一部分以实现数据处理功能之外,ARM核(例如,408和412)中的一些被加载有实现所期望的数据处理功能的固件代码。数据处理功能可以是简单的例程(诸如比较、排序等)以及更复杂的操作(诸如信号处理、识别等)。优选地对存储在NAND闪存420中的数据执行数据处理功能。

此外,DRAM的一部分也从控制器释放并被重新用于支持数据处理功能。因为可用较少量的DRAM来实现控制器功能,所以修改控制器的地址映射以确保存储功能将能够正确地访问NAND闪存420中的存储单元。下面结合图6A和图6B讨论修改的地址重新映射的细节。

图5是示出可配置多功能设备的另一个实施例的框图。在该示例中,设备500是包括一个或更多个存储模块550的存储设备。存储模块550包括前端接口,在这种情况下是PCIe接口502,被配置为与主机系统的CPU和系统存储器通信。设备500还包括多个本地元件,在这种情况下是用于存储数据的NAND闪存元件554。设备500还包括DRAM 505和FPGA507(可配置资源),其在专用模式中被配置为仅执行用于管理诸如NAND闪存的存储元件上的数据存储的存储控制器功能,并且在共享模式中被部分地配置为执行存储控制器功能并被部分地配置为执行存储在NAND闪存上的数据的数据处理功能。持久存储器503(在这种情况下,NOR闪存)被配置为存储由FPGA和DRAM在不同模式下使用的逻辑实现(例如,用于执行控制器功能、诸如搜索或转换算法这样的特殊数据处理功能以及诸如比较、排序等这样的通用功能的代码的可执行文件和/或逻辑镜像)。

出于说明的目的,在本文的示例中详细地讨论了存储设备,但是这些技术也适用于其他专用数据处理设备。例如,如果设备500是联网设备而不是存储设备,则它可以包括网络处理器来代替NAND闪存,或者除了NAND闪存之外还包括网络处理器。在专用模式中,使用可配置资源(诸如板载FPGA和/或DRAM)实现的网络控制器将控制网络处理器执行联网功能(诸例路由、安全性等);在共享模式下,共享资源的一部分将继续充当网络控制器,而共享资源的另一部分将被重新配置以执行其他类型的数据处理(诸如图像处理、转换等)。

如上面结合图4B所讨论的,在共享模式中,DRAM中的一些从控制器释放并用于支持数据处理。由于可用于实现控制器功能的DRAM少于专用模式,因此修改控制器的地址映射方案(或等效地,逻辑页面地址到物理页面地址转换方案)以确保具有其NAND闪存的存储模块正确地工作。图6A和图6B是示出两种模式中的控制器的地址映射的图。

图6A示出了在专用模式下的存储系统的实施例中如何进行地址转换。当主机文件系统从存储器中读取页面或将页面写入存储器中时,主机文件系统使用的页面地址称为逻辑页面地址(LPA)。可配置多功能设备600的控制器610包括闪存转换层(FTL)602,其被配置为从主机文件系统接收LPA并将LPA转换为用于访问NAND闪存604的物理页面地址(PPA)。在专用模式中,使用传统逻辑页面地址到物理页面地址映射表606。在此表中,每个LPA映射到单个PPA。映射表606存储在DRAM 608中。为了将LPA转换成PPA,FTL在映射表606中查找LPA以找到相应的PPA。如果在映射表中没有找到LPA,则分配新的PPA,并且将LPA映射到新的PPA的新条目添加到表606中。

图6B示出了在共享模式下的存储系统的实施例中如何进行修改的地址转换。在该示例中,DRAM的一部分从控制器中释放,并且可用于存储LPA到PPA表的DRAM的量小于专用模式。为了确保主机文件系统仍可访问物理单元,使用压缩地址映射表。控制器执行压缩功能652以将多个LPA映射到单个介质页面地址(MPA)。在这种情况下,FTL实现MPA到PPA映射表,该MPA到PPA映射表将每个MPA映射到相应的PPA。预先指定的方案确定特定LPA相对于其对应PPA的偏移。例如,假设压缩函数将两个相邻的LPA映射到同一MPA,该同一MPA进而映射到PPA。预先指定的方案指定第一LPA相对于PPA具有0的偏移并且第二LPA相对于PPA具有4KB的偏移。LPA 1和LPA 2二者都映射到MPA 1,MPA 1对应于PPA A。根据预先指定的方案,LPA 1和LPA 2分别映射到相对于PPA A的0和4KB的处的物理地址。作为另一示例,LPA 3和4都映射到MPA 2,MPA 2对应于PPA B。根据预先指定的方案,LPA 3和LPA 4分别映射到相对于PPA B的0和4KB的偏移处的物理地址。在该示例中,因为LPA到MPA的映射是2比1,所以实现FTL所使用的表所需的存储器的量是如同图6A中的一半大小。

在另一示例中,假设压缩函数将四个相邻的LPA映射到具有4KB偏移的同一MPA。因此,LPA 1、2、3和4映射到MPA 1并因此映射到PPA A,偏移量分别为0、4KB、8KB和12KB;LPA5、6、7和8映射到MPA 2并因此映射到PPA B,偏移量分别为0、4KB、8KB和12KB;等等。许多不同的压缩函数和映射方案都是可能的。在一些实施例中,给定LPA,压缩函数查找对应的MPA,然后计算LPA的模函数以确定对应的偏移(例如,余数0对应于相对于MPA的0KB的偏移,余数1对应于相对于MPA的4KB的偏移量等)。在该示例中,LPA到MPA的映射是4比1,并且实现FTL所使用的表所需的存储器的量是如同图6A中的1/4大小。

图7是示出用于在可配置多功能设备的实施例中管理数据的处理的实施例的流程图。处理700可以在诸如300、400、500或600这样的可配置多功能设备上执行。微处理器等可以用于指示可配置资源进入不同的模式和配置。

在702处,在第一模式(专用模式)中,针对多个本地元件执行控制功能。取决于设备的类型,本地元件可以是NAND闪存、网络处理器等,并且控制功能用于控制本地元件如何处理数据。例如,存储控制功能控制存储驱动器上的NAND闪存,网络控制功能控制联网设备上的网络处理器等。

在704处,接收重新配置请求。在各种实施例中,重新配置请求可以由用户手动进行,或者由主机或其他设备响应于资源需求的变化(例如,当启动数据处理应用时)而自动进行。响应于重新配置请求,设备切换到第二模式(共享模式)。

在706处,在第二模式中,重新分配资源,使得在可配置资源的第一部分中执行一个或更多个数据处理任务,并且在可配置资源的第二部分中执行与多个本地元件相关的一个或更多个控制器操作。例如,被配置为在第一模式中执行控制器操作的特定FPGA单元和/或DRAM被重新配置为在第二模式中执行一个或更多个数据处理任务。

图8是示出用于将多功能设备从第一模式重新配置为第二模式的处理的实施例的流程图。处理800可以在诸如300、400、500或600这样的设备上执行,并且可以用于实现处理700的706。

当设备通电时,它最初以第一模式操作,其作为被配置为执行特定数据处理操作的专用设备。出于说明该示例的目的,详细地讨论了存储设备。设备的可配置资源用于实现存储控制器功能。如上所述,系统实现包括各种应用进程的应用层,所述各种应用进程中的至少一些应用进程被配置为在存储设备上执行。例如,当特定应用进程需要对存储在存储设备上的数据执行数据处理操作时,该设备将被重新配置,并且处理800启动。

在802处,将一个或更多个数据处理任务的实现下载到设备上。数据处理任务包括一个或更多个数据处理操作。在一些实施例中,数据处理任务可以被分成多个部分,包括计算密集型数据处理操作(诸如比较、排序等)。例如,识别许多值当中的最大值的任务可以被分成多个比较操作。作为另一个例子,执行图像或语音识别的任务可以被分成具有FIR滤波器的数据流的卷积运算。在一些实施例中,使用RTL、C或其他更高级编程语言来指定至少一些操作,并将其编译成可以在FPGA硬件中实现的FPGA镜像(例如,布局图)。在一些实施例中,至少一些操作被实现为要在ARM核上执行的固件代码。

数据处理任务的实现可以存储在任何适当的位置,诸如网络上的单独驱动器上、本地闪存存储元件上等。在该示例中,应用层向设备提供用于定位要下载的实现的地址(例如,作为IP地址、URL、文件目录路径等)。该实现被下载到本地存储位置(例如,图5的NOR闪存503),准备加载到诸如FPGA的可配置资源上。

在804处,基于下载的实现确定所需的资源量。所需的资源量取决于硬件布局,诸如FPGA映射所指定的硬件布局。例如,实现排序功能的FPGA映射可以指定100个逻辑单元的资源需求。因此,需要重新配置至少100个逻辑单元。

在806处,根据逻辑单元可用性确定并行实现的实例。例如,假设设备具有总共1500个逻辑单元,控制器需要至少1000个逻辑单元来维持其所需的吞吐量,并且下载的排序功能实现需要100个逻辑单元。因此,可以释放500个逻辑单元并使其可用于实现排序功能的并行实现的5个实例。

在此示例中,设备所使用的FPGA不能被部分地重新编程。换句话说,为了更新FPGA的一部分,整个FPGA需要重新编程。因此,在808处,合并控制器镜像和数据处理任务镜像以形成用于重新编程FPGA的新的合并镜像。FPGA制造商提供的合并工具可用于生成合并镜像。在FPGA(和/或其他可配置资源)能够被部分地重新编程的实施例中,可以省略808。

在810处,使用验证工具(诸如由FPGA制造商提供的验证工具)来验证合并的镜像,。验证结果指示合并的镜像是否能够用于重新编程FPGA。

如果验证不成功,则处理返回到804,并且重复804-810直到生成成功验证的镜像为止。

如果验证成功,则处理进行到812,其中将合并的镜像写入本地持久存储器。在这种情况下,合并的镜像被写入本地NOR闪存。将合并的镜像存储到NOR闪存中更好地防止了存储在SRAM中的镜像(其是FPGA所使用的合并镜像)损坏。如果存储在SRAM中的镜像损坏,FPGA的奇偶校验处理将发现错误,存储在NOR闪存中的副本可以被加载到SRAM中以替换损坏的副本。

在814处,禁用驱动器上的所有读取和写入操作。可以向主机发出系统调用以禁用读取和写入操作,并在重新配置进行的同时阻止数据访问。

在816处,使用合并镜像来配置(例如,重新编程)FPGA。重新编程可以使用FPGA制造商所提供的工具来完成。

在818处,确定配置是否成功。在该示例中,使用由FPGA制造商提供的板载验证机制来进行确定。

如果配置不成功,则在820处,恢复原始控制器镜像。此外,由于故障指示设备有问题,因此设备被置于只读模式以防止进一步的数据损坏,并且故障被报告为日志、警报、消息等。此时处理终止。

如果配置成功,则在822处,安装重新配置的存储设备(及其卸载的处理器和存储控制器)。一旦设备作为驱动器安装在网络上,主机就可以重新启动对存储设备的读取和写入操作,尽管吞吐量将比以前低。

在824处,向发出重新配置请求的应用层发送通知,指示数据处理能力已变得可用。在接收到通知时,应用层可以使用重新配置的FPGA来发送对本地存储的数据启动数据处理的请求。

在一些实施例中,除了FPGA逻辑之外,数据处理功能还需要固件支持。因此,在818处认为FPGA被成功重新配置之后,在可配置的处理器上下载并开发(例如,加载)适当的固件代码,并且与数据处理功能有关地执行。

在该示例中,对存储在诸如NAND闪存的本地存储器中的数据执行数据处理,以减少网络上的业务。在完成数据处理工作之后,设备恢复到其原始状态(例如,作为专用存储设备)并全速执行其专用数据处理功能。换句话说,设备退出共享模式并重新进入专用模式。

图9是示出用于恢复控制器功能的处理的实施例的流程图。在执行诸如800的处理之后,可以在诸如300、400或500的设备上执行处理900。在完成数据处理功能时,应用层通知设备开始恢复资源。

在902处,暂停传入的读取和写入请求(I/O请求)。在一些实施例中,向主机发送通知(例如,系统调用、消息等),指示主机不发送新的I/O请求。此外,控制器处理并完成所有现有请求,或者缓冲稍后要处理的现有请求。

在904处,执行诸如数据处理操作和数据存储操作的当前内部操作。可配置多功能设备继续在共享模式下执行其挂起操作。不同的功能可以由FPGA的不同部分独立执行。

在906处,检查当前内部操作是否完成。如果当前内部操作未完成,则处理返回到904,直到所有当前内部操作完成为止。然而,如果当前内部操作完成,则处理进行到908,其中从存储位置加载控制器镜像并进行验证。在这种情况下,从设备的持久存储器(例如,NOR闪存)中的存储位置检索控制器镜像,并使用FPGA制造商提供的验证工具对其进行验证。

在910处,确定验证是否成功。在此示例中,检查验证工具的输出。失败的验证指示控制器镜像包含错误。因此,该处理返回到908,其中,从第二存储位置加载控制器镜像并再次验证。在这种情况下,从NAND闪存加载控制器镜像,NAND闪存是存储控制器镜像的独立副本的辅助存储器。可以提供控制器镜像的其他级别的备份存储位置,诸如网络上的其他存储设备(例如,RAID、磁盘驱动器等)上。重复908和910,并且连续地尝试这些备份存储位置,并且从其他存储位置加载控制器镜像并进行验证,直到找到通过验证的控制器镜像。

如果验证成功,则在912处,将控制器镜像编程到FPGA中。在FPGA不支持部分重新编程的实施例中,整个FPGA可以用新的控制器镜像重新编程。在FPGA支持部分编程的实施例中,先前编程为执行数据处理任务的部分可以用控制器镜像重新编程。

在914处,执行针对编程控制器的功能的一组检查。在此示例中,该组检查包括逻辑等式检查,以确保编程到FPGA中的内容具有正确的逻辑设计。这些检查可由设备的制造商指定。

在916处,确定是否成功地执行了该组检查。这里,假设正确加载的有效控制器镜像将导致成功的检查。如果任何检查都不成功,则处理返回到908,其中,再次验证控制器镜像并在必要时重新加载。

如果检查成功,则处理进行到918,其中,从其存储位置(诸如NOR闪存)删除过时的镜像(例如,来自处理800的808的合并镜像)以释放容量。

在922处,继续先前在902中暂停的I/O操作,并且设备被设置为再次以专用模式操作。在一些实施例中,向其他设备发送关于该设备的新状态的适当通知。对于重新配置为存储驱动器的可配置设备,主机和网络上的其他设备可以将其用作安装驱动器以提供存储功能。所有FPGA、SRAM、处理器和其他可配置资源都被用于实现与存储相关的功能。

已经公开了灵活地配置设备的资源以在不同模式下操作,从而提供计算能力。该技术使得资源能够被高效地使用,并因此降低了网络上的部署和维护成本。此外,因为被处理的数据优选地位于设备的本地,所以与现有方法相比,显著地减少了数据传输,并且极大地节省了网络带宽。

尽管为了清楚理解的目的已经在一些细节上描述了前述实施例,但是本发明不限于所提供的细节。存在许多实现本发明的替代方式。所公开的实施例是说明性的而非限制性的。

23页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:运行自动化系统的方法和根据方法工作的自动化系统

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!