具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
图形处理器(Graphics Processing Unit,GPU)硬件驱动标准规定了附加缓冲区(append buffer)。附加区域包括结构性缓冲区域(structure buffer)和隐藏计数器(hidden counter)。隐藏计数器与对应的结构性缓冲区存在绑定关系。图形处理器可以通过一条指令对多个结构性缓冲区对应的隐藏计数器进行原子操作。
图形处理器可以采用单指令多数据(SIMD)技术,一条指令的不同线程(thread)可访问结构性缓冲区的不同的索引。 DirectX中的编程函数imm_atomic_alloc和imm_atomic_consume用于对隐藏计数器进行加一或者减一操作,获取每个线程需要的结构性缓冲区的索引。由于上述的编程函数属于全局性的原子操作,因此需要一种全局性的计数器处理方案。
然而,随着图形处理器处理的计算任务日趋复杂,所需要的隐藏计数器数量日渐增多。隐藏计数器在内存中以离散形式存储,因此需要存储每个隐藏计数器在内存的存储地址。由于隐藏计数器存储区于图形处理器的缓存中,且缓存容量有限,导致图新处理器无法支持庞大数量的隐藏计数器,进而限制了图形处理器的计算效率。例如,若内存中存储有N个隐藏计数器,则缓存中需要存储N个隐藏计数器地址。
针对上述技术问题,本申请提出如下技术构思:在内存中存储全部隐藏计数器,当图形处理器触发隐藏计数器的原子操作时,若该隐藏计数器不存在于缓存,则根据缓存中存储的目标计数器标识和计数器地址起始信息确定目标计数器地址,然后在内存中根据目标计数器地址获取目标计数器。例如,若内存中存储有N个隐藏计数器,缓存中只需要存储一个计数器地址起始信息,然后根据隐藏计数器标识,可以计算出目标计数器地址,然后根据目标计数器地址到内存中获取目标计数器。无需存储N个隐藏计数器,而是只存储一个计数器地址起始信息。实现目标计数器的地址以及目标计数器均存储于内存,缓存中仅需存储计数器地址起始信息,进而能够实现对数量庞大的计数器进行管理和操作,进而提高图形处理器的计算能力。
下面以具体地实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。
图1为本申请实施例提供的计数器的处理系统的结构示意图,包括图形处理器驱动1、多个图形处理器2、图形处理器缓存3和内存4。图形处理器2用于触发目标计数器的原子操作,该原子操作可以为计数器加一操作或计数器减一操作。图形处理器缓存3可以为全局原子模块(Global Atomic Module)。图形处理器缓存3与内存4之间还可以包括一层Ln缓存5(cache)。内存4中连续存储有多个计数器的存储地址,图形处理器缓存3中存储有多个计数器的存储地址的起始地址,又称计数器地址起始信息。图形处理器缓存3中还存储有运行涉及的计数器地址以及计数器。内存4中离散存储有多个计数器。内存4中还设置有连续存储空间,用于连续存储多个计数器地址。
计数器地址存储于一块连续的地址,解决了计数器非连续存储的问题。
图2为本申请实施例提供的计数器的处理方法的流程图一,本实施例可适用于图形处理器对隐藏计数器进行原子操作的情况,该方法可以由具有图形处理器的电子设备来执行。如图2所示,本申请提供的计数器的处理方法,包括:
S101、当触发目标计数器的原子操作时,判断所述目标计数器是否存在于缓存中。
图形处理器的流处理器(stream processor)触发目标计数器的原子操作。当触发原子操作时,判断目标计数器是否存在于缓存中。原子操作包含有目标计数器标识(UID)。
可选的,所述判断所述目标计数器是否存在于缓存中,可通过下述方式实施:在缓存中根据目标计数器进行命中测试。若命中,则目标计数器存在于缓存中;若未命中,则目标计数器不存在于缓存中。
示例性的,在缓存中根据目标计数器进行命中测试,可实施为:根据目标计数器的目标计数器标识确定目标计数器的目标计数器地址是否存储于缓存中。
命中测试(hti miss test)用于判断缓存中是否包含有目标计数器标识(UID)指向的目标计数器的目标计数器地址(Cntaddr)。如果命中,则针对目标计数器进行命中测试,判断该目标计数器是否存在于全局原子模块(Global Atomic Module)。若存在则可在全局原子模块中对目标计数器进行原子操作。若不存在,则根据目标计数器地址访问内存,将内存中的目标计数器读取到全局原子模块,然后在全局原子模块中对目标计数器执行原子操作。
如果未命中,则表示目标计数器的目标计数器地址不存在于缓存中。具体为目标计数器的目标计数器地址不存在于全局原子模块中,执行步骤102。
S102、若所述目标计数器不存在于缓存中,则根据目标计数器标识和计数器地址起始信息确定目标计数器地址。
缓存中存储有计数器地址起始信息,该计数器地址起始信息为内存中一段连续存储空间的首地址。该连续存储空间内连续存储有多个目标计数器的存储地址,实现多个目标计数器的存储地址的连续存储。其中,该存储地址为内存使用的地址,解决了计数器非连续存储的问题。
可选的,所述根据目标计数器标识和计数器地址起始信息确定目标计数器地址,可通过下述方式实施:根据目标计数器标识和地址单位长度,确定目标计数器地址偏移;根据计数器地址起始信息和所述目标计数器地址偏移确定目标计数器地址信息;根据所述目标计数器地址信息和所述地址单位长度读取目标计数器地址。
目标计数器标识为顺序编号。根据目标计数器标识和地址单位长度可以得到目标计数器地址偏移。示例性的,地址单位长度为Cbyte,地址单位长度为内存中一个内存地址的长度。假设目标计数器标识为n,则将目标计数器标识与地址单位长度相乘,得到目标计数器地址偏移,n*Cybte。
计数器地址起始信息Cbase用于表示内存中连续存储计数器地址的连续存储空间的首地址。
将计数器地址起始信息与目标计数器地址偏移相加,得到目标计数器地址信息pCntAddrn。
示例性的,可以通过下述公式计算目标计数器地址信息pCntAddrn。
pCntAddrn = n*Cbyte + Cbase
目标计数器地址信息为目标计数器地址存储的首地址,根据地址单位长度,从目标计数器地址信息向后读取地址单位长度,得到目标计数器地址。
由于连续存储空间内连续存储有多个目标计数器的存储地址,因此根据计数器地址起始信息、目标计数器标识和地址单位长度,能够计算出存储目标计数器地址的位置信息。根据该目标计数器地址的位置信息得到目标计数器地址。通过上述计算过程能够得到任意一个目标计数器地址,解决了计数器非连续存储的问题。
S103、在内存中,根据所述目标计数器地址获取所述目标计数器。
可选的,所述计数器地址起始信息处连续存储多个计数器地址信息;所述内存中以离散形式存储有多个计数器地址。
内存中使用连续地址空间存储多个计数器地址信息。当获取到目标计数器地址后,该地址指向内存中离散存储的目标计数器。多个目标计数器离散存储在内存的不同位置,根据目标计数器地址从内存中读取目标计数器。
S104、对所述目标计数器执行所述原子操作。
可选的,所述对所述目标计数器执行原子操作,可通过下述方式实施:对所述目标计数器表示的计数结果进行加一操作;或者,对所述目标计数器表示的计数结果进行减一操作。
目标计数器的原子操作包括加一操作(imm_atomic_alloc)和减一操作(imm_atomic_consume)。
本申请提供的计数器的处理方法,当触发目标计数器的原子操作时,判断所述目标计数器是否存在于缓存中;若所述目标计数器不存在于缓存中,则根据目标计数器标识和计数器地址起始信息确定目标计数器地址;在内存中,根据所述目标计数器地址获取所述目标计数器;对所述目标计数器执行所述原子操作。相对于隐藏计数器全部存储于图形处理器缓存,无法支持庞大数量的隐藏计数器,导致图形处理器计算效率受限的问题,本发明实施例提供的计数器的处理方法能够将计数器存储于内存中,当图形处理器触发计数器的原子操作时,可根据缓存中存储的目标计数器标识和计数器地址起始信息确定目标计数器地址,然后在内存中根据所述目标计数器地址获取所述目标计数器。由于内存存储空间远大于缓存存储空间,因此内存可支持数量庞大的隐藏计数器的存储,同时通过缓存存储的目标计数器标识和计数器地址起始信息可以确定目标计数器在内存中的目标计数器地址。因此能够实现图形处理器支持庞大数量的隐藏计数器,提高图形处理器的计算效率。
在上述实施方式的基础上,本发明实施例提供的计数器的处理方法,除了可以通过上述方式对计数器加一、计数器减一的原子操作进行响应,还可以在对目标计数器的计数结果进行原子操作后,将目标计数器更新到内存中。
此外,当结构性缓冲区的目标计数器变化或者解除绑定时,将缓存中的目标计数器地址CntAddr设置为无效。
图3为本申请实施例提供的图形处理器的结构示意图。如图3所示,该图形处理器,包括:命中判断模块31、地址计算模块32、计数器获取模块33以及原子操作执行模块34。
命中判断模块31,用于当触发目标计数器的原子操作时,判断所述目标计数器是否存在于缓存中;地址计算模块32,用于若所述目标计数器不存在于缓存中,则根据目标计数器标识和计数器地址起始信息确定目标计数器地址;计数器获取模块33,用于在内存中,根据所述目标计数器地址获取所述目标计数器;原子操作执行模块34,用于将所述目标计数器读取到缓存,对所述目标计数器执行所述原子操作。
在上述实施方式的基础上,地址计算模块32用于:根据目标计数器标识和地址单位长度,确定目标计数器地址偏移;根据计数器地址起始信息和所述目标计数器地址偏移确定目标计数器地址信息;根据所述目标计数器地址信息和所述地址单位长度读取目标计数器地址。
在上述实施方式的基础上,所述计数器地址起始信息存储于所述缓存中。
在上述实施方式的基础上,所述计数器地址起始信息处连续存储多个计数器地址信息;所述内存中以离散形式存储有多个计数器地址。
在上述实施方式的基础上,命中判断模块31用于:在缓存中根据目标计数器进行命中测试;若命中,则目标计数器存在于缓存中;若未命中,则目标计数器不存在于缓存中。
在上述实施方式的基础上,命中判断模块31用于:根据目标计数器的目标计数器标识确定目标计数器的目标计数器地址是否存储于缓存中。
在上述实施方式的基础上,原子操作执行模块34用于:对所述目标计数器表示的计数结果进行加一操作;或者,对所述目标计数器表示的计数结果进行减一操作。
本申请提供的图形处理器,命中判断模块31,用于当触发目标计数器的原子操作时,判断所述目标计数器是否存在于缓存中;地址计算模块32,用于若所述目标计数器不存在于缓存中,则根据目标计数器标识和计数器地址起始信息确定目标计数器地址;计数器获取模块33,用于在内存中,根据所述目标计数器地址获取所述目标计数器;原子操作执行模块34,用于将所述目标计数器读取到缓存,对所述目标计数器执行所述原子操作。相对于隐藏计数器全部存储于图形处理器缓存,无法支持庞大数量的隐藏计数器,导致图形处理器计算效率受限的问题,本发明实施例提供的图形处理器能够将计数器存储于内存中,当图形处理器触发计数器的原子操作时,可根据缓存中存储的目标计数器标识和计数器地址起始信息确定目标计数器地址,然后在内存中根据所述目标计数器地址获取所述目标计数器。由于内存存储空间远大于缓存存储空间,因此内存可支持数量庞大的隐藏计数器的存储,同时通过缓存存储的目标计数器标识和计数器地址起始信息可以确定目标计数器在内存中的目标计数器地址。因此能够实现图形处理器支持庞大数量的隐藏计数器,提高图形处理器的计算效率。
本申请实施例提供的图形处理器,可用于执行上述实施例中计数器的处理方法的技术方案,其实现原理和技术效果类似,在此不再赘述。
需要说明的是,应理解以上图形处理器的各个模块的划分仅仅是一种逻辑功能的划分,实际实现时可以全部或部分集成到一个物理实体上,也可以物理上分开。且这些模块可以全部以软件通过处理元件调用的形式实现;也可以全部以硬件的形式实现;还可以部分模块通过处理元件调用软件的形式实现,部分模块通过硬件的形式实现。例如,地址计算模块32可以为单独设立的处理元件,也可以集成在上述图形处理器的某一个芯片中实现,此外,也可以以程序代码的形式存储于上述图形处理器的存储器中,由上述图形处理器的某一个处理元件调用并执行以上地址计算模块32的功能。其它模块的实现与之类似。此外这些模块全部或部分可以集成在一起,也可以独立实现。这里的处理元件可以是一种集成电路,具有信号的处理能力。在实现过程中,上述方法的各步骤或以上各个模块可以通过处理器元件中的硬件的集成逻辑电路或者软件形式的指令完成。
图4为本申请实施例提供的电子设备的结构示意图。如图4所示,该电子设备可以包括:收发器41、处理器42、存储器43。
处理器42执行存储器存储的计算机执行指令,使得处理器42执行上述实施例中的方案。处理器42可以是通用处理器,包括中央处理器CPU、网络处理器(network processor,NP)等;还可以是数字信号处理器DSP、专用集成电路ASIC、现场可编程门阵列FPGA或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
存储器43通过系统总线与处理器42连接并完成相互间的通信,存储器43用于存储计算机程序指令。
收发器41可以用于与客户端进行数据交互。
系统总线可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,EISA)总线等。系统总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。收发器用于实现数据库访问装置与其他计算机(例如客户端、读写库和只读库)之间的通信。存储器可能包含随机存取存储器(randomaccess memory,RAM),也可能还包括非易失性存储器(non-volatile memory)。
本申请实施例提供的电子设备,可以是上述实施例的具有图形处理器,具体可以为终端。
本申请实施例还提供一种运行指令的芯片,该芯片用于执行上述实施例中计数器的处理方法的技术方案。
本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机指令,当该计算机指令在计算机上运行时,使得计算机执行上述实施例计数器的处理方法的技术方案。
本申请实施例还提供一种计算机程序产品,该计算机程序产品包括计算机程序,其存储在计算机可读存储介质中,至少一个处理器可以从计算机可读存储介质读取计算机程序,至少一个处理器执行计算机程序时可实现上述实施例中计数器的处理方法的技术方案。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求书指出。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求书来限制。