面向spm存储层次的数据缓存实现方法

文档序号:923744 发布日期:2021-03-02 浏览:14次 >En<

阅读说明:本技术 面向spm存储层次的数据缓存实现方法 (Data caching implementation method facing SPM storage hierarchy ) 是由 方燕飞 文延华 李雁冰 杨小川 王敬宇 何王全 于 2019-08-26 设计创作,主要内容包括:本发明公开一种面向SPM存储层次的数据缓存实现方法,包括以下步骤:S1、建立数据缓存的编程描述;S2、编译器分析编译指示,确定循环分块参数LoopBlockKey;S3、编译器根据S2中获得的循环分块参数,计算每一个循环块的计算、访存开销与数据传送开销的比值,得到并行隐藏参数Hkey;S4、根据S3得到的并行隐藏参数,反馈修正,得到最终的循环分块参数;S5、根据循环分块参数和并行隐藏参数,选择循环重构策略进行循环重构。本发明有效提升了编译器的上下文分析精确度和应用的访存效率,且可以做到计算与不同存储层次间的数据传送并行进行,有效利用处理器的各个存储层次,更进一步提升程序性能。(The invention discloses a data cache implementation method facing SPM storage hierarchy, which comprises the following steps: s1, establishing a programming description of the data cache; s2, the compiler analyzes the compiling instruction and determines a loop blocking parameter LoopBlockKey; s3, calculating the ratio of the calculation cost and the memory access cost of each circulation block to the data transmission cost by the compiler according to the circulation block parameters obtained in S2 to obtain a parallel hidden parameter Hkey; s4, according to the parallel hidden parameters obtained in the S3, feedback correction is carried out to obtain final circulation block parameters; and S5, selecting a circulation reconstruction strategy to carry out circulation reconstruction according to the circulation blocking parameters and the parallel hiding parameters. The invention effectively improves the context analysis accuracy of the compiler and the access efficiency of the application, can perform calculation and data transmission between different storage levels in parallel, effectively utilizes each storage level of the processor, and further improves the program performance.)

面向SPM存储层次的数据缓存实现方法

技术领域

本发明涉及一种面向SPM存储层次的数据缓存实现方法,属于计算机技术领域。

背景技术

随着微处理器架构的发展,多核和众核成为微处理器设计的主要方向。受到面积和功耗的限制,众核处理器倾向于将片上SRAM组织成SPM这种软件管理的非cache结构。这种需要软件管理存储层次的特点给用户编程带来了很大的挑战,用户在编写应用时,不仅需要进行多级多层次的并行规划,还需要考虑数据在不同存储层次的布局、缓冲和传送。

众核处理器支持多级多层次并行,存储架构复杂,编程困难,为了解决众核处理器的编程问题,学术界和业界都展开了大量深入的研究,提出了多种解决方案。主要包括:1)以OpenCL语言为代表的支持显式异构编程的并行语言。OpenCL提供了丰富的语言扩展,支持多种存储层次上的数据,支持不同存储层次间显式的数据传送。OpenCL丰富的语言支持是编制灵活高效应用的利器,也是制约OpenCL用户的主要因素。作为提供丰富API支持显式并行的语言,OpenCL应用性能的获得主要依靠用户显式说明的数据布局和数据传送,以及用户确定的并行方式。这就要求OpenCL用户不仅需要具备丰富的专业应用知识,而且对众核处理器的体系结构有深入的了解。2)以OpenMP、OpenAcc语言为代表的支持隐式并行的编程语言。使用这一类语言编程,用户不需要进行显示的存储管理,只需要用编译指示指明并行区间和并行方式。这一类应用的性能在很大程度上依赖于编译系统的优化。编译系统编译优化的前提是保证应用的正确性。以此为据,编译系统在上下文无法明确的情况下只能进行保守处理,无法进行激进的性能优化,这势必会影响应用程序的效率。

武汉科技大学于2012年11月申请了专利(CN102890658A,一种嵌入式系统中基于SPM的输入输出缓冲实现方法),主要用于提高嵌入式系统输入输出处理速度和降低输入输出处理过程的存储访问功耗。其特点是在SPM空间中划分出多个输入输出请求区域用作输入输出缓冲,缓冲溢出后,才将数据从SPM空间导入内存空间。该专利利用SPM空间访问延迟小、访问带宽高的特点,通过将内存空间的输入输出缓冲到SPM空间从而提高访存性能。然而,以上专利解决的是输入输出的缓冲处理问题,利用SPM空间提高访存性能,与如何实现循环中数据访问的缓冲以及运算与数据传送的并行,以达到提高访存性能的目的相去甚远。

