CN101877120B - 支持多个绘图处理器的互动的方法与系统 - Google Patents

支持多个绘图处理器的互动的方法与系统 Download PDF

Info

Publication number
CN101877120B
CN101877120B CN200910222132.8A CN200910222132A CN101877120B CN 101877120 B CN101877120 B CN 101877120B CN 200910222132 A CN200910222132 A CN 200910222132A CN 101877120 B CN101877120 B CN 101877120B
Authority
CN
China
Prior art keywords
context
gpu
state
buffer
fences
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.)
Active
Application number
CN200910222132.8A
Other languages
English (en)
Other versions
CN101877120A (zh
Inventor
提莫·佩塔西
约翰·柏拉勒斯
柏瑞斯·柏克潘克
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Via Technologies Inc
Original Assignee
Via Technologies Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Via Technologies Inc filed Critical Via Technologies Inc
Publication of CN101877120A publication Critical patent/CN101877120A/zh
Application granted granted Critical
Publication of CN101877120B publication Critical patent/CN101877120B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units

Abstract

一种支持多个绘图处理器的互动的系统,包括一上下文状态缓存器、一上下文切换配置缓存器、一上下文状态管理逻辑单元与一内存存取单元。该上下文状态缓存器发送有关至少一上下文之一状态的数据。该上下文切换配置缓存器发送有关至少一上下文之至少一事件的多个指令。该上下文状态管理逻辑单元接收有关至少一上下文之一状态之该数据与自该上下文切换配置缓存器接收该等指令,并且根据该等指令执行一动作。该内存存取单元,其用以发送一监控事件至该上下文状态管理逻辑单元与自该上下文状态管理逻辑单元接收控制数据。

Description

支持多个绘图处理器的互动的方法与系统
技术领域
本发明涉及关于一种绘图处理器(Graphics Processing Unit,以下简称为GPU),且特别有关于一种支持多个GPU的互动的方法与系统。
背景技术
就计算机制作图形的发展而言,处理能力的需求愈见显著。传统上在利用单一中央处理器(Central Processing Unit,以下简称为CPU)处理绘图指令时,许多图形软件可利用额外的硬件来得到更好的效果。特别的是,由于处理能力的需求增加,可使用多重CPU和(或)一GPU。在计算机中使用GPU有助于在处理图形指令时更有效率。在使用GPU可增加图形需求的同时,许多动态图形场景更适合利用多个GPU来绘制。在计算机环境中使用一个以上的GPU时,可能需要对GPU进行同步化。
以软件为基础的多重CPU同步机制已发展超过15年了。由于近年来发展之GPU的本质,GPU具有串流类型架构(Stream Type Architecture),现有的多重CPU同步支持缺少软件与硬件中所需的许多特性。
协议控制数据快捷(Protocol Control Information-Express,以下简称为PCI-Express)系统接口提供一通用讯息传输阶层(Generic Message TransportLevel)以供在计算机中多重CPU和/或GPU间进行通讯,亦提供在主存储器与区域内存之数据区块间的连贯性支持(Coherency Support)。PCI-Express锁定交易支持讯息(PCI-Express Locked Transaction Support Message)与厂商定义讯息可作为实现不同同步类型的低阶基元(Low Level Primitives),该机制不包括必要的GPU同步支持,而且厂商被迫定义讯息以支持多重CPU与多重GPU配置的系统。
此外,屏障类型同步(Barrier Type Synchronization)已广泛应用于多重执行绪与多重处理器系统,但目前在单一上下文(Context)GPU所实施的屏障同步可能会引起严重的延滞(Stall)与潜在的死锁(Deadlocks)状况,其可能导致计算机中GPU的使用相当没效率。
因此,本发明提供了一种支持多个绘图处理器的互动的方法与系统。
发明内容
基于上述目的,本发明实施例揭露了一种支持多个绘图处理器的互动的系统,包括上下文状态缓存器、上下文切换配置缓存器、上下文状态管理逻辑单元与内存存取单元。该上下文状态缓存器发送有关至少一上下文之状态的数据。该上下文切换配置缓存器发送有关至少一上下文之至少一事件的多个指令。该上下文状态管理逻辑单元接收有关至少一上下文之该状态资料以及自该上下文切换配置缓存器接收该等指令,并且根据该等指令执行一动作。该内存存取单元用以发送监控事件至该上下文状态管理逻辑单元以及自该上下文状态管理逻辑单元接收控制数据。
本发明实施例更揭露了一种支持多个绘图处理器的互动的方法。该方法包括侦测与一上下文有关之事件;判断该事件包括等待代符、自旋等待与时间片段之至少其中之一;根据判断结果执行下列步骤:停止执行目前上下文,将目前上下文之状态设定为待处理储存状态,以及利用动件定义缓存器切换至新的上下文。
附图说明
图1显示本发明实施例之多重执行绪/多重GPU环境中之基本同步基元的示意图。
图2显示本发明实施例之实施于GPU管线(Pipeline)中之一内部屏障同步之非限定范例的示意图。
图3A显示本发明实施例之GPU内部屏障同步的示意图。
图3B显示本发明实施例之GPU屏障命令格式的示意图。
图4显示本发明实施例之GPU屏障命令变化的示意图。
图5显示本发明实施例之使用屏障命令来进行二个GPU间之同步的示意图。
图6显示本发明实施例之建构在PCI-Express接口上之多重GPU系统的示意图。
图7显示图6之多重GPU系统之连结类型(Join Type)同步的示意图。
图8显示图6之多重GPU系统之分支类型(Fork Type)同步的示意图。
图9显示图6之多重GPU系统之连结-分支类型(Join-Fork Type)同步的示意图。
图10显示本发明实施例之多重GPU上下文与局部GPU排程器(Scheduler)的示意图。
图11显示本发明实施例之系统中内上下文(Inter-Context)与内GPU同步之指导方针(Guidelines)的示意图。
图12显示本发明实施例之GPU上下文的不同状态与根据内部与外部事件改变状态的示意图。
图13、14显示本发明实施例之在不同状态之上下文执行屏障的示意图。
图15显示图13、14之环境下之围篱处理状态机(Fence Processing StateMachine)的示意图。
图16显示本发明实施例之支持多重上下文同步之上下文缓存器区块的示意图。
图17显示本发明实施例之影响定时器与监控事件之上下文状态管理的示意图。
图18显示本发明实施例之上下文状态管理逻辑单元之状态机的示意图。
【主要组件符号说明】
122~互斥
124~互斥取得
126~锁定
128~解锁
130~互斥释放
130~条件群组
132~条件等待
134~进入队列
136~回复
138~条件旗号
140~条件广播
142~旗号群组
144~旗号P(向下)二元
146~旗号V(向上)二元
148~旗号P(向下)计数
150~旗号V(向上)计数
152~警示群组
154~警示
156~测试警示
158~警示P
160~警示等待
162~进入队列
164~警示回复
166~屏障
204~GPU管线
205~地址范围
206~发送内部等待代符
208~内存存取单元
210a、210b~缓存器与比较逻辑单元
214~发送写入确认
216~产生内存数据读取/写入路径
218~产生内存数据写入路径
220~发送内部等待代符
222~发送写入确认
224~产生内存数据写入路径
226~发送内部等待代符
228~产生内存数据写入路径
230~产生内存数据写入路径
302~CSP FRONT
304~EUP_F
306~ZL1
308~ZL2
310~WBU
312~CSP BACK
314~虚拟分页表
402~内部同步命令
404~CSP前端围篱(外部)
406~内部或外部围篱/等待
408~管线区块内部围篱或等待
410~CSP后端或管线区块内部围篱
412~内部围篱
414~特权围篱
416~CPU中断(CSP后端)
418~等待
420~非特权围篱
422~非CPU中断
502、530~GPU A
504、532~GPU B
506~地址范围A
508~GPU A之内存存取单元
510~GPU B之视讯内存
512~GPU同步缓存器
514~GPU同步缓存器
516~GPU A之视讯内存
518~GPU B之视讯内存
520~GPU B之总线接口单元
522~围篱/等待缓存器映像
524~围篱/等待缓存器映像
534~写入埠
602~GPU A的局部内存
604~GPU B的局部内存
606~GPU C的局部内存
608~GPU D的局部内存
610~CPU芯片组
612~PCI-E内存重指向逻辑单元
614~CPU系统内存
616~多重GPU驱动器
702~GPU A
704~GPU B
706~GPU C
708~同步屏障
710~GPU D
712~围篱0
714~围篱1
716~围篱2
718~围篱命令
720~触发命令
722~等待0命令
724~等待1命令
726~等待2命令
802~GPU A
804~GPU B
806~GPU C
808~GPU D
810~同步屏障
812~等待1命令
814~围篱1
816~等待2命令
818~围篱2
820~等待3命令
822~围篱3
902~GPU A
904~GPU B
906~GPU C
908~GPU D
910~同步屏障
914~等待2.0命令
916~等待2.1命令
918~等待3.0命令
920~等待3.1命令
1002~应用执行清单
1004a..1004m~上下文
1006~应用执行清单
1008a..1008m~上下文
1010~局部GPU上下文排程器
1026~局部GPU任务队列
1028~GPU
1103a、1103c、1103w、1103y~上下文T1
1103b、1103d、1103x、1103z~上下文T2
1103e~上下文E
1103f~上下文F
1103g~上下文G
1103h~上下文H
1102a~执行清单A
1102r~执行清单R
1102b~执行清单B
1102s~执行清单S
1106a~局部执行清单与上下文执行控制区块
1108a~具有包含在CPU任务空间内之视讯内存的GPU
1106t~局部执行清单与上下文执行控制区块
1108t~具有包含在CPU任务空间内之视讯内存的GPU
1232~执行
1234~空缺
1236~就绪
1238~悬置
1240~待处理回复
1242~待处理储存
1244~检查同步条件
1302~GPU A
1310~上下文内存空间
1502~侦测外部围篱至任一GPU上下文
1504~检查相符的上下文状态
1506~写入选择的缓存器至MXU
1508~等待直到相关上下文载入的终端
1510~写入至MXU中选择的同步缓存器
1512~开始执行加载上下文
1514~等待直到上下文储存的终端
1516~写入至内存中之同步缓存器区块位置
1602~上下文状态缓存器
1604~上下文切换配置缓存器
1606~定时器模式缓存器
1608~自旋等待计数器缓存器
1610~上下文时间片段计数器缓存器
1611~上下文优先权
1612~DMA缓冲器头端指标
1613~DMA缓冲器头端指标
1614~DMA缓冲器尾端指标
1615~自旋等待定时器
1616~上下文同步区块地址1616
1617~等待代符
1618~执行中
1619~时间片段定时器
1620~空缺
1621~任意监控事件
1622~就绪
1624~悬置
1628~待处理储存
1630~待处理回复
1632~上下文监控旗标
1646~上下文监控定义缓存器
1702~上下文状态管理逻辑区块
1704~自旋/等待监看计数器
1706~时间片段计数器
1708~上下文状态缓存器
1709~上下文切换配置缓存器
1710~总线接口单元
1712~上下文之MMIO缓存器地址译码逻辑单元
1720~内存存取单元
1722~围篱地址与数据缓冲器
1724~上下文1..N之同步地址范围
1802~事件侦测循环
1804~检查编码上下文状态
1806~写入闩锁数据至一同步缓存器
1808~设定监控旗标
1810~根据定义缓存器执行动作
1811~设定警示旗标与密码
1812~设定就绪状态
1814~设定警示旗标与密码
1816~产生CPU中断
1818~缓冲地址与数据
1820~等待直到储存
1822~写入缓冲数据至内存
1824~缓冲地址与数据
1826~等待直到回复
1828~写入缓冲数据至同步缓存器
1830~终止执行目前上下文
1832~设定目前状态为″待处理储存″
1834~储存目前上下文
1836~设定为″就绪″
1838~利用定义缓存器切换到新的上下文
1840~设为″悬置″与″等待″码
具体实施方式
为了让本发明之目的、特征、及优点能更明显易懂,下文特举较佳实施例,并配合所附图式图1至图18,做详细之说明。本发明说明书提供不同的实施例来说明本发明不同实施方式的技术特征。其中,实施例中的各组件之配置系为说明之用,并非用以限制本发明。且实施例中图式标号之部分重复,系为了简化说明,并非意指不同实施例之间的关联性。
本发明实施例揭露了一种支持复数绘图处理器之互动的方法与系统。
图1显示本发明实施例之多重执行绪/多重GPU环境之基本同步基元的示意图。如图所示,可用来同步CPU之基本同步基元包括互斥基元群组(Mutex Primitive Group)122(表示相互独占命令(Mutual ExclusiveCommand))、条件基元群组(Condition Primitive Group)130、旗号基元群组(Semaphore Primitive Group)142与警示基元群组(Alerts Primitive Group)152。互斥基元群组122包括″互斥取得(Mutex Acquire)″基元124与″互斥释放(Mutex Release)″基元130。互斥基元亦包含不同名称之锁定(Lock)基元126与解锁(Unlock)基元128。
条件群组(Condition Group)130中包括条件等待基元(Condition WaitPrimitive)132,其包括进入队列(Enqueue)变数134与回复(Resume)变数136。若条件述词(Condition Predicate)不为真(不满足),则条件等待基元132之进入序列变数134悬置目前的执行绪并将该执行绪放入序列。若条件述词为真(满足),则条件等待基元132之回复变数136可重新执行该执行绪。条件群组130亦包括条件信号基元(Condition Signal Primitive)138与条件广播基元(Condition Broadcast Primitive)140。上述基元与其执行之动作相仿,其可呼叫等待悬置(进入序列)的执行绪之激发以再次检查该条件述词,且若该条件述词仍为真时则继续执行。该条件信号基元138通知关于一或多个悬置执行绪之条件述词的改变。条件广播基元140通知该悬置执行绪。旗号基元群组142包括旗号P(向下)二元基元144、旗号V(向上)二元基元146、旗号P(向下)计数基元148与旗号V(向上)计数基元150。二元旗号基元的操作与互斥基元类似,二元旗号P基元与取得有关而二元旗号V与释放有关。计数旗号P(向下)基元148检查旗号值,减少该旗号值,并且若该值非为零时继续执行该执行绪。否则,计数旗号P(向下)基元148不会执行后续操作并且进入睡眠阶段(Sleeping Stage)。计数旗号V(向上)基元150增加旗号值并且唤醒任何具有特定地址之在睡眠阶段中无法完成旗号P基元后续操作的执行绪。旗号基元群142在与被中断之例行程序有互动的情况下相当有用,因为例行程序不会发生互斥。警示基元125提供与旗号基元群142及条件基元群130连接之执行绪执行之中断的软性形式(SoftForm),以实现如暂停(Timeout)与放弃(Abort)的事件。警示基元群组125可使用在决定让请求发生在大于执行绪被封锁之阶层的抽象阶层的情况。警示基元群组152包括警示基元154、测试警示基元156、警示P基元158以及警示等待基元160。警示等待基元160具有多个变数,包括进入队列基元162与警示回复基元164,但其并非用以限定本发明。
呼叫警示P基元158为一请求,其中该执行绪呼叫例外的警示基元154。测试警示(TestAlert)基元156用以允许执行绪判断该执行绪是否有一待处理请求以呼叫警示基元154。警示等待(AlertWait)基元160与条件等待基元132类似,除了警示等待基元160可呼叫警示基元154而非恢复。在警示等待基元160与条件等待基元132间的选择是依据呼叫的执行绪是否在该呼叫点需响应警示基元154。呼叫警示P基元158提供旗号类似的功能。
在程序之平行循环中之一额外同步操作为屏障基元166。屏障基元166可扣住处理程序,直到所有(或数个)程序到达屏障基元166。当所需的程序到达屏障基元166时,屏障基元166释放被扣住的处理程序。实现屏障基元166的其中一方式可利用多个自旋锁定(Spin Lock)来实现。自旋锁定基元可包括第一自旋锁定基元与第二自旋锁定基元,其中第一自旋锁定基元可用来保护纪录到达屏障基元166之处理程序的计数器,而第二自旋锁定基元可用来扣住处理程序直到最后一个处理程序到达屏障基元166为止。实现屏障基元166的另一方式系利用一感应反转屏障基元(Sense-Reversing Barrier)来实现,其可利用一私有前处理变量(Private Preprocess Variable),每一程序程序之变量可初始化为″1″。
上文叙述软件基元与CPU同步硬件支持,下文亦着重在类屏障基元(Barrier-like Primitive)之硬件支持的实施,其更有助于GPU的同步。特别的是,本发明揭露了GPU硬件同步基元与硬件区块(Hardware Block),该硬件区块可实现上述基元以支持上下文对上下文(Context-To Context)与GPU对GPU之同步。
GPU内部管线(inter-pipeline)与外部CPU同步基元
在某些GPU中,同步机制包括多个GPU命令、围篱命令(FenceCommand)以及实施内部GPU管线屏障类型同步之等待命令。该围篱命令可将值写入内存映像围篱缓存器(内部)和/或内存位置,其类似于上述之设定屏障基元166。等待命令可利用多个不同的方式来实现,可实现于GPU内部和/或外部。
内部等待命令可用来检查包含一计数值之特定内存位置。若该计数值不为零,则利用一命令减少该值并继续执行目前上下文。若该值等于零,则一计算机计数器(PC Counter)(和/或GPU命令指标(Pointer))可重置为在等待命令之前的值,且GPU可切换到另一上下文。
内部等待命令可写入一确定值至一虚拟等待缓存器(Virtual WaitRegister)。当储存在一对缓存器之围篱值等于或大于该等待命令提供之值,则可完成该写入操作。特别比较逻辑单元(Special Compare Logic)关联于该对围篱等待缓存器(Fence-Wait Register)。此命令与自旋锁定相关,因为GPU硬件可能检查围篱缓存器的内容并封锁GPU管线执行,直到该内容被更新至需求的值。
当资料不符时,等待命令会延滞(Stall)GPU管线,且继续在后续频率周期执行等待命令。该围篱值可自管线中之先前命令取得,且可在任何时间到达一同步缓存器对。当围篱等待缓存器被更新且围篱值等于或大于等待值,该等待命令写入可完成并解除该管线的封锁。需注意同步围篱/等待缓存器之设定亦可映像至内存,但其可能在写入等待值时自旋而产生内存竞争(Memory Contention)。
需注意到GPU上下文可与CPU执行绪比对,其表示应用程序任务的某些部分。上下文的执行列表或群组可模拟于包含多个执行绪的CPU处理程序。此外,在许多系统中,执行绪可互相同步。同步机制可藉由任何执行绪排程方法来实施,且硬件可连接至排程软件和/或硬件。包括数个同步基元之CPU领域(CPU Domain)的执行绪同步机制系揭露于″Synchronization Primitivesfor a Multiprocessor:A Formal Specification,A.D.Birrell,J.V.Guttag,J.J.Horning,R.Levin,August 20,1987,SRC Research Report 20″中。
图2显示本发明实施例之实施于GPU管线中之一内部屏障同步之非限定范例的示意图。特别的是,GPU管线204包括多个模块,用以描述管线中的不同点。管线模块H可发送一内部等待代符(Wait Token)206至内存存取单元208。映像至内存空间之缓存器210a可发送一写入确认214至管线模块H,从而产生一内存数据读取/写入路径216。当只有在等待代符值等于或大于围篱等待缓存器中之围篱值时,缓存器210a才可发送一写入确认,其中该写入确认可由在管线之较晚阶段(Deeper Stage)中的另一管线区块(PipelineBlock)发送。
同样的,管线模块I可发送一内部围篱代符216给缓存器210a(其可包括一对围篱/等待缓存器(Fence/Wait Register))。在该缓存器接收该内部围篱代符216后,可产生一内存数据写入路径218。如图2所示,管线模块H与管线模块I系为一对管线单元,其可同步管线模块H的行动与管线模块I的某些操作(例如,相同内存表面存取同步)。
管线模块H与管线模块I执行缓存器210a的某些操作,而另一管线模块J可发送一内部等待代符220给内存存取单元208。缓存器210a(包括一对缓存器)接着发送一写入确认222回管线模块J,其有助于产生内存数据写入路径224。管线模块K发送一内部等待代符226给缓存器210b,并接着产生内存数据写入路径228。管线模块L可产生内存数据写入路径230。上述每一对缓存器系关联于同步数据区块之内存地址,且每一对缓存器之映像内存地址范围系在特定地址范围缓存器205中,其可用以侦测对执行之围篱(Fence)或等待命令之缓存器对的碰撞。若在围篱(Fence)或等待命令中之地址不符合地址范围围篱或等待,则数据可改指向至外部内存。
需注意到,图2描述之五个管线模块并非用以限制本发明。熟习本领域之技艺人士可了解任意数目之管线模块可提供所需功能,且系依据成对围篱等待缓存器,其中该成对围篱等待缓存器系关联于实作于内存存取单元208中之逻辑单元。此外,至少一内存存取单元208包括16~18对缓存器,其亦非用以限定本发明。熟习本领域之技艺人士可了解依据图形管线之特定配置可使用任意数目之缓存器对。
此外,依据特定配置,并非GPU管线204的每个区块都需要处理围篱/等待命令,且只有写出数据至内存存取单元208的单元具有专门存取内存存取界面单元(Memory Interface Unit)208的围篱/等待接口。
图3A系显示本发明实施例之GPU内部屏障同步的示意图,其所揭示之GPU管线类似于图2之GPU管线。特别的是,图3A中包括内存存取界面单元208与多个模块302、304、306、308、310与312,但其并非用以限定本发明。图3A中亦包括一虚拟分页表(Virtual Page Table,VPT)模块314。熟习本领域之技艺人士可了解图3A中之六个管线模块并非用以限定本发明。根据特定的配置,可使用较多或较少的管线模块来实作。使用围篱等待对(Fence/Wait Pairs)之管线包括命令串流处理器(Command Stream Processor)302的前端部位。该前端部位可连接至一前端执行单元池(Front-End ExecutionUnit Pool,EUP_F)304,其可处理顶点(Vertices)。该前端执行单元池304亦可处理、发送和/或接收带有其它管线单元的数据,该等管线包括早期深度测试单元(Early Depth Test Unit)ZL1、ZL2以及处理最终像素值与命令串流处理器312之后端部位的写回单元(Write-Back Unit,WBU)。上述单元系电性连接于内存存取界面单元208且在上述同步操作中系以成对方式来执行。
此外,可产生GPU命令代符″Internal Sync″且用以支持同步基元,如图3B所示。根据操作码(Opcode)314中之某些位值,内部同步(Internal Sync)命令代符包括提供多个外部围篱(External Fence)基元、内部围篱基元与等待基元之版本的变化。内部同步命令代符可插入由命令串流处理器(CommandStream Processor,以下简称为CSP)取得之命令串流。Internal Sync命令可自前端CSP 302传送至一特定单元,其中该特定单元系来自具有内存存取交换单元(Memory Exchange Unit)208之接口的群组(Group)。若围篱基元在基元内存存取交换单元(Memory Exchange Unit)208的外部,则该围篱基元可写入一值至该命令定义的内存位置。一般来说,由于该命令可能发生内存竞争且需要实施互斥,故并没有支持该命令之外部等待基元。
图4显示本发明实施例之内部同步代符或外内部同步代符之变化的示意图,如图1的GPU所示。下述同步命令可利用一内部同步代符、一CSP前端围篱基元404、一内部围篱基元406、一等待基元418、一外部特权围篱基元414、一CPU中断基元416、一外部非特权基元420和一无CPU中断基元122来产生。
特别的是,在接收该内部同步命令(步骤402)后,判断是否存在一围篱基元。若围篱基元存在(FE=1),则可利用CSP之前端部位来应用CSP前端围篱基元(外部)(步骤404)。若围篱基元不存在(FE=0),则可执行同步命令以作为在图3A中显示之任意成对管线阶段中之内部或外部围篱/等待基元(步骤406)。若不使用外部围篱基元(EXT=0),则可利用一管线区块内部围篱或等待基元(步骤408,指向依赖WT旗标值之等待基元418或内部围篱基元412)。
参考步骤406,若使用外部围篱基元(EXT=1),则判断是否使用管线区块外部围篱基元之CSP后端(步骤410)。若使用特权围篱基元(PRI=1,指向)区块414,则判断是否要执行CPU中断。若INT=1,则使用CPU中断基元(CSP后端,步骤416)。若INT=0,则使用非CPU中断基元(步骤422)。换句话说,若使用非特权围篱基元(步骤420),判断是否要执行CPU中断(步骤416与422)。
执行围篱/等待对命令之二个GPU间的同步范例
在GPU管线单元之同步存取上发展之内部同步机制可被执行以支持多GPU。举例来说,GPU A可绘出像素之基数带(Odd Number Band),而GPUB可绘出像素之偶数带(Even Number Band),但其并非用以限制本发明。在绘出之后,着色目标(Render Target,RT)内存表面(Memory Surface)可作为材质之用。上述二个GPU可经由内存存取单元(MXU)读取画框缓冲器(frame buffer),同时建立专有的表格与设置接口,但上述GPU间可进行同步,故在GPU B完成写入至该缓冲器前,GPU A无法读取耦接于缓冲器之GPU B,反之亦然。
图5显示本发明实施例之使用屏障命令来进行二个GPU间之同步的示意图,其与图4类似,但不同在于围篱命令的动作,其具有映像至另一GPU地址空间的地址。另一个不同点为执行围篱命令,其中因为地址范围A 506中不包括该地址,故会导致遗失CPU同步缓存器区块。如图5所示,GPU A 502中之可执行上下文数据串流包括一数据串流组件(Data Stream Element)N、围篱L同步命令(Fence L Sync Command)、数据串流组件2、表面Q绘图命令与数据(Surface Q Rendering Commands And Data)、命令串流组件1以及数据串流组件0。同样的,包含在GPU消耗表面Q数据(GPU B consumingsurface Q data)504中之可执行上下文数据系为数据串流组件N、利用作为材质之表面Q的绘出命令、等待L同步命令、数据串流组件2、命令串流组件1以及数据串流组件0来执行命令。GPU A 508之内存存取单元包括GPU同步缓存器512且可接收GPU A 502中之上下文之围篱L同步命令。GPU A之内存存取单元亦可接收GPU B视讯内存范围536中之围篱L,其中该范围系超出GPU A之内部围篱/等待缓存器之地址范围A 506。当围篱L命令伴随着超出地址范围A 506之一地址,MUX 508具有GPU A之遗失内部同步缓存器区块512。MUX 508转送围篱L命令数据给该地址,其可能位于GPUA的外部且位于GPU B内存空间中。MUX 508可耦接于GPU A之视讯内存516,其包括围篱/等待缓存器映像522。当内存映像输入/输出(Memory mappedinput/output,MMIO)空间具有超出定义之GPU A之地址范围A的地址,则内存存取单元508亦可经由总线接口单元(Interface Unit,BIU)写入围篱命令给GPU B内存映像输入/输出(MMIO)空间。GPU B之总线接口单元520传送数据给GPU B同步缓存器514。GPU B同步缓存器514可发送数据给GPU B 504中的上下文,并且接收一等待L同步命令,其中若管线值完全不符合成对的围篱缓存器值,则可封锁GPU B。GPU B 501之内存存取单元发送数据给GPU A之视讯内存,其包括围篱等待缓存器映像空间518。
为了提供多GPU(例如,GPU A 530与GPU B 532)间的同步,需要实现支持简单内GPU同步之额外硬件特征。由于GPU A 530可写入围篱命令至GPU B 532的地址空间,该额外硬件可以不同方式操作。一围篱与等待对(fence and wait pair)可插入至指向不同GPU之GPU命令的二个独立串流中。
需注意到,当另一GPU(例如,GPU A 530)写入一值至同步缓存器区块514,GPU同步缓存器区块514可藉由额外写入端口534提供自总线接口单元520直接写入的功能。此外,当围篱失误(fence miss)指向另一GPU地址空间,则总线接口单元520可处理围篱失误。总线接口单元520可处理外部等待,亦可处理映像至总线接口单元内存映像输入/输出地址空间之GPU同步缓存器512、514。MXU和总线接口单元520可提供同步缓存器区块内容的连贯性以及指定(映像)内存位置(4K分页),并且写入沿着选择围篱缓存器修改的内存位置。
若上述特征有被特定配置所支持,则可定义下述动作序列{GPU A}→{GPU B}类型的同步。特别的是,在第一步骤中建立GPU A输出之功能/状态/绘制命令之一命令序列。接着,该系统可插入一内部围篱命令(至CSP和/或其它单元),其中将一指定计数值(fence#)插入表面输出序列之终端。需注意到,根据特定配置,在围篱命令中的地址可能不在GPU A围篱/等待缓存器区块的范围内。地址程缓存器选择字段可设置在GPU B 532的地址范围内,其中可执行围篱/等待同步操作,如图2所示。
接着,该系统可建立GPU B输出之功能/状态/绘制命令之一命令序列。接着,该系统可插入一内部等待命令(指向CSP和/或其它单元),其中相同(或类似)计数值系作为GPU A530命令序列之对应围篱命令。需注意到,在GPU B输入串流中,在绘制命令前可插入内部等待命令,该等待命令可被插入以使用GPUA绘制的表面。在等待命令中的地址可设置于GPU B围篱/等待缓存器区块的范围内,其中可执行实际围篱/等待同步操作。此外,该系统可发送绘制命令,其可使用GPU A绘制的表面,如如输入至顶点着色器(Vertex Shader)或几何着色器(Geometry Shader)、深度-Z单元以及材质单元。需注意到,GPU A串流中之围篱命令的区块识别码包括内存表面产生器(Producer)区块识别码(EUPF_STO、ZL2、WBU或任何写入数据至该内存表面之其它区块)。在复杂的图形管线中,命令与代符可经由命令数据路径来传送,即为何在管线中的每个区块具有唯一的区块识别码,其系应用于路由之命令标头。同样的,GPU B串流中之等待命令的区块识别码包括消费器(Consumer)区块识别码(CSP、ZL1或任何读取该内存表面数据之其它区块)。此外,特定产生器/消费器区块组合可自上述所述之单一CPU同步图案(Pattern)推导而得。就产生器/消费器对(Producer/Consumer Pair)言,围篱/等待对可分派在消费器同步缓存器区块中。
复数GPU可执行复数上下文,且当内GPU(inter-GPU)同步程序延滞某一上下文很长的时间,该GPU可切换延滞的上下文并执行另一上下文以维持GPU硬件的高效率。同时,一上下文可发送一屏障同步命令给早已悬置或在过渡阶段之另一GPU上下文,其产生具有多上下文之GPU之同步的额外问题,且需要特别注意以存取内存中之GPU上下文的同步缓存器以及上下文过渡状态,以防止原始数据危害(RAW Data Hazard)。在图5中仅利用一屏障围篱/等待基元来描述二个GPU间的互动,需注意到,本发明概念可延伸为利用一PCI-E总线的性能来描述多个GPU间的互动。
多个GPU可经由一芯片组接口连接,并且可发送一围篱值至有关另一GPU之预设地址空间。当内部同步命令指向特定GPU地址空间之外,外部围篱遗失(External Fence Miss)可由PCI-E接口中的逻辑单元来处理。内部同步命令中的围篱值可重新指向至GPU,其符合地址空间限制(如图6所示)。进阶排程器(Advance Scheduler,AS)之外部围篱与等待可依相同逻辑重新指向CPU系统内存。
当围篱值被写入一CPU地址空间且操作系统的进阶排程器在处理其它动作时,则具有复数同步配置,其包括GPU对CPU同步操作,但并非用以限定本发明。上述有关硬件单元之GPU命令亦支持这样的同步基元。该配置亦可经由进阶排程器应用在内GPU,如微软文件″Parallel Engines support inthe LDDM Basic Scheduling model″所述。同步的另一不同点系为内GPU同步,其中多个GPU可在彼此间使用屏障同步而不需要CPU的干涉。该配置可利用GPU硬件中的特殊配置,亦可支持一系统接口(例如,PCI-E)。需注意到,多重GPU-CPU系统的实体实现可根基于PCI-E总线和/或任何其它提供多重GPU-CPU互动的接口。
二个以上GPU的同步
藉由一内部同步命令来实现之本程序可提供在多重GPU配置中之同步的技术,除了根据不同GPU的地址具有重新指向内存/同步缓存器写入的接口能力外。图6显示具有芯片组之GPU架构的示意图。特别的是,多重GPU驱动器616可发送多个命令串流给任一GPU。在图6中,多重GPU驱动器616可发送命令串流0给GPU A的局部内存602。同样的,命令串流1被发送至GPU B 604,命令串流2被发送至GPU C 606,以及命令串流3被发送至GPU D 608。每一GPU 602~608可经由PCI-E内存重指向逻辑单元612发送一围篱/等待失误给CPU芯片组610,并且自CPU芯片组610接收重指向内部围篱。CPU芯片组610亦可发送一先进排程器围篱和/或一先进排程器等待给CPU系统内存614。
虽然可使用多种架构拓墣的任何一种,接下来将描述可使用在多重GPU配置中之三种类型的GPU同步架构拓扑。详细来说,可使用一连结类型(Jointype)(多程序-单一消费者)架构拓扑,可使用一分支类型(Fork type)(单一程序-多消费者)架构拓扑,以及可使用一连接-分支类型(多程序-多消费者)架构拓扑。上述架构拓扑可利用一内部同步命令与CSP硬件来进行同步,然而,其并非是必须的,亦可使用其它类型的接线与代符同步。
当多个GPU达到执行命令串流中之某一点(屏障)且另一GPU利用多个GPU产生之数据开始执行一命令串流时,即表示为连接类型同步机制,如图7所示。
图7显示图6之多重GPU系统间之连结类型同步的示意图。特别的是,执行于GPU A 702、GPU B 704与GPU C 706上之二个平行GPU处理(上下文)可产生使用于第四GPU程序的数据,其中该第四GPU程序是执行于GPUD 710之上。GPU A 702、GPU B 704与GPU C 706可用来执行影像输出和/或一般目的(GP)计算以及产生数据,其中该数据利用触发命令520将数据写入内存中,触发命令520导致内部缓冲被清除(Flush)且内存可被消费器GPU存取。GPU D 710包括一上下文,假设GPUA、B、C完成写入内存表面,则当内存中的数据有效时该上下文可被启始。
在GPU D 710同步缓存器区块中,该驱动器可分别配置GPU A 702、GPUB 704与GPU C 706的三对围篱/等待缓存器712、714与716,并且将上述缓存器映像至GPU D 710上下文地址空间中。在GPU A 702、GPU B 704、GPUC 706与GPU D 710之每一上下文命令串流中,该驱动器可插入一围篱命令,该围篱命令指向GPU D 710地址空间所需之围篱/等待对。围篱命令718在触发命令720之后执行,以将缓冲至内存的GPU内容清除掉。此外,在GPU D710的命令串流缓冲器中,驱动器可插入具有CSP区块识别码之内部等待命令,并且指向配置给GPU A 702、GPU B 704、GPU C 706与GPU D 710之一所需缓存器对。
该等待命令可拖延执行GPU D 710的上下文,直到围篱值712、714与716到达GPU D 710同步缓存器区块中已配置好的围篱缓存器。此外,当在上述前三个GPU(GPU A 702、GPU B 704与GPU C 706)中之所有三个上下文达到GPU D 710开始处理命令与数据串流的时间点时,执行于多个GPU之围篱与等待命令的组合可产生一同步屏障708。这样的解决方案是在自旋三个等待命令(722、724与726)后发生,上述三个等待命令将他们的值与围篱缓存器的内容相比较,其可藉由其它GPU来写入。
图8显示图6之多重GPU系统之分支类型(Fork Type)同步的示意图。特别的是,分支类型同步机制假设多个GPU使用单一GPU所产生的数据。由一产生器(例如,GPU A 802)产生的数据可给多个平行执行的消费器(例如,GPU B 804、GPU C 806与GPU D 808)使用。
如图8所示,执行于GPU B 804、GPU C 806和/或GPU D 808上之三个平行GPU程序(上下文)可消耗掉由执行于GPU A 802上之第四个程序所产生的数据。GPU A 802包括一上下文,其产生在一程序(上下文)中最先开始执行的数据。其它三个GPU(804、806与808)可等到该数据写入到内存中再开始执行。当数据有效时,GPU B 804、GPU C 806和/或GPU D 808可开始执行他们的上下文。
在GPU B 804、GPU C 806和/或GPU D 808 MXU中,该驱动器可配置三对围篱/等待缓存器于同步缓存器区块中,其可用来自GPU A 802接收一围篱值。在GPU A 802之上下文命令串流缓冲器中,该驱动器可插入带有一相似值之三个内部围篱命令,该相似值指向GPU B 804、GPU C 806和/或GPUD 808地址空间中之所需围篱/等待对。该围篱命令可在触发命令后执行,以清除内存中之GPU 0之相关缓冲内容。
在GPU B 804、GPU C 806和/或GPU D 808的命令串流缓冲器中,该驱动器可插入具有CSP区块识别码的内部等待命令,并且指向配置在GPU B804、GPU C 806和/或GPU D 808之MXU中之所需缓存器对以与GPU A 802进行同步。该等待命令可拖延执行GPU B 804、GPU C 806和/或GPU D 808的上下文,直到来自GPU A 802之符合的内部围篱到达配置好之GPU B 804、GPU C 806和/或GPU D 808的MXU围篱缓存器。当GPU B 804、GPU C 806和/或GPU D 808中的所有三个上下文开始同步处理,且当要被存取之数据区块已经就绪时,执行于GPU A 802之围篱命令组合可产生一同步屏障。
图9显示图6之多GPU系统之连结-分支类型(Join-Fork Type)同步的示意图。特别的是,连结-分支类型同步机制假设第一组GPU可使用第二组GPU产生的数据。数个以平行方式执行的消费器可利用数个产生器所产生的数据。
如图9所示,多个执行于第一组GPU(GPU C 906与GPU D 908)之平行GPU程序(上下文)消耗可由执行于第二组GPU(GPUA 902与GPU B 904)之程序产生的数据。GPU A 902与GPU B 904相关之上述上下文可产生使上述程序(上下文)的数据,上述程序可能先开始执行。GPU C 906与GPU D 908可等待欲写入内存中的数据。当该数据有效时,GPU C 906与GPU D 908可开始执行他们的上下文。
在相关于GPU C 906与GPU D 908的MUX中,该驱动器可配置复数对围篱/等待缓存器,用以接收来自GPU A 902与GPU B 904之一内部围篱命令。在GPU A 902与GPU B 904中,一上下文命令串流可缓冲该驱动器,且可插入复数内部围篱命令,其中上述内部围篱命令指向GPU C 906与GPU D 908之地址空间中之一所需围篱/等待对。该围篱命令可在触发命令后执行,以清除内存中之GPU A 902与GPU B 904之相关缓冲内容。
在GPU C 906与GPU D 908的命令串流缓冲器中,该驱动器可插入带有CSP区块识别码之内部等待。该驱动器亦可指向配置在相关于GPU C 906与GPU D 908之MXU中的缓存器对,以与GPU A 902与GPU B 904进行同步操作。该等待命令可拖延执行GPU C 906与GPU D 908的上下文,直到分别来自GPU A 902与GPU B 904之符合的内部围篱到达。当GPU A 902与GPUB 904中之二个上下文可到达GPU C 906与GPU D 908开始处理他们自己的命令的点,则执行于多个GPU上之围篱与等待命令的组合可产生一同步屏障。此外,在自旋二个等待命令后,GPU C 906与GPU D 908可开始处理数据串流。
需注意到,图9之硬件组件不限于使用四个GPU。熟习本领域之技艺人士可了解,上文所述的管线可应用于任何的GPU配置方式。此外,当上述所述的同步机制有助于多重GPU间的同步操作,且至少一配置方式可用来管理全部的GPU工作负载和/或执行于系统中之多上下文与执行绪。
相较于仅使用单一GPU,第7~10图所述之多重GPU的配置可实现较平顺的同步效能,其主动且等待屏障同步数据与命令。拖延GPU可能会导致严重的潜在影响,其可能会影响使用多机器以增加效能。在使用上下文切换与自旋等待之多上下文GPU的实施例中,GPU具有额外的电路以支持屏障类型同步,其中该上下文暂时悬置在自旋等待状态中。
图10显示本发明实施例之多个GPU上下文与局部GPU排程器(Scheduler)的示意图。局部GPU任务队列1026包括应用执行清单(Application Run List)A 1002,其包括一或多个上下文1004a、1004b与1004m,其中1004m表示应用执行清单A 1002具有任意数目的上下文。同样的,局部GPU任务队列1026包括应用执行清单B,其包括一或多个上下文1008a、1008b与1008m。局部GPU任务队列1026可将应用执行清单A 1002与1006的数据发送至局部GPU上下文排程器1010。局部GPU上下文排程器1010可经由上下文切换将至少一部分数据传送给GPU 1028。
在图11之上下文/多GPU的配置中,同步要求包括内上下文屏障同步与内GPU屏障同步。图11包括多个上下文1104a~1104h以及1104w~1104z,亦包括多个执行清单1102a、1102b、1102r、1102s。GPU 1108a与1108t之局部执行清单与上下文执行控制区块1106a与1106t提供上述类型同步的管理方式。本发明实施例除了可同步单一上下文的GPU,更可同步多上下文的GPU,其藉由切换与监看来以保证可在预期时间间隔内完成。此外,部分上下文并非在″执行″状态,且GPU可接收寻址给悬置上下文之围篱值。
为了支持屏障同步功能,区部GPU执行控制单元1106可维护与监视每一上下文状态。上述同步的上下文状态包括下述稳定状态,其中:
1)″执行(Running)状态″,当上下文正在GPU管线中执行;
2)″空缺(Empty)状态″,当上下文没有命令可供执行且命令取得头端指标具有与命令写入尾端指标(command write tail pointer)相同的值;
3)″就绪(Ready)状态″,当上下文已准备好被执行;以及
4)″悬置(Suspended)状态″,当上下文因悬置码缓存器中的任何原因自执行中被悬置。
有多个描述待处理上下文储存(pending context save)与待处理上下文回复(pending context restore)之中间或过渡状态。上述状态需要支持在过渡中之上下文的屏障同步操作。此外,图12中的特殊状态机提供改变上下文状态,其可根据某些事件、局部排程器和/或条件同步命令来改变状态。
图12系显示图11之GPU上下文的不同状态与根据内部与外部事件改变状态的流程示意图。特别的是,图12包括上下文状态的四个主要稳定阶段,包括″执行状态″1232、″空缺状态″1234、″就绪状态″1236与″悬置状态″1238。另外还有二个中间状态,包括″待处理储存状态″1240与″待处理回复状态″1242,其可用来表示上下文状态加载与储存的程序。″执行状态″1232表示一上下文目前正在GPU管线中执行。在一标头指标到达尾端且串流中没有多的命令可处理时,该状态会改变。另一个原因为″悬置状态″1238是依据设定悬置码的事件而定。″空缺状态″1234表示该上下文不做任何事,且当加载关联于上下文缓存器区块之一新的上下文时会被删除。若CPU更新所有的尾指标,该CPU会回到″就绪状态″1236且可在任意时间重新启动。空缺上下文会导致自动切换该上下文且将该状态储存在内存中,然后改变为悬置状态。
″就绪状态″1236表示该上下文根据优先权或上下文切换程序的顺序,可由局部排程器在任何时间启动之。若该上下文处于位于状态缓存器中之警戒状态1244,则该上下文在重新开始前会进行检查。若不满足同步条件,则该上下文会回到″悬置状态″1238。″悬置状态″1238表示该上下文等待满足某些条件时会进入就绪或开始执行。当内部事件或外部讯息的结果满足条件后会令该上下文进入″就绪状态″1236。″待处理储存状态″1240与″待处理回复状态″1242为″执行状态″1232与″悬置状态″1238间的暂时中间状态。当发生存取内存映像缓存器时会发生上述状态,其可储存在内存和/或GPU中。
多GPU之多上下文同步操作
图13显示本发明实施例之在四GPU之多系统中之同步处理的示意图,其中一个GPU最多包括K个上下文,其类似于图9。K为任意数,但在本实施例中,K至少为4~16间的任意数。在二个执行清单的实施例中,则为二倍的K。此外,该围篱命令可写入在一GPU(执行中的上下文)与一内存(其它上下文)中之同步缓存器区块中,且可执行以减少写后读取(Write AfterRead,WAR)/写后写入(Write After Write,WAW)危险的机会。
如图13所示,多重上下文GPU A 1302包括一同步缓存器区块、多个上下文状态区块以及多个上下文指标。GPU A 1302可经由一缓冲器取回来执行关联于一预设上下文(例如,图13所示之上下文1)之上下文直接内存存取(Direct Memory Access,DMA)缓冲器。此外,相关于同步缓存器的上下文可回存至区块缓存器和/或储存至上下文内存空间配置的4K位红分页。同样的,其它GPU具有相同的功能。根据内部和/或外部事件,GPU A 1302可自上下文0切换到上下文1。在本实施例中,上下文状态相关数据系储存在配置给上下文状态的内存空间中。该同步缓存器区块对执行上下文来说是很重要的,且可储存在特定的内存空间中,其系为上下文状态数据空间的一部分。在储存上下文0状态与同步缓存器数据后,新的上下文1状态与同步缓存器数据可加载到GPU A中。在上载后,GPU A利用自配置给该上下文之DMA缓冲器取得的命令开始执行上下文1。
以与GPU A平行的方式执行之GPU B执行不同的上下文L+1,并且切换回执行相同程序的上下文L,同时GPU A储存上下文L+1状态与同步缓存器内容。具有同步缓存器内容之上下文L状态数据可回存至GPU B且可开始自上下文内存空间中之关联DMA缓冲器取得上下文L命令。当在执行目前上下文时,一或多个GPU以下述状况将围篱数据写入其它上下文。
1)围篱写入(管理同步之常态内部围篱,如第2、3图所示);
2)围篱写入至拥有的悬置上下文或另一GPU;
3)围篱写入至另一GPU之执行中上下文;
4)围篱写入至悬置中的上下文(储存中);以及
5)围篱写入至启动中的上下文(回复中)。
上述范围包括特殊处理,其系由CPU硬件状态机所提供,如图15所示。围篱写入监控(如图15所示)可用来提供在不同上下文与执行清单间之多重GPU-多重上下文的环境下进行同步。为了提供上述监控功能,可在GPU之一或多个上下文中利用一特殊地址范围缓存器,以及内存存取单元中的比较逻辑单元。若预期的围篱写入内存中的同步缓存器区块,则该比较逻辑单元会导致改一特定上下文的状态。
图14显示本发明实施例之利用GPU执行多重上下文同步与在多重上下文间进行同步的示意图,其类似于图13。特别的是,如图14所示,GPU C 1406可围篱写入至悬置的上下文,其系位于同步缓存器1414之4K字节的空间中。同样的,GPU D 1408可将要回复的上下文围篱写入至GPU C 1406中的同步缓存器区块。为了支持上述实施例,GPU可安装特殊的逻辑单元,其可用来持有屏障同步命令地址与数据,直到上下文到达完成一储存或回存程序之一稳定状态。
一般来说,CPU可被程序化以控制上下文排程与在GPU中执行。在实现GPU时可利用有效应用工具,例如利用揭露于“Method and apparatus forcontext saving and restoring in interruptible GPU”、“Context switching methodand apparatus in interruptible GPU running multiple applications”与“Graphicspipeline precise interrupt implementation method and apparatus”中的方法。
图15显示屏障命令处理中之步骤的流程示意图。特别的是,GPU可侦测另一GPU和/或CPU至任一GPU上下文之外部围篱(步骤1502)。与GPU上下文缓存器区块中之上下文同步区块地址1324相比较,在侦测GPU内存空间与地址的外部写入后,GPU可检查相符的上下文状态(步骤1504)。若一程序正在执行,GPU可直接写入一选择的缓存器至MXU中(步骤1506),并且恢复侦测外部围篱写入至任意GPU上下文(步骤1502)。
在步骤1504中,若侦测到一待处理上下文回复/加载状态而得知有一符合上下文,则GPU会等待直到一相关上下文载入的终端(步骤1508)。在同步区块加载的终端,GPU直接写入MXU中之选择的同步缓存器(步骤1510)。GPU接着开始执行一加载上下文(步骤1512)。GPU接着恢复侦测一外部围篱写入任意GPU上下文(步骤1502)。
在步骤1504中,若侦测到一待处理上下文储存,GPU可等待直到一上下文储存的终端(步骤1514)。在同步区块储存的终端,GPU可写入至内存中之同步缓存器区块位置(步骤1516)。GPU逻辑单元可重新侦测任意GPU上下文之外部围篱(步骤1502)。换句话说,若GPU已准备就绪和/或在等待悬置中,GPU可写入至内存中之同步缓存器区块位置(步骤1516)。GPU逻辑单元可重新侦测任意GPU上下文之外部围篱。
图16显示本发明实施例之结合至少一执行清单之上下文区块缓存器的示意图,其类似于图10之执行清单。特别的是,图16包括一上下文状态缓存器1602、一上下文切换配置缓存器1604、一定时器模式缓存器1606以及一自旋等待计数器缓存器1608,其亦包括一上下文时间片段计数器缓存器1610、一DMA缓冲器头端指标1613、一DMA缓冲器尾端指标1614以及一上下文同步区块地址1616。上下文同步区块地址缓存器可设置在内存存取单元中。
如上文所述,上下文状态缓存器1602包括执行1618之状态位屏蔽、空缺1620、就绪1622、悬置1624以及待处理储存1628,该类别中亦包括待处理回复1630。上下文优先权层级1611与悬置状态码1613亦包括在上下文状态缓存器1602中。上下文切换配置缓存器1604包括一事件屏蔽用以定义上下文管理为以下事件,自旋等待定时器终止1615、到达管线区块之等待代符1617、时间片段定时器终止1619以及当MXU电路侦测到一写入至GPU之上下文之同步区块地址之监控事件。其它事件亦可用来侦测上下文状态管理逻辑单元。定时器模式缓存器1606可控制上下文切换模式,其定义了一自旋等待代符和/或自旋等待定时器以产生一切换事件。该缓存器亦可根据上下文切换模式而致能(Enable)和/或除能(Disable)一时间片段。自旋等待监看(Watchdog)定时器1608向下计数,其当接收到一等待命令时开始计数,且当数据不符合同步缓存器区块中的数据时开始自旋。当时间计数终止时,自旋等待计数器缓存器1608执行一上下文切换事件,若未计数终止则由上下文切换配置缓存器1604执行该上下文切换事件。当时间片段计数终止时,则上下文时间片段计数器缓存器1610切换上下文。亦可利用时间片段计数器以自目前执行于GPU管线中之上下文的可能作法回复。
此外,DMA缓冲器头端指标1612可保持命令串流之上下文的目前取得地址,同时DMA缓冲器尾端指标1614可传递在该命令串流终端的地址。该上下文同步区块地址可进行围篱监控。当在至少其中一配置中,若允许上下文的总数为16,则所有的上下文可分群为2个执行清单,每一执行清单包括8个上下文,或者分为4个执行清单,每一执行清单包括2个上下文。上述上下文亦可分为基数群。上下文同步区块地址缓存器1616可提供用以监听任意写入至GPUGPU视讯内存的地址,并且在侦测外部围篱写入至内存映像同步缓存器区块时产生上下文状态改变事件。
图17显示本发明实施例之多重上下文GPU之上下文管理的示意图,其系有关定时器与监控事件。上下文状态管理逻辑区块1702可由专用硬件单元或可程序精简指令集运算(Relegate Important Stuff to the Compiler,RISC)核心来实现,其可支持命令串流处理器。上下文状态管理区块1702可管理目前正在执行之上下文的状态,亦可管理其它映射至一适当上下文缓存器集合的状态。上下文状态管理逻辑区块1702接收来自自旋/等待与时间片段监看计数器1704的信号、一等待代符到达信号和/或来自时间片段计数器1706的信号。上下文状态管理逻辑区块1702可与目前正在执行之上下文缓存器通讯,上述缓存器包括上下文状态缓存器1708与上下文切换配置缓存器1709。当发生监控或其它事件时,若另一上下文接收到外部存取,则上下文状态管理逻辑区块1702选择该上下文缓存器,其藉由内存存取单元中的比较逻辑单元来监控。当外部代理者写入至其中一GPU上下文之一缓存器空间时,则另一类型的监控事件是由总线接口单元(BIU)1710来产生。MMIO缓存器地址译码逻辑单元1712产生一旗号,该旗号亦可转换为上下文数目以与上下文状态管理逻辑区块1702通讯。用于事件选择之上下文状态缓存器1708或目前上下文可根据上下文切换配置缓存器1709的内容来读取与更新,其包括在特定上下文中之每一类型事件的动作指令。
图17中更包括一内存存取单元1720,其包括一围篱地址与数据缓冲器1722,用以接收一监控事件与控制数据并且写入至内存和/或一同步缓存器。为了支援非封锁多围篱写入,围篱地址与数据缓冲器1722可被转换为先进先出(First In First Out,FIFO)类型的队列。内存存取单元1720亦包括相关于一或多个上下文之同步地址范围1724。数据可沿着内存写入地址发送至一编码器,其可对接收的数据编码并且将数据发送至上下文状态管理逻辑区块1702。
图18显示本发明实施例之上下文状态管理逻辑单元之状态机的示意图。如图所示,事件侦测循环(步骤1802)可继续执行循环直到侦测到一事件。若侦测到一监控事件,该上下文状态管理逻辑单元检查编码后之上下文状态(步骤1804)。若该上下文目前正在执行,该上下文状态管理逻辑单元写入闩锁数据(Latched Data)至一同步缓存器(步骤1806),且该上下文状态管理逻辑单元可回到该事件侦测循环(步骤1802)。在步骤1804中,若该上下文在″就绪″状态,则该上下文状态管理逻辑单元可根据一定义缓存器设定一监控旗标与执行操作(步骤1808),并且根据一定义缓存器执行动作(步骤1810)。该程序接着回到该事件侦测循环(步骤1802)。
在步骤1804中,若该上下文状态管理逻辑单元判断编码上下文在悬置状态,则可设定警示旗标与密码(步骤1811),且设定该上下文为就绪状态(步骤1812)。接着该程序回到该事件侦测循环(步骤1802)。在步骤1804中,若该上下文状态管理逻辑单元判断编码上下文在空缺状态,则可设定该警示旗标与密码(步骤1814),且产生CPU中断(步骤1816)。若该上下文在待处理储存状态,该上下文状态管理逻辑单元可排队等候一地址与数据(步骤1818),等待直到储存(步骤1820),并且写入排队的数据至内存(步骤1822)。若该上下文在一待处理回复状态,该上下文状态管理逻辑单元可排队等候一地址与数据(步骤1824),等待直到回覆(步骤1826),并且写入排队的数据至一同步缓存器(步骤1828)。接着该程序回到该事件侦测循环(步骤1802)。
若在事件侦测循环中(步骤1802),一等待代符到达,侦测到一自旋等待和/或侦测到一时间片段时,可终止执行目前的上下文(步骤1830),并且将目前状态设成″待处理储存″状态(步骤1832)。接着,储存该目前上下文(步骤1834)。若侦测到一时间片段,该目前上下文可设为″就绪″状态(步骤1836),且该上下文状态管理逻辑单元可利用一定义缓存器切换到新的上下文(步骤1838)。在储存目前上下文后(步骤1834),若接收到一自旋等待或等待代符,则将该上下文设为″悬置″状态并且发布一″等待″码(步骤1840)。该上下文状态管理逻辑单元接着利用一定义缓存器切换到新的上下文(步骤1838)。接着该程序回到该事件侦测循环(步骤1802)。
本发明更提供一种记录媒体(例如光盘片、磁盘片与抽取式硬盘等等),其记录一计算机可读取之计算机程序,以便执行上述之支持复数绘图处理器之互动的方法。在此,储存于记录媒体上之计算机程序,基本上是由多数个程序代码片段所组成的(例如建立组织图程序代码片段、签核窗体程序代码片段、设定程序代码片段、以及部署程序代码片段),并且这些程序代码片段的功能系对应到上述方法的步骤与上述系统的功能方块图。
虽然本发明已以较佳实施例揭露如上,然其并非用以限定本发明,任何熟习此技艺者,在不脱离本发明之精神和范围内,当可作各种之更动与润饰,因此本发明之保护范围当视后附之申请专利范围所界定者为准。

