CN101630305A - 高效能计算机中可重构部件的柔性管理方法 - Google Patents
高效能计算机中可重构部件的柔性管理方法 Download PDFInfo
- Publication number
- CN101630305A CN101630305A CN200810140617A CN200810140617A CN101630305A CN 101630305 A CN101630305 A CN 101630305A CN 200810140617 A CN200810140617 A CN 200810140617A CN 200810140617 A CN200810140617 A CN 200810140617A CN 101630305 A CN101630305 A CN 101630305A
- Authority
- CN
- China
- Prior art keywords
- configurable component
- restructural
- configurable
- equipment
- node
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本发明涉及一种高效能计算机中可重构部件的柔性管理方法,适用于高效能计算机***,该***通常有多个节点通过互连网络连接在一起,在每个节点内的通用CPU、可重构部件、内存通过连接网络互连在一起;通用CPU的操作***内核含有驱动程序,在操作***内核中、设备驱动程序之上设计可重构部件管理器虚拟层;该可重构部件管理器负责在进程的可重构设备与物理的可重构部件之间建立连接,对节点内或外各个可重构部件的配置、分配、释放、回收,及可重构设备物理驱动程序的加载,并将上层的操作请求转交给实际的设备驱动程序。利用本发明的管理方法,可以将一个节点中暂时不用的可重构部件转化为其它节点中有用的部件,从而减少可重构部件的浪费,可以将***中有限的物理可重构部件转化成无限的虚拟可重构部件,从而满足各种各样的用户需求,使可重构部件的管理更加柔性化。
Description
一、技术领域:
本发明涉及一种可重构部件的管理方法,适用于高效能计算机***和其它具有可重构部件的***,具体涉及一种高效能计算机中可重构部件的柔性管理方法。
二、背景技术:
随着可配置器件(如Field Programmable Gate Arrays,FPGA)规模和性能的不断提高,基于FPGA的可重构计算正在兴起。所谓可重构计算(Reconfigurable Computing)是指在软件的控制下,利用***中的可重构部件,根据应用的需要重新构造新的计算平台,使之达到或接近专用硬件设计的高性能。具有可重构计算特征的***称为可重构计算***。
可重构计算的本质是利用可编程器件可多次重新配置其功能与互连特性的能力,使***兼具灵活性、高性能、高可靠、低能耗、低成本、易于升级等多种优良特性。其主要技术基础是现场可编程门阵列(Field Programmable GateArrays,FPGA)技术。在可重构计算***中,硬件的结构、功能及互连方式都可以被动态地调整或修改,这样既保留了用ASIC方法(硬件方法)实现计算的性能,又具有用处理器方法(软件方法)实现计算的灵活性。换句话说,可重构计算把硬件软件化,使硬件可以像软件一样被编程、修改和重用。
显然,可重构部件是可重构计算的物质基础,对可重构部件的管理,如配置、分配、回收、调度、使用等,是可重构计算的核心。然而,目前的管理方法仅仅是对物理可重构部件的管理,即对物理可重构部件的配置、分配、回收等,当用户对可重构部件的需求量超过空闲物理可重构部件的数量时,则无法满足用户的需求,只能让用户扩充硬件或修改软件。但不论扩充硬件还是修改软件,都无法在现场动态、实时地完成,也就是说,目前的管理方法还比较刚性,不能实现可重构部件的柔性化管理具体涉及一种高效能计算机中可重构部件的柔性管理方法。
例如,在附图2的节点***中对可重构部件进行管理时,为了管理方便,节点中的应用程序和通用CPU将其中的可重构部件看成外部设备。以下将配置过的可重构部件统称为可重构设备(Device)。通常情况下,对外部设备的使用需要驱动程序的支持,因而每种可重构部件都需要一个驱动程序,其结构如图3所示。图3表示现有的可重构部件管理方法,它利用常规的可重构设备驱动程序直接驱动可重构设备,其结构不够灵活,原因如下:
(1)可重构部件的功能是经常变化的,而功能的变化必然会影响驱动程序,导致驱动程序经常变化,并进而影响到操作***内核的上层(如文件操作接口、中断处理等)。然而,一般情况下,设备功能的变化不应该影响到操作***的上层,更不应该影响到应用程序。
(2)用户对可重构设备的需要量也是经常变化的,有的应用程序不需要可重构设备,有的应用程序需要一个可重构设备,有的应用程序需要多个可重构设备。不论为节点配备多少个可重构设备,都无法满足所有应用的需求。原因是这里看到的可重构设备都是物理存在的,而且是预先配置好的,无法动态配置可重构设备,也无法将其虚拟化。
三、发明内容:
本发明是克服现有技术对可重构部件硬性管理的不足,提供并解决由于物理可重构部件有限而用户需求无限的矛盾,使得***能够用少量的可重构部件同时构造出大量的可重构设备,使用户不再受物理可重构部件数量的限制,从而使在小***上运行大应用的梦想成为可能,具体涉及一种高效能计算机中可重构部件的柔性管理方法。
一种高性能计算机***(如图2所示),包括至少一个节点;任一节点包括三类功能组件:m个通用CPU、n个可重构部件、内存(>64MB),其中m、n均为自然数且m≥1、n≥0,节点内的通用CPU、可重构部件、内存等被连接网络连通在一起(如图1所示);一个节点中至少应该配置一个通用CPU,但也可以同时配置多个通用CPU。通用CPU上运行操作***和应用程序。节点中可以没有可重构部件,也可以有多个可重构部件,但一个***中至少应该有一个可重构部件。可重构部件通常是现场可编程的门阵列(FPGA),操作***中的可重构部件管理器负责可重构部件的管理。节点中应该配置一块内存,这块内存可被节点内部的所有通用CPU和可重构部件共享。一个节点中的通用CPU、可重构部件和内存被某种连接网络(如总线、高速交叉开关等)连接在一起。利用该连接网络,通用CPU之间可以相互通信,可重构部件之间可以相互通信,通用CPU与可重构部件之间也可以相互通信。为了描述的方便,本发明将抽象掉连接网络的具体形态,只把它看成某种互连机制。由于这种互连机制的存在,通用CPU可以访问内存,可重构部件也可以访问内存。在同一个节点内部,通用CPU之间可以通过共享内存相互通信,可重构部件之间可以通过共享内存相互通信,通用CPU与可重构部件之间也可以通过共享内存相互通信。
一般情况下,节点中应该配置通信接口(如以太网卡等),以便节点与外界能够相互通信。节点之间的互连也通过通信接口实现。
如果一个节点中配置有多个通用CPU,则可将其看成一个对称多处理机(SMP),认为所有的通用CPU都处于同等的地位。当然,也可将一个节点中的通用CPU分成层次,将其组织成不同类型的主从结构。每个节点上只运行一个操作***,如Linux等,不管该节点中有多少个通用CPU和可重构部件。
一个***中可以仅配置一个节点,也可以配置多个节点。如***中配置有多个节点,则需要一个互连网络将所有节点连接在一起。节点之间通过互连网络可以相互通信,如互相发送TCP包或者MPI消息。节点之间的互连结构如图2所示。互连网络可以是任意一种,如以太网络、Infiniband、3D Torus等。
在节点内通用CPU上运行操作***和应用程序,操作***内核包括有驱动程序,驱动程序驱动节点内或外的可重构设备(如图3所示),即配置的可重构部件;
将每个节点中可重构部件看成普通的字符设备,在操作***中创建多个设备特殊文件用于表示***中每个可重构设备;如rca1、rca2、...,rcb1、rcb2、...,rcc1、rcc2、...等,其中的a、b、c等表示设备的类型,1、2、3等是同类设备的编号。应用程序在使用可重构设备之前,要根据自己的需要将其分类,并确定各类设备的功能及其对应的设备特殊文件名。各个设备特殊文件所对应的可重构设备及其功能都是可以动态变化的。在应用程序中,通过打开相应的设备特殊文件并对其进行读/写操作来使用可重构设备。
按照普通字符设备驱动程序的要求,在操作***内核中、设备驱动程序之上设计可重构部件管理器虚拟层,如图4所示;对操作***的上层来说,可重构部件管理器就是一个标准的设备驱动程序,它屏蔽了可重构部件的差别与变化。对下层来说,可重构部件管理器是一个可重构部件的管理者,它负责可重构部件的配置、分配、回收及驱动程序的加载等,并将上层的操作请求转发给实际的设备驱动程序。
可重构部件管理器由一组数据结构和一组函数组成,这组数据结构包括:描述可重构部件配置信息的结构及其数组(rcd_cfg和rcd_cfgs),描述可重构设备属性的结构及其数组(rc_device和rcd_devs),描述可重构设备分配情况的结构(p_rc_dev),描述进程已打开的可重构设备的结构(rc_struct)等;这组函数包括:标准文件操作集file_operations中的open、release、read、write、ioctl等函数,一个初始化函数,一个注册函数,一个注销函数等。
其open函数的执行步骤如下:
(1)为执行该操作的进程创建一个p_rc_dev结构,并将其***到进程的rc_struct结构中;
(2)将该p_rc_dev结构在进程rc_struct结构中的索引号记录在file结构的私有数据区private_data中。
其release函数的执行步骤如下:
根据file结构中的private_data查当前进程的rc_struct结构找到设备对应的p_rc_dev结构,并将其释放。
其read、write、ioctl函数的执行步骤如下:
(1)根据file结构中的private_data查当前进程的rc_struct结构找到设备对应的p_rc_dev结构;
(2)检查该结构的状态(state),看是否已经为该设备分配可重构设备;如果已分配,则直接调用可重构设备真实文件操作集中对应的函数,完成进程请求的操作;如未分配,则根据设备类型查可重构设备属性结构数组rcd_devs,为其分配一个可重构设备rc_device,修改p_rc_dev结构,而后再调用该可重构设备真实文件操作集中的对应函数,完成进程请求的操作。
其初始化函数的作用是:以驱动程序的身份向操作***注册可重构部件管理器,主要内容是可重构部件管理器实现的file_operations操作集。
其注册函数的作用是:供可重构部件驱动程序在可重构部件初始化时调用,在可重构设备属性结构数组rcd_devs中登记可重构部件的属性信息。
其注销函数的作用是:供可重构部件驱动程序在可重构部件注销时调用,清除它在可重构设备属性结构数组rcd_devs中登记的信息。
在进程终止时释放可重构部件管理器所拥有的所有p_rc_dev结构。
在可重构部件管理器初始化时需创建一个守护进程,用于接收其它节点的查询信息和操作请求;当守护进程收到来自其它节点的操作请求时,它按照本地处理方法打开、写、读、关闭操作本地的可重构设备,完成远程节点的操作请求,并将结果返回给请求节点。
用户使用可重构设备的过程如下:
(1)在设备目录下,预先创建一组设备特殊文件,每一个设备特殊文件表示一种类型的可重构设备;
(2)根据需要的设备类型,打开一个特定的设备特殊文件;
(3)在打开的设备特殊文件上执行读、写操作;
(4)关闭设备特殊文件。
另外,设备特殊文件具有如下特征:
(1)一个设备特殊文件表示一种类型的可重构设备;
(2)设备特殊文件的类型与可重构设备的类型及可重构设备配置文件是对应的;
(3)设备特殊文件的类型及其对应设备的意义由用户指定。
可重构部件管理器使用的管理结构主要包括两类数据结构组成:
一类是用于描述物理可重构部件和可重构虚设备的rcd_devs[]数组,其中的每个结构描述一个可重构部件,在***初始化时,可重构部件管理器检测、收集各个可重构部件的属性信息,并将其记录在数组rcd_devs[]中;
另一类是为每个进程建立的可重构设备列表,用于记录进程申请使用的可重构设备的信息,包括类型、状态、对应的可重构部件,其中的每个结构描述一个可重构设备;
可重构部件管理器负责在进程的可重构设备与物理的可重构部件之间建立连接,仅在真正使用时,可重构部件管理器才为进程分配可重构部件;当进程使用完可重构设备之后,它及时释放可重构部件;当可重构部件管理器发现可重构部件紧缺时,它回收某些已分配出去的可重构部件;可重构部件管理器通过构造可重构虚设备来使用其它节点上的可重构部件;
在***初始化时,可重构部件管理器除了检测、收集各个可重构部件的属性信息外,同时向操作***注册,包括向操作***(例如VFS,Linux的一个操作***)报告可重构部件管理器实现的文件操作集的位置;当节点加电启动时,其上的操作***开始运行。操作***在引导和初始化过程中要完成许多工作,其中与可重构部件管理相关的工作是:可重构部件管理器向操作***内核注册虚拟的可重构设备;可重构部件管理器确定节点中物理可重构部件的数量及各可重构部件的属性,并将各可重构部件的属性信息记录在自己的管理结构中,如rcd_devs[]数组。所述可重构部件属性结构中至少包含:部件状态、部件使用的IRQ号和I/O地址、部件所处位置、部件配置类型、部件驱动程序实现的文件操作集等。
可重构部件管理器可以通过读取操作***的配置文件来获得节点中可重构部件的数量及各个可重构部件的属性信息,也可通过查询各个可重构部件来获取其属性信息。
可重构部件管理器负责向操作***提供物理驱动程序需要的所有功能,将上层的操作请求转发给实际的设备驱动程序,并负责各个可重构部件的配置、分配、释放、回收,及可重构设备物理驱动程序的加载;在请求节点执行应用程序之时,用户要告诉操作***可执行程序的名称、位置、初始参数、环境变量等,如果应用程序需要使用可重构部件,用户还需要告诉操作***所需要可重构部件的数量、可重构部件的配置文件(可能一个也可能多个)及可重构部件的配置方式(如配置的模式、时机、顺序等)等。操作***内核根据可执行程序的名称、位置等信息为其创建进程或线程并加载执行映像,同时请求可重构部件管理器完成可重构部件的分配及配置等,而后再启动程序的执行。
可重构部件管理器的执行步骤为:
(1)在操作***初始化时,执行可重构部件管理器的初始化函数,由该函数向操作***内核注册可重构部件管理器;
(2)在可重构部件初始化时,可重构部件的驱动程序调用可重构部件管理器的注册函数,在可重构部件属性结构数组rcd_devs中登记该可重构部件;
(3)在可重构部件注销时,可重构部件的驱动程序调用可重构部件管理器的注销函数;可重构部件管理器的注销函数删除可重构部件的有关信息;
(4)在***终止时,可重构部件管理器结束运行。
一个应用程序的执行可能不需要可重构部件、可能需要一个可重构部件、也可能需要多个可重构部件。如应用程序的执行需要可重构部件,它除了必须提供配置文件之外,还需要提供配置模式、配置范围、配置时机、配置顺序等信息。
对可重构部件的配置模式有单上下文(Single Context)和多上下文(Multi-Context)两种。单上下文配置模式指仅使用一个配置文件进行配置,可重构部件上仅存储一个配置文件。多上下文配置模式允许用多个配置文件进行配置,可重构部件上可能同时存储多个配置文件。当需要发生功能切换时,单上下文模式需要重新加载配置文件,而多上下文模式则不需要重新加载,能够在单周期内完成对可重构硬件的配置。
对可重构部件的配置范围有部分和全部两种。部分重构允许对可重构部件的一部分进行重新配置,让其它部分保持不变。全部重构必须对整个可重构部件进行配置,需要修改整个可重构部件。
对可重构部件的配置时机有静态和动态两种。静态重构(StaticReconfiguration),也称为编译时重构(Compile-Time Reconfiguration,CTR),是指在开始执行任务之前,一次地性将可重构硬件配置为***所需的某个或几个功能。这些配置好的功能在整个任务执行期间不会被改变,直到***完成该任务后,这些可重构硬件才可以重新配置为其它的功能去完成别的任务。动态重构(Dynamic Reconfiguration)则允许在任务执行过程中随时重新配置可重构硬件的功能。
可重构部件的配置过程如下:
(1)在可重构部件管理器初始化时,根据已知的配置文件,创建可重构部件配置信息结构数组rcd_cfgs;
(2)当需要配置可重构部件时,根据需要配置的设备类型查数组rcd_cfgs,找到配置文件;
(3)加载配置文件,完成可重构部件的配置,即将可重构部件配置成需要的可重构设备;
(4)加载可重构设备驱动程序,执行驱动程序的初始化函数;
(5)可重构设备驱动程序的初始化函数调用可重构部件管理器的注册函数,在该可重构部件所对应的属性结构rc_device中登记自己实现的实际文件操作集,并修改该结构的类型域。
可重构部件管理器为每个进程维护一个可重构设备列表,记录该进程申请使用的可重构设备的情况,如可重构设备的类型等,如图5所示。当应用程序打开某个可重构设备特殊文件时,可重构部件管理器为其在可重构设备列表中建立管理结构,但并不为其分配物理可重构部件。当应用程序真正操作可重构设备时,可重构部件管理器检查进程的可重构设备列表:
(1)如果还未为其分配可重构部件,则临时为其分配一个;
(2)如果可重构部件的配置与需求不符,则临时对其进行配置;
(3)如果还未为设备加载驱动程序,则临时加载可重构设备驱动程序。
在图5中,已经为进程0的可重构设备0和进程n的可重构设备1分配了可重构部件。
当一切准备就绪之后,将应用程序请求的操作转交给物理驱动程序,完成实际的设备操作。
在分配可重构部件时,需要检查rcd_devs[]数组。可重构部件的分配方法有下面几种:
(1)当用户打开某个可重构设备时,为其在进程的可重构设备列表中登记信息,但并不分配实际的可重构部件。
(2)如果节点中有空闲的可重构部件,则:
●如果该部件已配置好且其配置内容与当前的要求相同,则将其分配给当前用户。
●如果该部件还未配置或配置内容与当前的要求不符,则先配置该可重构部件,而后再将其分配给当前用户。
(3)如果节点中有已配置好的可重构部件,但该设备已分配给其它用户,则:
a)如可重构设备允许复用,则将其分配给当前用户。如图6所示。
b)如可重构设备不允许复用,则将其从原用户中收回,而后再将其分配给当前用户。
(4)如果其它节点中有可供使用的可重构部件,则:
c)如果该可重构部件已配置好且其配置内容与当前的要求相同,则建立可重构虚设备并将其分配给当前用户。如图7所示(当进程请求的可重构设备在其它节点上时,可重构部件管理器为其在本地创建一个可重构虚设备,并加载一个驱动程序。利用可重构虚设备,本节点的进程可以方便地、无差别地使用其它节点上的可重构设备)。
d)如果该可重构部件还未配置或配置内容与当前的要求不符,则请求该部件所在节点配置该可重构部件,而后建立可重构虚设备并将其分配给当前用户。
(5)如果本节点有能够满足要求的可重构部件,但该设备已分配给其它用户,且其配置内容与当前要求不符,则将可重构部件从原用户手中抢回,按照新要求重新配置该可重构部件,而后将其分配给当前用户。
(6)如果***中有能够满足要求的可重构部件,但该可重构部件在其它节点中,而且正在被其用户以其它方式使用,则向拥有该可重构部件的节点发出求救信息,请求它抢占并重新配置该可重构部件,而后在本节点建立可重构虚设备并将其分配给当前用户。
(7)***中没有能满足要求的可重构部件,此次申请失败。
这里说的可重构虚设备是位于其它节点上的可重构设备,在本节点并不存在。与本节点的可重构设备驱动程序不同,可重构虚设备的驱动程序建立在通信接口之上,它将对可重构虚设备的操作请求转化成网络数据包(如TCP包或MPI消息),而后经过互连网络将其发送到其它节点,并将来自其它节点的应答数据包转化成可重构设备的应答后上传给可重构部件管理器。
可重构部件管理器所创建的可重构虚设备的特征在于它是位于其它节点的可重构设备,在本地仅表现为一个驱动程序,该驱动程序将来自上层的操作请求打包后发给其它节点,并将来自其它节点的处理结果返回给上层,操作***的其它部分感觉不到可重构虚设备与本地可重构设备之间的区别。
可重构部件管理器为每个进程提供的虚拟可重构设备可以任一多个,不受节点内实际可重构部件数量的限制,并实现可重构部件的动态、按需分配。
可重构虚设备驱动程序所起的作用相当于一个协议网关,它屏蔽了可重构设备不在本地的事实,使用户感觉不到可重构虚设备与本地可重构设备之间的区别。对可重构部件管理器来说,可重构虚设备驱动程序与本地可重构设备的驱动程序是等价的。如图8所示,可重构虚设备实际是建立在通信接口之上的虚拟设备,它在本地并不存在。
正是因为可重构虚设备的存在,运行在一个节点上的应用程序才能够使用其它节点上的可重构设备,而且不需要特殊的使用方法。通过可重构虚设备,一个节点上空闲的可重构部件可以被其它节点使用,从而充分发挥可重构部件的作用,减少可重构部件的浪费。
正是因为可重构部件管理器的存在,***才能够屏蔽可重构部件的物理差别,实现可重构部件的按需分配,才能够利用有限的物理可重构部件模拟出无限的可重构设备,从而满足用户各种各样的需求,实现可重构部件的柔性化管理。
要说明的是,可重构部件管理器并不真正驱动可重构设备,事实上它并不了解各个可重构设备的使用细节。每个物理的可重构设备还需要一个真实(物理)的驱动程序,并提供真正的可重构设备操作集。可重构部件管理器负责物理可重构设备的配置、分配、回收及物理驱动程序的加载等,并将上层对可重构设备的操作请求转交给合适的物理可重构设备驱动程序,由物理可重构设备驱动程序完成可重构设备的驱动,从而完成用户的请求。因而,可重构部件管理器实际上是一个虚拟的设备驱动程序,上层用户看到的仅仅是虚拟的可重构设备。
对于可重构部件管理器来说,至少需要一个物理可重构部件列表,用于记录各种物理可重构部件的属性信息;通常还需要为每个进程维护一个可重构设备列表,用于记录进程申请使用的可重构设备的信息;可重构部件管理器负责在进程的可重构设备与物理的可重构部件之间建立连接,并在它们之间转接操作请求和处理结果。
本发明的有益效果:
1、利用本发明的管理方法,通过可重构部件管理器对可重构部件进行管理,可以将一个节点中暂时不用的可重构部件转化为其它节点中有用的部件,从而减少可重构部件的浪费,充分发挥可重构部件的作用。
2、利用本发明的管理方法,将虚拟化技术引入到可重构部件管理***中,可以将***中有限的物理可重构部件转化成无限的虚拟可重构部件(或任意多个、任意多种可重构设备),并实现可重构部件的动态、按需分配,从而满足各种各样的用户需求,使可重构部件的管理更加柔性化。
四、附图说明
图1是本发明所适用的单个节点的逻辑结构示意图;
图2是本发明所适用的计算机***的逻辑结构示意图,它由一组连接在一起的节点组成;
图3是常规的可重构部件管理***的结构示意图;
图4是柔性可重构部件管理***的结构示意图;
图5是可重构部件管理器使用的管理结构示意图;
图6是两个进程复用同一个可重构部件的情况;(只要可重构设备允许,两个或多个进程可以同时使用同一个可重构设备。复用过程中的同步与互斥操作由进程间通信机制或可重构设备上的锁操作来保证。图6中进程0的可重构设备0与进程1的可重构设备1实际使用的是同一个可重构部件j。)
图7是使用可重构虚设备的情况;(当进程请求的可重构设备在其它节点上时,可重构部件管理器为其在本地创建一个可重构虚设备,并加载一个驱动程序。利用可重构虚设备,本节点的进程可以方便地、无差别地使用其它节点上的可重构设备。)
图8是可重构虚设备的管理结构。
五、具体实施方式:
该实施例介绍本发明在Linux上的实施方法。
(1)将可重构设备看成普通的字符设备。根据需要,可以将可重构设备分成多种类型,给每种类型分配一个主设备号。每类可重构设备又可以有多个,每个可重构设备占用一个次设备号。
(2)创建多个设备特殊文件,用于表示***中的可重构设备,如rca1、rca2、...,rcb1、rcb2、...,rcc1、rcc2、...等,其中的a、b、c等表示设备的类型,1、2、3等是同类设备的编号。类型与设备号是可以复用的,其意义可以临时指定。
(3)按照普通字符设备驱动程序的要求设计可重构部件管理器,其中包括:对file_operations操作集的实现、一组管理数据结构、一个初始化函数、一个注册函数、一个注销函数等。
(4)可重构部件管理器使用的数据结构主要有以下几个:
struct rcd_cfg{ //可重构设备配置文件
short int type; //配置文件类型
char comm[256]; //对配置信息的描述
struct dentry*rcdi;//配置文件目录项
char driver[256]; //驱动程序位置
}
struct rcd_cfg rcd_cfgs[MAX_TYPE];
可重构部件管理器用结构数组rcd_cfgs[]记录各类可重构设备的配置信息。将配置信息写入可重构部件即可完成可重构部件的配置,从而将其转化成相应类型的可重构设备。同一类型的可重构设备仅需要一个配置文件和一个驱动程序,不管***中有几个该种类型的设备。
struct rc_device{ //可重构部件描述结构
short int type; //已配置的设备类型
short int state; //部件状态,已分配、空闲、结果是否返回
int count; //引用计数
int flags; //部件属性,是否本地设备、是否允许复用
int irq; //部件使用的IRQ号
int from,to; //部件使用的I/O地址
unsigned int addr; //可重构虚设备的位置
struct semaphore sem; //用于设备互斥操作的信号灯
struct file_operations*ops;//实际的文件操作集
char rcd_name[256]; //部件名称
}
节点中每个可重构部件对应一个rc_device结构,它记录一个可重构部件的所有信息,如属性、IRQ号、I/O地址、配置类型等,其中最关键的是该部件驱动程序实现的操作集。
可重构部件包括可重构虚设备。
#define MAX_RC_DEVICES 256
struct rc_device rcd_devs[MAX_RC_DEVICES];
节点中所有的可重构部件描述结构构成一个数组,数组的大小取决于节点中可重构部件的数量。
struct p_rc_dev{ //进程中的可重构设备描述结构
int type; //所需设备类型
short int state; //设备状态,如是否已分配
struct rc_device*rcd;//对应的可重构部件
pid_t pid; //创建者进程
struct p_rc_dev*next;
}
struct p_rc_dev*prcd_head; //p_rc_dev结构链表的表头
p_rc_dev是进程中用于描述可重构设备的数据结构。***中所有的p_rc_dev结构串成一个链表,prcd_head是该链表的表头。
#define P_MAX_RC_DEVS 16 //进程使用的可重构设备数
struct rc_struct{ //增加到task_struct中的结构
struct rc_struct*next; //可重构列表队列
int count; //引用计数
struct p_rc_dev*prcds[P_MAX_RC_DEVS];//可重构设备列表
}
struct rc_struct*rcs_head;//所有可重构设备列表的表头
在进程管理结构task_struct中增加一个指向rc_struct的指针,在进程创建时,同时创建一个rc_struct结构。rc_struct是动态创建的,用于记录一个进程使用的所有可重构设备,其关键是一个指向p_rc_dev结构的指针数组prcds[],即进程的可重构设备列表。***中所有的rc_struct被串成一个链表,rcs_head是该链表的表头。
(5)在***初始化时,可重构部件管理器检测、收集各个可重构部件的属性信息,并将其记录在数组rcd_devs[]中。
(6)在***初始化时,可重构部件管理器向操作***注册。注册的目的主要是向VFS报告可重构部件管理器实现的文件操作集(file_operations)的位置。对可重构设备使用的所有主设备号(多于1个),可重构部件管理器都要注册,而且注册的文件操作集都相同。在可重构部件管理器注册的文件操作集中,至少应该实现open、release、read、write、ioctl等操作。
●在open操作中,为进程创建一个p_rc_dev结构,并将其***到进程rc_struct结构的prcds[]数组中,将该结构在prcds[]数组中的索引号记录在file结构的private_data中。
●在release操作中,根据file结构中的private_data查当前进程的rc_struct结构找到设备对应的p_rc_dev结构,并将其释放。
●在read、write、ioctl等操作中,根据file结构中的private_data查当前进程的rc_struct结构找到设备对应的p_rc_dev结构,而后检查该结构的状态(state),看是否已经为该设备分配可重构部件。如果已分配,则直接调用可重构部件操作集ops中对应的函数,完成进程请求的操作;如未分配,则根据设备类型(type)查可重构部件描述数组rcd_devs[],为其分配一个可重构部件rc_device,并修改p_rc_dev结构,而后再调用可重构部件操作集ops中的对应函数,完成进程请求的操作。
由此可见,可重构部件管理器并不做实质性的驱动工作,它仅完成可重构部件的分配、释放和操作转接。
(7)可重构部件管理器为可重构设备驱动程序提供一个注册函数、一个注销函数。当可重构部件管理器将某个可重构部件分配出去之时,如果它发现该可重构部件还未配置,则要为该可重构部件加载配置文件,完成该部件的配置,将其改造成进程需要的可重构设备,而后还要为其加载驱动程序。配置文件和驱动程序的位置都记录在结构rcd_cfg中。可重构设备驱动程序的结构与普通字符设备驱动程序相同,只是其中的注册和注销函数被换成了可重构部件管理器提供的注册和注销函数。可重构部件管理器的注册函数修改可重构部件描述结构rc_device,记录其驱动程序实现的操作集的位置。
(8)可重构部件的分配方法如发明内容所述。可以为进程分配空闲且未配置的可重构部件、空闲已配置的可重构部件、其它节点上的可重构部件,也可以抢占本节点的可重构部件或其它节点的可重构部件。
(9)在进程终止时,释放其rc_struct结构和该进程拥有的全部p_rc_dev结构。
(10)当可重构部件管理器决定抢占可重构部件时,它可以搜索rcs_head链表,检查所有进程的可重构部件列表,从中选出合适的抢占对象,强行释放其可重构设备。结构rc_device中的引用计数count记录该设备的用户数,分配时该计数加1,释放时该计数减1,为0时表示可重构部件空闲。抢占的意思是强行让进程释放某个可重构设备,以便它用。
(11)抢占的条件是:可重构部件已分配出去,但设备当前处于闲置状态(未进行数据处理),而且其处理结果已经被读出。
(12)进程使用可重构设备的方法:
●按照类型约定,打开(open)某个可重构设备特殊文件,如rca1、rcb1、rcc1等,获得设备的文件描述符fd。
●利用获得的fd,向可重构设备写入(write)数据,从而请求可重构设备完成数据的处理。
●利用获得的fd,从可重构设备中读入(read)数据,从而接收处理结果。
●关闭(close)可重构设备特殊文件,从而释放可重构设备。
(13)在可重构部件管理器初始化时,创建一个守护进程,用于接收其它节点的查询信息和操作请求。当守护进程收到来自其它节点的操作请求时,它按照本地处理方法(打开、写、读、关闭)操作本地的可重构设备,完成远程节点的操作请求,并将结果返回给请求节点。守护进程作为应用程序运行,与应用进程处于同样的地位。
Claims (16)
1、一种高性能计算机中可重构部件的柔性管理方法,所适用的高效能计算机***中至少包含一个节点;节点中包括:内存、m个通用CPU和n个可重构部件,其中m、n均为自然数且m≥1、n≥0,节点内的通用CPU、可重构部件、内存通过节点内的连接网络互连在一起;如果***中有两个以上的节点,则所有节点均通过通信接口连接到互连网络上;***中至少有一个节点内含有至少一个可重构部件;在节点内的通用CPU上运行操作***和应用程序,操作***内核含有驱动程序,驱动程序驱动节点内或外的可重构设备,即已配置的可重构部件;其特征在于,
(1)按照普通字符设备驱动程序的要求,在操作***内核中、设备驱动程序之上设计可重构部件管理器虚拟层;所述可重构部件管理器包括管理可重构部件的一组数据结构和一组函数;
(2)可重构部件管理器的使用管理包括两类数据结构:
一类是用于描述物理可重构部件和可重构虚设备的rcd_devs[]数组,其中的每个结构描述一个可重构部件,在***初始化时,可重构部件管理器检测、收集各个可重构部件的属性信息,并将其记录在数组rcd_devs[]中;
另一类是为每个进程建立的可重构设备列表,用于记录进程申请使用的可重构设备的信息,包括类型、状态、对应的可重构部件,其中的每个结构描述一个可重构设备;
(3)可重构部件管理器负责节点内或外各个可重构部件的配置、分配、释放、回收,及可重构设备物理驱动程序的加载,并将上层的操作请求转交给实际的设备驱动程序。
2、根据权利要求1所述的高性能计算机中可重构部件的柔性管理方法,其特征在于,所述数据结构组包括:描述可重构部件配置信息的结构及其数组,描述可重构设备属性的结构及其数组,描述可重构设备分配情况的结构,描述进程已打开的可重构设备的结构;所述函数组包括:标准文件操作集中的打开函数open、释放函数release、读函数read、写函数write、控制设备的I/O通道的ioctl函数,一个初始化函数,一个注册函数,一个注销函数。
3、根据权利要求1所述的高性能计算机中可重构部件的柔性管理方法,其特征在于,可重构部件管理器负责在进程的可重构设备与物理的可重构部件之间建立连接,仅在真正使用时,可重构部件管理器才为进程分配可重构部件;当进程使用完可重构设备之后,它及时释放可重构部件;当可重构部件管理器发现可重构部件紧缺时,它回收某些已分配出去的可重构部件;可重构部件管理器通过构造可重构虚设备来使用其它节点上的可重构部件。
4、根据权利要求1所述的高性能计算机中可重构部件的柔性管理方法,其特征在于,用户使用可重构设备的过程如下:
(1)在设备目录下,预先创建一组设备特殊文件,每一个设备特殊文件表示一种类型的可重构设备;
(2)根据需要的设备类型,打开一个特定的设备特殊文件;
(3)在打开的设备特殊文件上执行读、写操作;
(4)关闭设备特殊文件。
5、根据权利要求4所述的高性能计算机中可重构部件的柔性管理方法,其特征在于,
(1)一个设备特殊文件表示一种类型的可重构设备;
(2)设备特殊文件的类型与可重构设备的类型及可重构设备配置文件是对应的;
(3)设备特殊文件的类型及其对应设备的意义由用户指定。
6、根据权利要求1所述的高性能计算机中可重构部件的柔性管理方法,其特征在于,可重构部件管理器的执行步骤为:
(1)在操作***初始化时,执行可重构部件管理器的初始化函数,由该函数向操作***内核注册可重构部件管理器;
(2)在可重构部件初始化时,可重构部件的驱动程序调用可重构部件管理器的注册函数,在可重构部件属性结构数组rcd_devs中登记该可重构部件;
(3)在可重构部件注销时,可重构部件的驱动程序调用可重构部件管理器的注销函数;可重构部件管理器的注销函数删除可重构部件的有关信息;
(4)在***终止时,可重构部件管理器结束运行。
8、根据权利要求1所述的高性能计算机中可重构部件的柔性管理方法,其特征在于,可重构部件管理器通过读取操作***的配置文件来获得节点中可重构部件的数量及各个可重构部件的属性信息;或者可重构部件管理器通过查询各个可重构部件来获取其属性信息。
9、根据权利要求8所述的高性能计算机中可重构部件的柔性管理方法,其特征在于,所述可重构部件属性结构中至少包含:部件状态、部件使用的IRQ号和I/O地址、部件所处位置、部件配置类型、部件驱动程序实现的文件操作集。
10、根据权利要求2所述的高性能计算机中可重构部件的柔性管理方法,其特征在于,可重构部件分配情况结构中至少包含所需设备类型、设备分配情况、对应的可重构部件。
11、根据权利要求2所述的高性能计算机中可重构部件的柔性管理方法,其特征在于,进程已打开的可重构设备结构中至少包含一个可重构设备列表。
12、根据权利要求1所述的高性能计算机中可重构部件的柔性管理方法,其特征在于,可重构部件的配置过程如下:
(1)在可重构部件管理器初始化时,根据已知的配置文件,创建可重构部件配置信息结构数组rcd_cfgs;
(2)当需要配置可重构部件时,根据需要配置的设备类型查数组rcd_cfgs,找到配置文件;
(3)加载配置文件,完成可重构部件的配置,即将可重构部件配置成需要的可重构设备;
(4)加载可重构设备驱动程序,执行驱动程序的初始化函数;
(5)可重构设备驱动程序的初始化函数调用可重构部件管理器的注册函数,在该可重构部件所对应的属性结构rc_device中登记自己实现的实际文件操作集,并修改该结构的类型域。
13、根据权利要求1所述的高性能计算机中可重构部件的柔性管理方法,其特征在于,可重构部件管理器为每个进程维护一个可重构设备列表,记录该进程申请使用的可重构设备的情况,当应用程序打开某个可重构设备特殊文件时,可重构部件管理器为其在可重构设备列表中建立管理结构,但并不为其分配物理可重构部件;当应用程序真正操作可重构设备时,可重构部件管理器检查进程的可重构设备列表:
(1)如果还未为其分配可重构部件,则临时为其分配一个;
(2)如果可重构部件的配置与需求不符,则临时对其进行配置;
(3)如果还未为设备加载驱动程序,则临时加载可重构设备驱动程序。
14、根据权利要求1所述的高性能计算机中可重构部件的柔性管理方法,其特征在于,可重构部件的分配方法如下:
(1)如果节点中有空闲的可重构部件,则:
a、如果该部件已配置好且其配置内容与当前的要求相同,则将其分配给当前用户;
b、如果该部件还未配置或配置内容与当前的要求不符,则先配置该可重构部件,而后再将其分配给当前用户;
(2)如果节点中有已配置好的可重构部件,但已将其分配给其它用户,则:
a、如可重构设备允许复用,则将其分配给当前用户;
b、如可重构设备不允许复用,则将其从原用户中收回,而后再将其分配给当前用户;
(3)如果其它节点中有可供使用的可重构部件,则:
a、如果该可重构部件已配置好且其配置内容与当前的要求相同,则建立可重构虚设备并将其分配给当前用户;
b、如果该可重构部件还未配置或配置内容与当前的要求不符,则请求该部件所在节点配置该可重构部件,而后建立可重构虚设备并将其分配给当前用户;
(4)如果本节点有能够满足要求的可重构部件,但该设备已分配给其它用户,且其配置内容与当前要求不符,则将可重构部件从原用户手中抢回,按照新要求重新配置该可重构部件,而后将其分配给当前用户;
(5)如果***中有能够满足要求的可重构部件,但该可重构部件在其它节点中,而且正在被其用户以其它方式使用,则向拥有该可重构部件的节点发出求救信息,请求它抢占并重新配置该可重构部件,而后在本节点建立可重构虚设备并将其分配给当前用户;
(6)***中没有能满足要求的可重构部件,此次申请失败。
15、根据权利要求1-14任一权利要求所述的高性能计算机中可重构部件的柔性管理方法,其特征在于,可重构部件管理器在使用其他节点的可重构部件时,将在本地创建一个可重构虚设备,并加载一个驱动程序,可重构虚设备驱动程序建立在通信接口之上,它将对可重构虚设备的操作请求转化成网络数据包,而后经过互连网络将其发送到目的节点,并将来自目的节点的应答数据包转化成可重构设备的应答后上传给可重构部件管理器。
16、根据权利要求15所述的高性能计算机中可重构部件的柔性管理方法,其特征在于,在初始化时需创建一个守护进程,用于接收其它节点的查询信息和操作请求;当守护进程收到来自其它节点的操作请求时,它按照本地处理方法打开、写、读、关闭操作本地的可重构设备,完成远程节点的操作请求,并将结果返回给请求节点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008101406178A CN101630305B (zh) | 2008-07-16 | 2008-07-16 | 高效能计算机中可重构部件的柔性管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008101406178A CN101630305B (zh) | 2008-07-16 | 2008-07-16 | 高效能计算机中可重构部件的柔性管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101630305A true CN101630305A (zh) | 2010-01-20 |
CN101630305B CN101630305B (zh) | 2011-05-11 |
Family
ID=41575417
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008101406178A Expired - Fee Related CN101630305B (zh) | 2008-07-16 | 2008-07-16 | 高效能计算机中可重构部件的柔性管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101630305B (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102902656A (zh) * | 2012-09-28 | 2013-01-30 | 无锡江南计算技术研究所 | 可重构集群的模块化三维构造方法和可重构集群构造结构 |
CN103020008A (zh) * | 2012-12-26 | 2013-04-03 | 无锡江南计算技术研究所 | 计算能力增强的可重构微服务器 |
CN103064820A (zh) * | 2012-12-26 | 2013-04-24 | 无锡江南计算技术研究所 | 一种基于可重构微服务器的集群计算*** |
CN103336756A (zh) * | 2013-07-19 | 2013-10-02 | 中国人民解放军信息工程大学 | 一种数据计算节点的生成装置 |
CN104615488A (zh) * | 2015-01-16 | 2015-05-13 | 华为技术有限公司 | 异构多核可重构计算平台上任务调度的方法和装置 |
CN104754048A (zh) * | 2015-03-30 | 2015-07-01 | 中国人民解放军信息工程大学 | 服务器集群的一种拟态组织结构 |
CN104778083A (zh) * | 2015-03-27 | 2015-07-15 | 华为技术有限公司 | 异构多核可重构计算平台上任务调度的方法和装置 |
CN109240832A (zh) * | 2018-09-25 | 2019-01-18 | 中国电子科技集团公司电子科学研究院 | 一种硬件重构***及方法 |
WO2020118567A1 (zh) * | 2018-12-12 | 2020-06-18 | 西安诺瓦电子科技有限公司 | 字符设备驱动方法、装置、***和计算机可读介质 |
CN112124636A (zh) * | 2020-05-09 | 2020-12-25 | 长沙天仪空间科技研究院有限公司 | 一种新型的高集成式卫星平台*** |
RU2798443C1 (ru) * | 2022-12-09 | 2023-06-22 | Федеральное государственное унитарное предприятие "Научно-исследовательский институт "Квант" | Реконфигурируемая вычислительная система |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8966223B2 (en) * | 2005-05-05 | 2015-02-24 | Icera, Inc. | Apparatus and method for configurable processing |
CN201004225Y (zh) * | 2006-12-11 | 2008-01-09 | 刘利民 | 一种异核可重构soc动态***切换结构 |
CN100550002C (zh) * | 2007-08-23 | 2009-10-14 | 顾士平 | 动态可重构指令处理器配置及通信控制装置 |
-
2008
- 2008-07-16 CN CN2008101406178A patent/CN101630305B/zh not_active Expired - Fee Related
Cited By (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102902656A (zh) * | 2012-09-28 | 2013-01-30 | 无锡江南计算技术研究所 | 可重构集群的模块化三维构造方法和可重构集群构造结构 |
CN102902656B (zh) * | 2012-09-28 | 2015-05-20 | 无锡江南计算技术研究所 | 可重构集群的模块化三维构造方法和可重构集群构造结构 |
CN103020008B (zh) * | 2012-12-26 | 2015-08-12 | 无锡江南计算技术研究所 | 计算能力增强的可重构微服务器 |
CN103020008A (zh) * | 2012-12-26 | 2013-04-03 | 无锡江南计算技术研究所 | 计算能力增强的可重构微服务器 |
CN103064820A (zh) * | 2012-12-26 | 2013-04-24 | 无锡江南计算技术研究所 | 一种基于可重构微服务器的集群计算*** |
CN103336756A (zh) * | 2013-07-19 | 2013-10-02 | 中国人民解放军信息工程大学 | 一种数据计算节点的生成装置 |
CN103336756B (zh) * | 2013-07-19 | 2016-01-27 | 中国人民解放军信息工程大学 | 一种数据计算节点的生成装置 |
WO2016112701A1 (zh) * | 2015-01-16 | 2016-07-21 | 华为技术有限公司 | 异构多核可重构计算平台上任务调度的方法和装置 |
CN104615488B (zh) * | 2015-01-16 | 2018-01-19 | 华为技术有限公司 | 异构多核可重构计算平台上任务调度的方法和装置 |
US10552222B2 (en) | 2015-01-16 | 2020-02-04 | Huawei Technologies Co., Ltd. | Task scheduling method and apparatus on heterogeneous multi-core reconfigurable computing platform |
CN104615488A (zh) * | 2015-01-16 | 2015-05-13 | 华为技术有限公司 | 异构多核可重构计算平台上任务调度的方法和装置 |
WO2016155335A1 (zh) * | 2015-03-27 | 2016-10-06 | 华为技术有限公司 | 异构多核可重构计算平台上任务调度的方法和装置 |
CN104778083A (zh) * | 2015-03-27 | 2015-07-15 | 华为技术有限公司 | 异构多核可重构计算平台上任务调度的方法和装置 |
CN104778083B (zh) * | 2015-03-27 | 2018-07-03 | 华为技术有限公司 | 异构多核可重构计算平台上任务调度的方法和装置 |
US10452605B2 (en) | 2015-03-27 | 2019-10-22 | Huawei Technologies Co., Ltd. | Method and apparatus for task scheduling on heterogeneous multi-core reconfigurable computing platform |
CN104754048B (zh) * | 2015-03-30 | 2018-05-22 | 中国人民解放军信息工程大学 | 服务器集群的一种拟态组织结构 |
CN104754048A (zh) * | 2015-03-30 | 2015-07-01 | 中国人民解放军信息工程大学 | 服务器集群的一种拟态组织结构 |
CN109240832A (zh) * | 2018-09-25 | 2019-01-18 | 中国电子科技集团公司电子科学研究院 | 一种硬件重构***及方法 |
CN109240832B (zh) * | 2018-09-25 | 2022-04-19 | 中国电子科技集团公司电子科学研究院 | 一种硬件重构***及方法 |
WO2020118567A1 (zh) * | 2018-12-12 | 2020-06-18 | 西安诺瓦电子科技有限公司 | 字符设备驱动方法、装置、***和计算机可读介质 |
CN112124636A (zh) * | 2020-05-09 | 2020-12-25 | 长沙天仪空间科技研究院有限公司 | 一种新型的高集成式卫星平台*** |
CN112124636B (zh) * | 2020-05-09 | 2024-06-04 | 长沙天仪空间科技研究院有限公司 | 一种高集成式卫星平台*** |
RU2798443C1 (ru) * | 2022-12-09 | 2023-06-22 | Федеральное государственное унитарное предприятие "Научно-исследовательский институт "Квант" | Реконфигурируемая вычислительная система |
Also Published As
Publication number | Publication date |
---|---|
CN101630305B (zh) | 2011-05-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101630305B (zh) | 高效能计算机中可重构部件的柔性管理方法 | |
US11068293B2 (en) | Parallel hardware hypervisor for virtualizing application-specific supercomputers | |
Chou et al. | ipChinook: An integrated IP-based design framework for distributed embedded systems | |
WO2002041144A1 (en) | Information transformation software engine | |
Yu et al. | AvA: Accelerated virtualization of accelerators | |
Campbell et al. | Choices: A parallel object-oriented operating system | |
Bricker et al. | A new look at microkernel-based UNIX operating systems: Lessons in performance and compatibility | |
CN101634979B (zh) | 一种满足SystemC语法的多核处理器 | |
Wang et al. | Synthesizing operating system based device drivers in embedded systems | |
Lux | Adaptable object migration: concept and implementation | |
Vercauteren et al. | A strategy for real-time kernel support in application-specific HW/SW embedded architectures | |
Hecht et al. | A distributed object system approach for dynamic reconfiguration | |
Kessler et al. | Concurrent scheme | |
Balter et al. | Is the Micro-Kernel Technology well suited for the support of Object-Oriented Operating Systems: the Guide Experience | |
Doğan et al. | Cloud building block Chip for creating FPGA and ASIC clouds | |
Agha | Compositional development from reusable components requires connectors for managing both protocols and resources | |
Boule et al. | Chorus distributed operating systems | |
Franke et al. | MPI on IBM SP1/SP2: Current status and future directions | |
Nehmer et al. | Design rationale for the MOSKITO kernel | |
Barker | Runtime support for load balancing of parallel adaptive and irregular applications | |
Dissaux et al. | Cheddar Architecture Description Language | |
Fung et al. | Development of a Java-based distributed platform for the implementation of computation intelligence techniques | |
Armand et al. | Chorus Distributed Operating Systems | |
Cordsen et al. | Experiences developing a virtual shared memory system using high-level object paradigms | |
Zedan | Real-time Systems with Transputers: OUG-13: Proceedings of the 13th Occam User Group Technical Meeting, 18-20 September 1990, York, England |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20110511 Termination date: 20140716 |
|
EXPY | Termination of patent right or utility model |