还有许多科研机构也在面向SPM存储层次的众核处理器编程和编译优化设计方面做了尝试,目前主要的处理方法有两大类,第一类从挖掘机器性能的角度出发,提供详细的API接口,将应用的并行设计和数据的布局、导入导出全部交给用户处理,最大化提高应用性能。这类方法的缺点是对用户要求太高。第二类从减轻用户负担的角度出发,用户只需要进行并行策略的制定,数据的布局和导入导出全部交给编译器自动处理。该类方法的缺点是应用性能严重依赖于编译器的优化设计,在某些编译器无法进行精细优化的情况下,应用性能势必受到很大影响。所以,如何在这两类方法之间进行权衡,寻找一种用户指导编译器进行数据布局和数据导入导出处理的方法,就成为面向SPM存储层次的众核处理器编程和编译优化设计的难题。

发明内容

本发明的目的是提供一种面向SPM存储层次的数据缓存实现方法,该面向SPM存储层次的数据缓存实现方法有效提升了编译器的上下文分析精确度和应用的访存效率,且可以做到计算与不同存储层次间的数据传送并行进行,有效利用处理器的各个存储层次,更进一步提升程序性能。

为达到上述目的,本发明采用的技术方案是:一种面向SPM存储层次的数据缓存实现方法,包括以下步骤:

S1、建立数据缓存的编程描述:即在循环前,添加编译指示,用于说明循环中需要进行访存优化的数据集和用于访存优化的SPM缓存区的信息;

S2、编译器分析S1中的编译指示,确定循环分块参数LoopBlockKey:即解析S1中的编译指示,得到SPM缓存区的总大小和需要进行访存优化的数据集,确定每一次批量传送的数据量,根据该数据量确定可以确保数据访问均集中在SPM缓冲中的循环迭代次数,将该循环迭代次数作为循环分块参数LoopBlockKey;

S3、编译器根据S2中获得的循环分块参数LoopBlockKey,计算每一个循环块的计算、访存开销与数据传送开销的比值,得到并行隐藏参数Hkey,具体步骤如下:

S31、根据循环分块参数LoopBlockKey,获得循环分块后每一个循环块包含的迭代次数It,It=LoopBlockKey;

S32、计算每一次迭代的计算开销Tc;扫描循环中的所有语句,获取每一条语句中每一次计算的计算类型,根据计算类型得到该次计算的计算开销值,将循环中所有计算的计算开销值累加,得到每一次迭代的计算开销Tc;

S33、计算每一次迭代的访存开销Tm;扫描循环中的所有访存操作,根据S2中确定的需要访存优化的数据集判断该次访存操作是否可以进行访存优化,如果可以,则每一次迭代该访存操作的访存开销为访问SPM缓冲空间的开销,否则,该访存操作的访存开销为相应的存储层次的访存开销,将循环中所有访存操作的访存开销累加,得到每一次迭代的访存开销Tm;

S34、计算每一个循环块的数据传送开销Tt;根据S1中的编译指示说明的可以进行访存优化的数据集,获得需要进行数据传送的次数n,通过循环分块参数LoopBlockKey得到第i次数据传送的数据量Tsizei=LoopBlockKey*TypeSizei,其中,TypeSizei是第i次数据传送的数组变量的类型,数据传送开销Tt可以通过以下算式得到,Tt=∑(Tstart+Tsizei/Tbandwidth),i=1,n,其中,Tstart为数据传送的启动开销,Tbandwidth为数据传送的带宽;

S35、计算每一个循环块的并行隐藏参数Hkey;Hkey=(It*Tc+It*Tm)/Tt;

S4、根据S3计算出的并行隐藏参数Hkey,确定分块循环的最终循环分块参数;如果Hkey大于或等于1,说明计算、访存开销大于或等于数据传送开销,数据在不同存储层次间的传送可以被计算、访存操作隐藏,即在进行本次循环块运算时,可以并行进行下一个循环块所需数据的批量传送,在这种情况下,SPM缓冲需要分成两份,一份用于本循环块的运算,另一份用于下一个循环块所需数据的预先传送,因此将循环分块参数LoopBlockKey减半;如果Hkey小于1,则不做计算、访存与数据传送的并行,循环分块参数LoopBlockKey保持不变;