Claims (17)

1.一种支持多个绘图处理器的互动的系统,包括:
一上下文状态缓存器,其用以发送有关至少一上下文之一状态的数据;
一上下文切换配置缓存器,其用以发送有关至少一上下文之至少一事件的多个指令;
一上下文状态管理逻辑单元,耦接于该上下文状态缓存器与该上下文切换配置缓存器,用以接收有关该至少一上下文之该状态之该数据与自该上下文切换配置缓存器接收该多个指令,并且根据该多个指令执行一动作;以及
一内存存取单元,其用以发送一监控事件至该上下文状态管理逻辑单元,以及自该上下文状态管理逻辑单元接收控制数据,
其中,该内存存取单元更包括结合多个比较逻辑单元之多个上下文同步地址范围缓存器,其中该多个上下文同步地址范围缓存器对应该至少一上下文,该多个比较逻辑单元接收一内存写入地址与产生一监控事件。
2.如权利要求1所述的支持多个绘图处理器的互动的系统,其中,该上下文状态缓存器更持有与接收有关该至少一上下文之该状态的该数据。
3.如权利要求1所述的支持多个绘图处理器的互动的系统,更包括:
一总线接口单元,包括用以解码该上下文状态缓存器之一地址与产生一缓存器更新事件旗号的逻辑单元;以及
一编码器,用以产生一相关上下文编号以发送至该上下文状态管理逻辑单元,以及在执行一内存写入操作后定义一上下文号码。
4.如权利要求1所述的支持多个绘图处理器的互动的系统,其更包括一自旋等待监控计数器,用以当该自旋等待监控计数器倒数终止后,开始执行一上下文切换事件。
5.如权利要求1所述的支持多个绘图处理器的互动的系统,其更包括一时间片段计数器,用以当该时间片段终止后,开始执行一上下文切换事件。
6.如权利要求1所述的支持多个绘图处理器的互动的系统,其中,该内存存取单元更将数据写入到一内存与一同步缓存器区块之至少其中之一。
7.一种用于权利要求1所述的支持多个绘图处理器的互动的系统的方法,包括下列步骤:
侦测有关一上下文之一事件;以及
根据侦测到之该事件判断该事件包括一等待代符(Wait Token)、一自旋等待与一时间片段之至少其中之一,以及根据侦测到的该事件执行下列步骤:
停止执行一目前上下文;
将该目前上下文之状态设定为一待处理储存状态;以及
利用一动作定义缓存器切换至一新上下文。
8.如权利要求7所述的方法,更包括根据侦测到之该事件判断该事件包括一等待代符、一自旋等待与一时间片段之至少其中之一,并且根据侦测到之该事件储存该目前上下文。
9.如权利要求8所述的方法,更包括根据侦测到之该事件判断该事件包括一时间片段,并且根据侦测到之该事件设定该目前上下文为一就绪状态。
10.如权利要求8所述的方法,更包括根据侦测到之该事件判断该事件包括一自旋等待与一等待代符之至少其中之一,以及根据侦测到之该事件设定该目前上下文为具有一悬置码之一悬置状态。
11.如权利要求8所述的方法,更包括根据侦测到之该事件判断该事件为一监控事件,以及根据侦测到之该事件决定有关该上下文之一状态。
12.如权利要求11所述的方法,更包括判断该状态为一执行状态,并且将缓冲数据写入至一同步缓存器区块。
13.如权利要求11所述的方法,更包括判断该状态为一就绪状态,并且设定一监控旗标,以及执行由一动作定义缓存器定义之一动作。
14.如权利要求11所述的方法,更包括判断该状态为一悬置状态,并且设定一警示旗标与密码,以及设定该上下文状态为一就绪状态。
15.如权利要求11所述的方法,更包括判断该状态为一空缺状态,设定一警示旗标与密码,以及产生一中央处理单元中断命令。
16.如权利要求11所述的方法,更包括判断该状态为一待处理储存状态,缓冲一地址与数据,以及写入缓冲数据至一内存。
17.如权利要求11所述的方法,更包括判断该上下文状态为一待处理回复状态,缓冲一地址与数据,以及在回复该上下文后写入缓冲数据至一同步缓存器。
CN200910222132.8A 2008-11-06 2009-11-06 支持多个绘图处理器的互动的方法与系统 Active CN101877120B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/266,078 US8082426B2 (en) 2008-11-06 2008-11-06 Support of a plurality of graphic processing units
US12/266,078 2008-11-06

