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

文档序号:6583693阅读:324来源:国知局
专利名称:支持多个绘图处理器的互动的方法与系统的制作方法
技术领域
本发明涉及关于一种绘图处理器(Graphics Processing Unit,以下简称为GPU), 且特别有关于一种支持多个GPU的互动的方法与系统。
背景技术
就计算机制作图形的发展而言,处理能力的需求愈见显著。传统上在利用单一中 央处理器(Central Processing Unit,以下简称为CPU)处理绘图指令时,许多图形软件可 利用额外的硬件来得到更好的效果。特别的是,由于处理能力的需求增加,可使用多重CPU 和(或)一 GPU。在计算机中使用GPU有助于在处理图形指令时更有效率。在使用GPU可 增加图形需求的同时,许多动态图形场景更适合利用多个GPU来绘制。在计算机环境中使 用一个以上的GPU时,可能需要对GPU进行同步化。以软件为基础的多重CPU同步机制已发展超过15年了。由于近年来发展之GPU 的本质,GPU具有串流类型架构(Stream Type Architecture),现有的多重CPU同步支持缺 少软件与硬件中所需的许多特性。协议控制数据快捷(ProtocolControl 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 警示 P160 警示等待162 进入队列164 警示回复166 屏障204 GPU 管线205 地址范围206 发送内部等待代符208 内存存取单元210a、210b 缓存器与比较逻辑单元214 发送写入确认216 产生内存数据读取/写入路径218 产生内存数据写入路径220 发送内部等待代符222 发送写入确认224 产生内存数据写入路径226 发送内部等待代符228 产生内存数据写入路径230 产生内存数据写入路径302 CSP FRONT304 EUP_F306 ZL1308 ZL2310 WBU312 CSPBACK314 虚拟分页表402 内部同步命令404 CSP前端围篱(外部)
406 内部或外部围篱/等待408 管线区块内部围篱或等待410 CSP后端或管线区块内部围篱412 内部围篱414 特权围篱416 CPU 中断(CSP 后端)418 等待420 非特权围篱422 非CPU中断502、530 GPU A504、532 GPU B506 地址范围A508 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 A704 GPU B706 GPU C708 同步屏障710 GPU D712 围篱 0714 围篱 1716 围篱 2
718 围篱命令
720 触发命令722 等待0命令724 等待1命令726 等待2命令802 GPUA804 GPUB806 GPUC808 GPUD810 同步屏障812 等待1命令814 围篱 1816 等待2命令818 围篱 2820 等待3命令822 围篱 3902 GPUA904 GPUB906 GPUC908 GPUD910 同步屏障914 等待2.0命令916 等待2.1命令918 等待3.0命令920 等待3.1命令1002 应用执行清单1004a. . 1004m 上下文1006 应用执行清单1008a. . 1008m 上下文1010 局部GPU上下文排程器1026 局部GPU任务队列1028 GPU1103a、1103c、1103w、1103y 上下文 T11103b、1103d、1103x、1103z 上下文 T21103e 上下文E1103f 上下文F1103g 上下文G1103h 上下文H1102a 执行清单A1102r 执行清单R
1102b 执行清单B1102s 执行清单S1106a 局 部执行清单与上下文执行控制区块1108a 具有包含在CPU任务空间内之视讯内存的GPU1106t 局部执行清单与上下文执行控制区块1108t 具有包含在CPU任务空间内之视讯内存的GPU1232 执 亍1234 空缺1236 就绪1238 悬置1240 待处理回复1242 待处理储存1244 检查同步条件1302 GPU A1310 上下文内存空间1502 侦测外部围篱至任一 GPU上下文1504 检查相符的上下文状态1506 写入选择的缓存器至MXU1508 等待直到相关上下文载入的终端1510 写入至MXU中选择的同步缓存器1512 开始执行加载上下文1514 等待直到上下文储存的终端1516 写入至内存中之同步缓存器区块位置1602 上下文状态缓存器1604 上下文切换配置缓存器1606 定时器模式缓存器1608 自旋等待计数器缓存器1610 上下文时间片段计数器缓存器1611 上下文优先权1612 DMA缓冲器头端指标1613 DMA缓冲器头端指标1614 DMA缓冲器尾端指标1615 自旋等待定时器1616 上下文同步区块地址16161617 等待代符1618 执行中1619 时间片段定时器1620 空缺1621 任意监控事件
1622 就绪1624 悬置1628 待处理储存1630 待处理回复1632 上下文监控旗标1646 上下文监控定义缓存器1702 上下文状态管理逻辑区块1704 自旋/等待监看计数器1706 时间片段计数器1708 上下文状态缓存器1709 上下文切换配置缓存器1710 总线接口单元1712 上下文之MMI0缓存器地址译码逻辑单元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。条件群组(ConditionGroup) 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不会执行后续操作并且进入睡眠阶 段(Slewing 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) 0 当储存在一对缓存器之围篱值等于或大于该等待命令提供之值,则可完成该写入操作。 特别比较逻辑单元(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 Report20"中。图2显示本发明实施例之实施于GPU管线中之一内部屏障同步之非限定范例的 示意图。特别的是,GPU管线204包括多个模块,用以描述管线中的不同点。管线模块H 可发送一内部等待代符(Wait Token) 206至内存存取单元208。映像至内存空间之缓存 器210a可发送一写入确认214至管线模块H,从而产生一内存数据读取/写入路径216。 当只有在等待代符值等于或大于围篱等待缓存器中之围篱值时,缓存器210a才可发送一 写入确认,其中该写入确认可由在管线之较晚阶段(De印er Stage)中的另一管线区块 (PipelineBlock)发送。同样的,管线模块I可发送一内部围篱代符216给缓存器210a(其可包括一对围 篱/等待缓存器(Fence/Wait Register)) 0在该缓存器接收该内部围篱代符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)ZLl、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内存映像 输入/输出(MMI0)空间。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同步之额外硬件特征。由于GPUA 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输入串流中,在绘制命令前 可插入内部等待命令,该等待命令可被插入以使用GPU A绘制的表面。在等待命令中的地 址可设置于GPU B围篱/等待缓存器区块的范围内,其中可执行实际围篱/等待同步操作。 此外,该系统可发送绘制命令,其可使用GPU A绘制的表面,如如输入至顶点着色器(Vertex Shader)或几何着色器(Geometry Shader)、深度_Z单元以及材质单元。需注意到,GPU A 串流中之围篱命令的区块识别码包括内存表面产生器(Producer)区块识别码(EUPF_ST0、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可发送多个命令串流给任一 GPU0在图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 程序(上下文)可消耗掉由执行于GPUA 802上之第四个程序所产生的数据。GPUA 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的数据
1发送至局部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, WAff)危险的机会。如图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 ininterruptible 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中,若侦测到一待处理上下文回复/加载状态而得知有一符合上下 文,则G PU会等待直到一相关上下文载入的终端(步骤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)。本发明更提供一种记录媒体(例如光盘片、磁盘片与抽取式硬盘等等),其记录一 计算机可读取之计算机程序,以便执行上述之支持复数绘图处理器之互动的方法。在此,储 存于记录媒体上之计算机程序,基本上是由多数个程序代码片段所组成的(例如建立组织 图程序代码片段、签核窗体程序代码片段、设定程序代码片段、以及部署程序代码片段),并 且这些程序代码片段的功能系对应到上述方法的步骤与上述系统的功能方块图。虽然本发明已以较佳实施例揭露如上,然其并非用以限定本发明,任何熟习此技 艺者,在不脱离本发明之精神和范围内,当可作各种之更动与润饰,因此本发明之保护范围 当视后附之申请专利范围所界定者为准。
权利要求
一种支持多个绘图处理器的互动的系统,包括一上下文状态缓存器,其用以发送有关至少一上下文之一状态的数据;一上下文切换配置缓存器,其用以发送有关至少一上下文之至少一事件的多个指令;一上下文状态管理逻辑单元,耦接于该上下文状态缓存器与该上下文切换配置缓存器,用以接收有关该至少一上下文之该状态之该数据与自该上下文切换配置缓存器接收该等指令,并且根据该等指令执行一动作;以及一内存存取单元,其用以发送一监控事件至该上下文状态管理逻辑单元,以及自该上下文状态管理逻辑单元接收控制数据。
2.如权利要求1所述的支持多个绘图处理器的互动的系统,其中,该上下文状态缓存 器更持有与接收有关该至少一上下文之该状态的该数据。
3.如权利要求1所述的支持多个绘图处理器的互动的系统,更包括一总线接口单元,包括用以解码该上下文状态缓存器之一地址与产生一缓存器更新事 件旗号的逻辑单元;以及一编码器,用以产生一相关上下文编号以发送至该上下文状态管理逻辑单元,以及在 执行一内存写入操作后定义一上下文号码。
4.如权利要求1所述的支持多个绘图处理器的互动的系统,其更包括一自旋等待监控 计数器,用以当该自旋等待监控定时器倒数终止后,开始执行一上下文切换事件。
5.如权利要求1所述的支持多个绘图处理器的互动的系统,其更包括一时间片段计数 器,用以当该时间片段终止后,开始执行一上下文切换事件。
6.如权利要求1所述的支持多个绘图处理器的互动的系统,其中,该内存存取单元更 包括结合多个比较器之多个同步地址缓存器,其中该等同步地址缓存器对应该至少一上下 文,该等比较器接收一内存写入地址与产生一监控事件旗号。
7.如权利要求1所述的支持多个绘图处理器的互动的系统,其中,该内存存取单元更 将数据写入到一内存与一同步缓存器区块之至少其中之一。
8.一种支持多个绘图处理器的互动的方法,包括下列步骤 侦测有关一上下文之一事件;以及根据侦测到之该事件判断该事件包括一等待代符(Wait Token)、一自旋等待与一时间 片段之至少其中之一,以及根据侦测到的该事件执行下列步骤 停止执行一目前上下文;将该目前上下文之状态设定为一待处理储存状态;以及 利用一动件定义缓存器切换至一新上下文。
9.如权利要求8所述的方法,更包括根据侦测到之该事件判断该事件包括一等待代 符、一自旋等待与一时间片段之至少其中之一,并且根据侦测到之该事件储存该目前上下 文。
10.如权利要求9所述的方法,更包括根据侦测到之该事件判断该事件包括一时间片 段,并且根据侦测到之该事件设定该目前上下文为一就绪状态。
11.如权利要求9所述的方法,更包括根据侦测到之该事件判断该事件包括一自旋等 待与一等待代符之至少其中之一,以及根据侦测到之该事件设定该目前上下文为具有一悬 置码之一悬置状态。
12.如权利要求9所述的方法,更包括根据侦测到之该事件判断该事件为一监控事件, 以及根据侦测到之该事件决定有关该至少一上下文之一状态。
13.如权利要求12所述的方法,更包括判断该状态为一执行状态,并且将缓冲数据写 入至一同步缓存器区块。
14.如权利要求12所述的方法,更包括判断该状态为一就绪状态,并且设定一监控旗 标,以及执行由一动作定义缓存器定义之一动作。
15.如权利要求12所述的方法,更包括判断该状态为一悬置状态,并且设定一警示旗 标与密码,以及设定该上下文状态为一就绪状态。
16.如权利要求12所述的方法,更包括判断该状态为一空缺状态,设定一警示旗标与 密码,以及产生一中央处理单元中断命令。
17.如权利要求12所述的方法,更包括判断该状态为一待处理储存状态,缓冲一地址 与数据,以及写入缓冲数据至一内存。
18.如权利要求12所述的方法,更包括判断该上下文状态为一待处理回复状态,缓冲 一地址与数据,以及在回复该上下文后写入缓冲数据至一同步缓存器。
全文摘要
一种支持多个绘图处理器的互动的系统,包括一上下文状态缓存器、一上下文切换配置缓存器、一上下文状态管理逻辑单元与一内存存取单元。该上下文状态缓存器发送有关至少一上下文之一状态的数据。该上下文切换配置缓存器发送有关至少一上下文之至少一事件的多个指令。该上下文状态管理逻辑单元接收有关至少一上下文之一状态之该数据与自该上下文切换配置缓存器接收该等指令,并且根据该等指令执行一动作。该内存存取单元,其用以发送一监控事件至该上下文状态管理逻辑单元与自该上下文状态管理逻辑单元接收控制数据。
文档编号G06T1/20GK101877120SQ20091022213
公开日2010年11月3日 申请日期2009年11月6日 优先权日2008年11月6日
发明者提莫·佩塔西, 柏瑞斯·柏克潘克, 约翰·柏拉勒斯 申请人:威盛电子股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1