S5、根据S4中得到的循环分块参数LoopBlockKey,选择循环重构策略进行循环重构;当S3计算出的并行隐藏参数小于1时,计算、访存开销无法隐藏数据传送开销,采用顺序执行模式的循环重构,即运算和不同存储层次间的数据传送顺序进行,在此过程中,编译器将多个连续的访问主存操作转换为使用SPM和主存之间的数据传送引擎完成的批量数据传送和对SPM缓冲空间的多个访问,进行访存优化;当并行隐藏参数大于或等于1时,采用并行执行模式的循环重构,使用两个缓冲进行数据传送隐藏,两个缓冲交替使用,并进行异步数据传送。

上述技术方案中进一步改进的方案如下:

1. 上述方案中,如果有多重循环需要优化,则在每一重需要优化的循环前,添加编译指示。

2. 上述方案中,所述SPM缓存区的信息包括SPM上的缓存区首地址和缓存区的大小。

由于上述技术方案的运用,本发明与现有技术相比具有下列优点:

本发明面向SPM存储层次的数据缓存实现方法,主要应用于并行语言编译系统,通过编译指示指导编译器完成SPM存储层次上数据的导入导出,在减轻用户负担的同时,充分利用编译指导信息引导编译器有的放矢地进行高效访存优化,而不必在上下文无法精确分析的情况下采用保守的编译策略引起程序性能急剧下降,编译器可以按照编译指示进行精细高效的优化,有效提升了编译器的上下文分析精确度和应用的访存效率;另外,编译器在分析循环的计算开销、访存开销与数据传送开销的基础上,针对具体情况,可以进行优化隐藏部分数据传送时间,做到计算与不同存储层次间的数据传送并行进行,有效利用处理器的各个存储层次,更进一步提升程序性能。

附图说明

附图1为本发明方法流程图;

附图2为顺序执行模式循环执行流程图;

附图3为并行执行模式循环执行流程图。

具体实施方式

实施例:一种面向SPM存储层次的数据缓存实现方法,包括以下步骤:

S1、建立数据缓存的编程描述:即在循环前,添加编译指示,用于说明循环中需要进行访存优化的数据集和用于访存优化的SPM缓存区的信息;

S2、编译器分析S1中的编译指示,确定循环分块参数LoopBlockKey:即解析S1中的编译指示,得到SPM缓存区的总大小和需要进行访存优化的数据集,确定每一次批量传送的数据量,根据该数据量确定可以确保数据访问均集中在SPM缓冲中的循环迭代次数,将该循环迭代次数作为循环分块参数LoopBlockKey;

S3、编译器根据S2中获得的循环分块参数LoopBlockKey,计算每一个循环块的计算、访存开销与数据传送开销的比值,得到并行隐藏参数Hkey,具体步骤如下:

S31、根据循环分块参数LoopBlockKey,获得循环分块后每一个循环块包含的迭代次数It,It=LoopBlockKey;

S32、计算每一次迭代的计算开销Tc;扫描循环中的所有语句,获取每一条语句中每一次计算的计算类型,根据计算类型得到该次计算的计算开销值,将循环中所有计算的计算开销值累加,得到每一次迭代的计算开销Tc;

S33、计算每一次迭代的访存开销Tm;扫描循环中的所有访存操作,根据S2中确定的需要访存优化的数据集判断该次访存操作是否可以进行访存优化,如果可以,则每一次迭代该访存操作的访存开销为访问SPM缓冲空间的开销,否则,该访存操作的访存开销为相应的存储层次的访存开销,将循环中所有访存操作的访存开销累加,得到每一次迭代的访存开销Tm;

S34、计算每一个循环块的数据传送开销Tt;根据S1中的编译指示说明的可以进行访存优化的数据集,获得需要进行数据传送的次数n,通过循环分块参数LoopBlockKey得到第i次数据传送的数据量Tsizei=LoopBlockKey*TypeSizei,其中,TypeSizei是第i次数据传送的数组变量的类型,数据传送开销Tt可以通过以下算式得到,Tt=∑(Tstart+Tsizei/Tbandwidth),i=1,n,其中,Tstart为数据传送的启动开销,Tbandwidth为数据传送的带宽;