Publications (2)

Publication Number Publication Date
CN101877120A CN101877120A (zh) 2010-11-03
CN101877120B true CN101877120B (zh) 2013-07-24

Family

ID=42132915

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200910222132.8A Active CN101877120B (zh) 2008-11-06 2009-11-06 支持多个绘图处理器的互动的方法与系统

Country Status (3)

Country Link
US (1) US8082426B2 (zh)
CN (1) CN101877120B (zh)
TW (1) TWI428763B (zh)

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100141664A1 (en) * 2008-12-08 2010-06-10 Rawson Andrew R Efficient GPU Context Save And Restore For Hosted Graphics
US8405666B2 (en) 2009-10-08 2013-03-26 Advanced Micro Devices, Inc. Saving, transferring and recreating GPU context information across heterogeneous GPUs during hot migration of a virtual machine
US9798548B2 (en) 2011-12-21 2017-10-24 Nvidia Corporation Methods and apparatus for scheduling instructions using pre-decode data
US20130191572A1 (en) * 2012-01-23 2013-07-25 Qualcomm Incorporated Transaction ordering to avoid bus deadlocks
US9626216B2 (en) 2012-05-09 2017-04-18 Nvidia Corporation Graphics processing unit sharing between many applications
US9582276B2 (en) * 2012-09-27 2017-02-28 Apple Inc. Processor and method for implementing barrier operation using speculative and architectural color values
US8941676B2 (en) * 2012-10-26 2015-01-27 Nvidia Corporation On-chip anti-alias resolve in a cache tiling architecture
US9064437B2 (en) * 2012-12-07 2015-06-23 Intel Corporation Memory based semaphores
US9361116B2 (en) * 2012-12-28 2016-06-07 Intel Corporation Apparatus and method for low-latency invocation of accelerators
US9417873B2 (en) 2012-12-28 2016-08-16 Intel Corporation Apparatus and method for a hybrid latency-throughput processor
US10140129B2 (en) 2012-12-28 2018-11-27 Intel Corporation Processing core having shared front end unit
US10346195B2 (en) 2012-12-29 2019-07-09 Intel Corporation Apparatus and method for invocation of a multi threaded accelerator
JP6152034B2 (ja) * 2013-03-22 2017-06-21 株式会社Screenホールディングス ラベリング方法、ラベリング装置および欠陥検査装置
US9612994B2 (en) * 2013-09-18 2017-04-04 Nvidia Corporation Snoop and replay for completing bus transaction
FR3021432B1 (fr) * 2014-05-20 2017-11-10 Bull Sas Processeur a instructions conditionnelles
US9760511B2 (en) * 2014-10-08 2017-09-12 International Business Machines Corporation Efficient interruption routing for a multithreaded processor
US20170300329A1 (en) * 2014-11-11 2017-10-19 Renesas Electronics Corporation Instruction execution control system and instruction execution control method
CN104778082B (zh) * 2015-03-25 2018-04-24 小米科技有限责任公司 开放式图形库操作的处理方法和装置
US9977968B2 (en) * 2016-03-04 2018-05-22 Xerox Corporation System and method for relevance estimation in summarization of videos of multi-step activities
CN106649037B (zh) * 2016-12-08 2019-04-23 武汉斗鱼网络科技有限公司 一种gpu任务完成状态的判断方法及装置
CN108269224B (zh) * 2017-01-04 2022-04-01 意法半导体股份有限公司 可重新配置的互连
US20180189641A1 (en) 2017-01-04 2018-07-05 Stmicroelectronics S.R.L. Hardware accelerator engine
US11353868B2 (en) * 2017-04-24 2022-06-07 Intel Corporation Barriers and synchronization for machine learning at autonomous machines
US10459751B2 (en) * 2017-06-30 2019-10-29 ATI Technologies ULC. Varying firmware for virtualized device
CN110580238A (zh) * 2018-06-11 2019-12-17 Arm有限公司 数据处理系统中的硬件单元的同步
US11200063B2 (en) * 2018-09-27 2021-12-14 Intel Corporation Graphics engine reset and recovery in a multiple graphics context execution environment
CN110308992B (zh) * 2019-06-24 2022-12-27 中国航空无线电电子研究所 面向多分区的gpu访问管理方法
US11593609B2 (en) 2020-02-18 2023-02-28 Stmicroelectronics S.R.L. Vector quantization decoding hardware unit for real-time dynamic decompression for parameters of neural networks
CN111538580B (zh) * 2020-04-23 2024-01-05 苏州大学 一种嵌入式实时操作系统的线程信号操作方法与系统
US11531873B2 (en) 2020-06-23 2022-12-20 Stmicroelectronics S.R.L. Convolution acceleration with embedded vector decompression
US11892972B2 (en) * 2021-09-08 2024-02-06 Arm Limited Synchronization mechanisms for a multi-core processor using wait commands having either a blocking or a non-blocking state

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5428779A (en) * 1992-11-09 1995-06-27 Seiko Epson Corporation System and method for supporting context switching within a multiprocessor system having functional blocks that generate state programs with coded register load instructions
US6782432B1 (en) * 2000-06-30 2004-08-24 Intel Corporation Automatic state savings in a graphics pipeline
CN1912926A (zh) * 2005-11-10 2007-02-14 威盛电子股份有限公司 可中断图形处理单元处理多个程序的方法和图形处理单元
CN1916962A (zh) * 2005-11-10 2007-02-21 威盛电子股份有限公司 存储和回存状态上下文在图形处理单元的方法和装置
US7444641B1 (en) * 1998-03-10 2008-10-28 Agere Systems Inc. Context controller having context-specific event selection mechanism and processor employing the same

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5299309A (en) * 1992-01-02 1994-03-29 Industrial Technology Research Institute Fast graphics control system capable of simultaneously storing and executing graphics commands
US5430841A (en) * 1992-10-29 1995-07-04 International Business Machines Corporation Context management in a graphics system
US5559988A (en) * 1993-12-30 1996-09-24 Intel Corporation Method and circuitry for queuing snooping, prioritizing and suspending commands
KR100303085B1 (ko) * 1998-04-24 2001-09-24 전주범 이진형상신호부호화장치및방법
US7007151B1 (en) * 2000-10-04 2006-02-28 Nortel Networks Limited System, device, and method for controlling access to a memory
WO2003005219A2 (en) * 2001-06-29 2003-01-16 Koninklijke Philips Electronics N.V. Multiprocessor system and method for operating a multiprocessor system
US6917362B2 (en) * 2002-01-25 2005-07-12 Hewlett-Packard Development Company, L.P. System and method for managing context data in a single logical screen graphics environment
US7421694B2 (en) * 2003-02-18 2008-09-02 Microsoft Corporation Systems and methods for enhancing performance of a coprocessor
US20050289551A1 (en) * 2004-06-29 2005-12-29 Waldemar Wojtkiewicz Mechanism for prioritizing context swapping
US7320063B1 (en) * 2005-02-04 2008-01-15 Sun Microsystems, Inc. Synchronization primitives for flexible scheduling of functional unit operations
US20060146864A1 (en) * 2004-12-30 2006-07-06 Rosenbluth Mark B Flexible use of compute allocation in a multi-threaded compute engines
US7526579B2 (en) * 2005-01-27 2009-04-28 Innovasic, Inc. Configurable input/output interface for an application specific product
US7516311B2 (en) * 2005-01-27 2009-04-07 Innovasic, Inc. Deterministic microcontroller context arrangement

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5428779A (en) * 1992-11-09 1995-06-27 Seiko Epson Corporation System and method for supporting context switching within a multiprocessor system having functional blocks that generate state programs with coded register load instructions
US7444641B1 (en) * 1998-03-10 2008-10-28 Agere Systems Inc. Context controller having context-specific event selection mechanism and processor employing the same
US6782432B1 (en) * 2000-06-30 2004-08-24 Intel Corporation Automatic state savings in a graphics pipeline
CN1912926A (zh) * 2005-11-10 2007-02-14 威盛电子股份有限公司 可中断图形处理单元处理多个程序的方法和图形处理单元
CN1916962A (zh) * 2005-11-10 2007-02-21 威盛电子股份有限公司 存储和回存状态上下文在图形处理单元的方法和装置