S35、计算每一个循环块的并行隐藏参数Hkey;Hkey=(It*Tc+It*Tm)/Tt;

S4、根据S3计算出的并行隐藏参数Hkey,确定分块循环的最终循环分块参数;如果Hkey大于或等于1,说明计算、访存开销大于或等于数据传送开销,数据在不同存储层次间的传送可以被计算、访存操作隐藏,即在进行本次循环块运算时,可以并行进行下一个循环块所需数据的批量传送,在这种情况下,SPM缓冲需要分成两份,一份用于本循环块的运算,另一份用于下一个循环块所需数据的预先传送,循环分块起因于SPM空间上的数据缓冲,数据缓冲减小了一半,因此将循环分块参数LoopBlockKey减半;如果Hkey小于1,则不做计算、访存与数据传送的并行,循环分块参数LoopBlockKey保持不变;

S5、根据S4中得到的循环分块参数LoopBlockKey,选择循环重构策略进行循环重构;当S3计算出的并行隐藏参数小于1时,计算、访存开销无法隐藏数据传送开销,采用顺序执行模式的循环重构,即运算和不同存储层次间的数据传送顺序进行,在此过程中,编译器将多个连续的访问主存操作转换为使用SPM和主存之间的数据传送引擎完成的批量数据传送和对SPM缓冲空间的多个访问,进行访存优化;当并行隐藏参数大于或等于1时,采用并行执行模式的循环重构,使用两个缓冲进行数据传送隐藏,两个缓冲交替使用,并进行异步数据传送。

如果有多重循环需要优化,则在每一重需要优化的循环前,添加编译指示。

上述SPM缓存区的信息包括SPM上的缓存区首地址和缓存区的大小。

实施例进一步解释如下:

本发明的目的是克服现有技术缺陷,提供一种简化面向SPM存储层次的众核处理器编程方法,基于该编程方法提供一种提升面向众核处理器的应用访存性能的技术。

为实现上述目的,本发明的技术方案如下:

1)提出一种面向SPM存储层次的数据缓存编程描述

2)提出在该编程描述作用下编译器自动进行的访存优化技术

下面进行详细阐述。

1)一种面向SPM存储层次的数据缓存编程描述

众核处理器最基本的存储架构包括主存和SPM,主存空间大,访问延迟高,访问带宽低;SPM空间小,访问延迟低,访问带宽高;主存和SPM之间有批量传送引擎,可以一次进行大批量的数据传送。主存空间通常是GB级的,而SPM空间通常只有KB级,这就说明应用课题的大部分数据只能放在主存;但是主存的访问延迟是SPM访问延迟的几十倍,为了提高应用性能,核心程序段中的数据访问最好集中在SPM中,这就必须进行访存优化,在SPM中设立缓冲区,使用批量传送引擎将核心程序段中需要的主存数据分批预先传送到SPM缓冲中,核心程序段的运算都针对SPM展开,运算完成后再将更新的数据批量传回主存。

应用的核心程序段一般是以循环的形式存在的。要针对循环进行访存优化,不仅要考虑主存和SPM缓冲进行批量数据交互的粒度、批量数据交互函数插入的位置,而且要进行循环分块、变量下标变换及相应的程序变换,甚至存在循环分割等更复杂操作,如果把这些都交给用户处理,用户的负担及其沉重,编程效率会及其底下。为了减轻用户负担,本发明提出了一种面向SPM存储层次的数据缓存编程描述。

本编程描述是针对循环的。用编译指示的方式在需要进行访存优化的循环结构前指明简要信息,批量数据传送的粒度和形式、程序变换等复杂工作都由编译器自动完成,可以有效减轻用户负担。简要信息包括需要进行访存优化的数据集、用于访存优化的SPM上的缓存区首地址、缓存区的大小。

进行访存优化的数据集是指在循环中连续访问或者区域访问的变量,连续访问包括跨步为1和跨步不等于1的连续访问,区域访问的区域必须小于SPM缓存区的大小。具有这两种访问特点的数据在批量数据传送后,才可能将核心循环中的数据访问集中到SPM缓存区,减小程序访存开销,达到访存优化的效果。