Also Published As

Publication number Publication date
US8082426B2 (en) 2011-12-20
US20100115249A1 (en) 2010-05-06
TW201032064A (en) 2010-09-01
TWI428763B (zh) 2014-03-01
CN101877120A (zh) 2010-11-03

Similar Documents

Publication Publication Date Title
CN101877120B (zh) 支持多个绘图处理器的互动的方法与系统
CN101702231A (zh) 绘图处理单元同步系统与方法
CN101719262B (zh) 绘图处理单元以及元命令处理系统
CN1609812B (zh) 把协处理器中的操作制成流水线型操作的方法
CN102648449B (zh) 一种用于处理干扰事件的方法和图形处理单元
US10002031B2 (en) Low overhead thread synchronization using hardware-accelerated bounded circular queues
US7583268B2 (en) Graphics pipeline precise interrupt method and apparatus
US8004533B2 (en) Graphics input command stream scheduling method and apparatus
US9442755B2 (en) System and method for hardware scheduling of indexed barriers
US20070103475A1 (en) Interruptible GPU and method for processing multiple contexts and runlists
US9158595B2 (en) Hardware scheduling of ordered critical code sections
US9448803B2 (en) System and method for hardware scheduling of conditional barriers and impatient barriers
CN102077181A (zh) 用于在多核处理器中和在某些共享存储器多处理器系统中产生并输送处理器间中断的方法和系统
CN101894044A (zh) 用于调度协处理器的处理的方法和系统
CN103218329A (zh) 数字信号处理数据传输
US20080192063A1 (en) Managing Multiple Contexts in a Decentralized Graphics Processing Unit
JP3429631B2 (ja) 並列計算機システム
US10114650B2 (en) Pessimistic dependency handling based on storage regions
JP2002183750A (ja) レンダリングシステム及びレンダリング方法
WO2021061483A1 (en) Instruction processing apparatus, processor, and processing method for instruction ordering
US20050210172A1 (en) Processing real-time command information
US20040123073A1 (en) Data processing system having a cartesian controller
JPH0340169A (ja) 多重プロセツサシステムおよび複数の処理装置を制御する方法
US20130159684A1 (en) Batched replays of divergent operations
JP5328833B2 (ja) ダイレクトメモリアクセスシステム及びその制御方法

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