进行访存优化的数据之间可以相关、也可以不相关。但是数据相关性引发的正确性问题由编译指示保证。因为本专利的特点就是编译指示指导编译器,用户使用编译指示的时候会对变量之间的关系有详尽的了解,编译器直接根据编译指示进行访存优化处理,不再进行额外的变量相关性分析。这也是编译指示指导的主要意义,当编译器无法精确判断变量之间的关系时,不必为了正确性而做保守处理,从而造成应用性能的急剧下降。

用编译指示说明的SPM上的缓存区是一个总的缓存区,说明的大小也是该缓存区的大小。如果数据集中有多个变量,编译器会自动将缓存区分给多个变量使用。

该编译指示只针对紧跟其后的循环,其作用域是单重循环。如果有多重循环需要优化,可以在每一重需要优化的循环前,添加编译指示。

2)在编程描述作用下编译器自动进行的访存优化技术

编译器根据编程描述自动进行访存优化,具体方法如图1所示。

(1)分析编译指示,确定循环分块参数

用户使用编译指示说明本循环中需要进行访存优化的数据集、SPM缓存区的首地址和大小,编译器根据编译指示进行访存优化,其技术思路是按照SPM缓存区的总大小和需要进行访存优化的变量总数确定每一次批量传送的数据量,根据该数据量确定可以确保数据访问都集中在SPM缓冲中的循环迭代的次数,将该循环迭代次数作为循环分块参数LoopBlockKey对原始循环进行循环分块处理。

确定循环分块参数就是确定按照怎样的粒度对循环进行分块。进行循环分块的原因是要做访存优化,因为SPM上的缓冲空间有限,所以要将原来的循环按照缓冲空间的大小分段运行。

(2)计算并行隐藏参数

循环分块参数确定之后,就可以利用SPM上的缓冲空间进行访存优化了。但是只做主存和SPM之间的批量数据传送优化不是我们的最终目的,要想更进一步提升程序性能,还可以考虑隐藏部分数据传送时间,做到计算与不同存储层次间的数据传送并行进行。

使用本编译指示的循环在循环分块后,每一个循环块的计算、访存开销与数据传送开销的比值被称为并行隐藏参数。并行隐藏参数的引入就是为了更好地确定每一个循环块的计算和访存开销是否可以隐藏数据传送开销。如果计算和访存开销能够和数据传送开销持平,那么就可以在本循环块计算的同时进行下一个循环块的数据传送。因为可用的SPM缓冲空间只有一份,要实现数据传送和计算同步并行进行,必须将缓冲空间分裂为两部分,一部分用于已经传送好的数据的计算,另一部分用于下个循环块所用数据的传送。基于这个原则,并行隐藏参数的确定过程如下:

a)根据循环分块参数LoopBlockKey可以获得循环分块后每一个循环块包含的迭代次数It,It=LoopBlockKey。循环分块参数的求取并没有考虑计算与数据传送的并行,而要实现计算与数据传送的并行必须将缓冲空间分裂为两部分,即循环块中参与运算的元素个数减半,所以每一个循环块包含的迭代次数It也必须减半。

b)计算每一次迭代中的计算开销Tc。为了比较精确地得到计算开销,可以预先通过测试得到不同平台的各类计算的计算开销值。在本步骤中,需要扫描循环中的所有语句,获取每一次的计算类型,根据计算类型得到测试到的计算开销值,循环中所有计算的计算开销值累加后得到每一次迭代的计算开销Tc。

c)计算每一次迭代中的访存开销Tm。这个开销的计算是针对循环分块并且进行访存优化后的每一次迭代。可以被优化的访存其访存开销就按照访问SPM缓冲空间的开销计算;对于不能优化的访存操作,其访存开销按照该变量的空间属性对应的访存开销计算。

d)计算数据传送开销Tt。计算每一个循环块的数据传送开销,需要知道数据传送次数和每一次的数据传送量,通过查找编译指示中的变量集可以知道需要进行数据传送的次数n,通过循环分块参数LoopBlockKey得到第i次数据传送的数据量Tsizei=LoopBlockKey*TypeSizei,TypeSizei是第i次数据传送的数组变量的类型,数据传送开销Tt可以通过下面的算式得到。Tstart是数据传送的启动开销,Tbandwidth是数据传送的带宽。

Tt=∑(Tstart+Tsizei/Tbandwidth),i=1,n

e)计算每一个循环块的并行隐藏参数Hkey。并行隐藏参数的计算式为Hkey=(It*Tc+It*Tm)/Tt。如果Hkey大于1,就说明计算和访存开销大于数据传送开销,也就是说计算和访存可以隐藏数据在不同存储层次间的传送开销,这样就可以在进行本次循环块运算时,并行进行下一个循环块所需数据的批量传送,提高程序性能;否则就说明计算和访存无法完全隐藏数据传送,所以就不再做计算、访存与数据传送的并行了。

(3)反馈修正循环分块参数

并行隐藏参数Hkey确定后,就确定了分块循环的最终并行方式,也就确定了变量对应的数据缓存的最终大小。循环分块就是起因于SPM空间上的数据缓冲,所以需要使用确定后的数据缓冲反馈修正循环分块参数,才能够进行正确的循环分块。

(4)循环重构

循环分块参数确定之后,就需要进行程序变换。本编译指示是针对循环的,所以程序变换的核心是循环重构,即将一重循环变为两重循环,外层循环说明分块的块数,内层循环按照分块大小完成运算任务。在循环重构的过程中,对于可以进行访存优化的变量,需要插入主存和SPM缓冲之间的数据传送,并且进行相应的地址变换。

根据并行隐藏参数的不同,循环重构有两种策略:顺序执行模式的循环重构和并行执行模式的循环重构。

当并行隐藏参数小于1时,计算、访存开销无法隐藏数据传送开销,所以只做顺序执行模式的循环重构,即运算和不同存储层次间的数据传送是顺序进行的,循环重构后执行流程如图2所示,首先进行第一个循环块所需b数组的导入传送,然后基于局部存储lb进行运算;随后进行第二个循环块、第三个循环块、第四个循环块……每一个循环块都是先进行b数组段的导入传送,再基于局部存储lb进行运算;不同循环块之间顺序进行。在该种循环重构中,编译器所做的优化主要是访存优化,将多个连续的访问主存操作转换为使用SPM和主存之间的数据传送引擎完成的批量数据传送和对SPM缓冲空间的多个访问。

当并行隐藏参数大于等于1时,进行并行执行模式的循环重构。并行执行模式的循环重构要使用两个缓冲进行数据传送隐藏,两个缓冲的交替使用以及异步数据传送的引入使得循环重构比较复杂。假设核心循环需要读b数组写a数组,图3是并行执行模式循环执行流程图。从中可以看出,从第二个循环块开始到第n-1个循环块为止,这些循环块在运算的同时都有数据的导入(主存到SPM)、导出(SPM到主存)操作,可以按照统一的模式进行处理;但是第一个循环块和最后一个循环块略有不同,在运算的同时,只有导入或者导出。所以在循环重构的时候,需要引入循环分割。原始循环被分割重构为三段,第一段包含首个循环块的数据准备、运算以及与运算并行的第二个循环块的数据准备;第二段包含从第二个循环块到第n-1个循环块,在这一段中,在本循环块运算的同时,会并行进行上一个循环块结果的导出和下一个循环块数据的准备;第三段是最后一个循环块的运算和结果导出,在运算的同时,完成倒数第二个循环块的结果导出。

采用上述面向SPM存储层次的数据缓存实现方法时,其主要应用于并行语言编译系统,通过编译指示指导编译器完成SPM存储层次上数据的导入导出,在减轻用户负担的同时,充分利用编译指导信息引导编译器有的放矢地进行高效访存优化,而不必在上下文无法精确分析的情况下采用保守的编译策略引起程序性能急剧下降,编译器可以按照编译指示进行精细高效的优化,有效提升了编译器的上下文分析精确度和应用的访存效率;另外,编译器在分析循环的计算开销、访存开销与数据传送开销的基础上,针对具体情况,可以进行优化隐藏部分数据传送时间,做到计算与不同存储层次间的数据传送并行进行,有效利用处理器的各个存储层次,更进一步提升程序性能。

为了便于更好的理解本发明,下面将对本文中使用的术语进行简要的解释:

SRAM(static Random Access Memory):静态随机存取存储器。

SPM(scratch Pad Memory):便签式存储器。

循环分块参数:是指循环分块时的块大小。

上述实施例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人士能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所作的等效变化或修饰,都应涵盖在本发明的保护范围之内。

12页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种基于Windows平台的多接口架构及实现方法

网友询问留言

已有0条留言

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

精彩留言,会给你点赞!

技术分类