对异构缓冲区的随机访问不相交并发稀疏写入的制作方法

文档序号:15285798发布日期:2018-08-29 00:04阅读:183来源:国知局

计算设备通常利用运行时系统来创建可由各种处理单元或功能(例如,中央处理单元(cpu)、数字信号处理器(dsp)、图形处理单元(gpu)、相机管道等等)访问的数据的抽象。一些运行时系统可以识别和管理对存储在计算设备的各种存储器单元中的应用程序的数据的访问。具体而言,一些运行时系统可以管理应用程序数据并提供抽象表示,例如用于抽象数组数据的“缓冲区”。缓冲区数据可以驻留在计算设备的各种处理单元可访问的各种类型的存储器单元上。可以经由程序缓冲句柄来访问缓冲器数据,在各种处理单元上执行的应用程序代码可以使用该程序缓冲句柄。响应于缓冲区访问请求(例如,使用程序缓冲句柄),运行时系统可以将缓冲区数据移动到与请求方处理单元相关联的存储器单元。

由于计算设备的各种处理单元的不同能力和结构,这种运行时系统通常使得缓冲区的数据可以通过不同的方式来可用于不同的处理单元。具体而言,缓冲区数据的副本可以单独地存储并且格式化成可由特定处理单元访问的适当存储器单元上的“后备存储”。例如,后备存储可以是用于cpu的主存储器的分配块、使用用于gpu的opencl驱动程序生成的专用驱动程序管理数据存储、用于dsp或者照相机管道的主存储器的专用区域上的分配块(例如,高级risc机器(arm)架构上的ion存储器)、和/或用于定制加速器的内部寄存器和本地存储器库。

一些运行时系统内部地分配和同步处理单元之间的各种后备存储。另外,对于一些处理单元,这些运行时系统可以提供抽象的编程机制,通过该机制,在处理单元上执行的应用代码能够读取和写入缓冲区数据。在这些情况下,应用程序代码可以访问缓冲区数据内容(例如,通过运行时系统),而不需要知道哪些后备存储当前保存该缓冲区数据。一些运行时系统可能会向应用程序代码隐藏后备存储中的缓冲区数据的布局。这种用于数据访问的抽象接口,通常允许运行时系统执行各种数据移动、数据存储和/或同步优化。



技术实现要素:

各个实施例提供了用于多处理器计算设备将来自多个处理单元的并发写入合并到与应用相关联的缓冲区的方法、设备和非临时性处理器可读存储介质。一种由多处理器计算设备执行的实施例方法可以包括:识别访问所述缓冲区的多个并发请求,其中所述多个并发请求是稀疏的、不相交的、以及只写的(sdwo);针对所述多个处理单元中的每一个处理单元配置写集合(write-set);使用所述写集合来执行访问所述缓冲区的所述多个并发请求;确定访问所述缓冲区的所述多个并发请求中的每一个是否完成;经由所述多个处理单元中的每一个处理单元的所述写集合来获得缓冲区索引和数据;响应于确定访问所述缓冲区的所述多个并发请求中的每一个都完成,使用经由所述多个处理单元中的每一个处理单元的所述写集合所获得的缓冲区索引和数据来写入所述缓冲区。在一些实施例中,识别访问所述缓冲区的所述多个并发请求,其中所述多个并发请求是稀疏的、不相交的、以及只写的(sdwo),可以包括:识别在所述多个处理单元中的每一个处理单元上执行的任务的sdwo应用程序接口(api)调用。

此外,一些实施例还可以包括:从所述多个处理单元中的一个处理单元接收用于缓冲区单元的索引;执行虚拟地址转换,以识别与所接收的索引相对应的所述缓冲区单元的物理地址。此外,这些实施例还可以包括:响应于执行所述虚拟地址转换,向所述多个处理单元中的所述一个处理单元发送所述物理地址,以指导缓冲区单元值向所述缓冲区的写入。

在一些实施例中,确定访问所述缓冲区的所述多个并发请求中的每一个是否完成可以包括:进行等待,直到所有的所述多个处理单元已完成执行用于写入到相关联的写集合的相应任务为止。在一些实施例中,确定访问所述缓冲区的所述多个并发请求中的每一个是否完成可以包括:识别所述应用的代码中的标记,其中该标记指示所述多个处理单元对所请求的缓冲区访问的完成。此外,一些实施例还可以包括:确定所述多个处理单元是否被配置为直接写入所述缓冲区;响应于确定所述多个处理单元被配置为直接写入所述缓冲区,向所述多个处理单元中的每一个处理单元串行地发送信号,其中,所述信号指示所述多个处理单元中的每一个处理单元何时可以直接向所述缓冲区写入。

此外,一些实施例还可以包括:识别访问所述缓冲区的另外的多个并发请求,其中所述另外的多个并发请求不是稀疏的、不相交的、以及只写的;向与所述另外的多个并发请求相关联的每个处理单元串行地传送所述缓冲区,使得串行地执行所述另外的多个并发请求。此外,一些实施例还可以包括:将协调器处理器识别为具有用于所述缓冲区的有效数据的后备存储;响应于确定访问所述缓冲区的所述多个并发请求中的每一个都已完成,向所述协调器处理器发送所述写集合的数据以写入所述后备存储。在一些实施例中,响应于确定访问所述缓冲区的所述多个并发请求中的每一个都完成,使用经由所述多个处理单元中的每一个处理单元的所述写集合所获得的缓冲区索引和数据来写入所述缓冲区可以包括:向与所述协调器处理器相关联的所述后备存储进行写入。

在一些实施例中,访问所述缓冲区的所述多个并发请求中的每一个可以对应于使用所述缓冲区作为存储池的单独数据结构的访问,其中,所述数据结构是链表或树中的一种。在一些实施例中,所述应用可以是步进模拟程序。在一些实施例中,所述处理器可以执行运行时系统。在一些实施例中,识别访问所述缓冲区的所述多个并发请求,其中所述多个并发请求是稀疏的、不相交的、以及只写的(sdwo),可以包括:确定所述多个并发请求是将相同的值写入到相同的缓冲区索引的请求。

另外的实施例包括一种计算设备,其配置有处理器可执行指令以执行上面所描述的方法的操作。另外的实施例包括具有用于执行上面所描述的方法的功能的单元的计算设备。另外的实施例包括其上存储有处理器可执行指令的非临时性处理器可读介质,其中所述处理器可执行指令被配置为使计算设备执行上面所描述的方法的操作。

附图说明

被并入本文并且构成本说明书一部分的附图,描绘了各个实施例,并且连同上面给出的概括描述以及下面给出的详细描述一起来解释本发明的特征。

图1是根据各个实施例,被配置为支持稀疏、不相交、只写操作的多处理器计算设备的组件框图。

图2是根据一些实施例,示出用于多处理器计算设备对稀疏、不相交、以及只写的并发缓冲器访问进行同步的方法的处理流程图。

图3a到图3b是根据一些实施例,示出用于多处理器计算设备对稀疏、不相交、以及只写的并发缓冲器访问进行同步的方法的处理流程图。

图4是用于运行时功能的伪代码列表,其中该功能根据一些实施例来实现稀疏、不相交、以及只写的并发缓冲区访问。

图5a到图5b是根据一些实施例,可以由多处理器计算设备的处理单元来执行的伪代码列表。

图6是适合于在一些实施例中使用的计算设备的组件框图。

具体实施方式

现在参照附图来详细地描述各个实施例。在可以的地方,贯穿附图使用相同的附图标记来指代相同或者类似的部件。对于特定示例和实现的引用只是用于说明目的,而不是旨在限制这些实施例或者权利要求的保护范围。

本公开内容包括各种实现或者实施例的示例性描述。但是,本文所描述的任何实现不应被解释为比其它实现更优选或更具优势。

本文所使用的术语“计算设备”指代装备有至少处理器的电子设备。计算设备的示例可以包括移动设备(例如,蜂窝电话、可穿戴设备、智能电话、网垫、平板计算机、具备互联网能力的蜂窝电话、具备能力的电子设备、个人数据助理(pda)、膝上型计算机等等)、个人计算机和服务器计算设备。

本文使用术语“多处理器计算设备”指代被配置为使用两个或更多处理单元来执行各种任务(例如,例行程序、指令集等等)的计算设备。例如,多处理器计算设备可以是具有不同的处理单元的异构计算设备(例如,片上系统(soc)),其中每个处理单元被配置为执行专用和/或通用工作负载。这些处理单元可以包括各种处理器设备、核心、多个核等等。例如,多处理器计算设备的处理单元可以包括应用处理器(例如,中央处理单元(cpu))和一个或多个专用处理设备(例如,图形处理单元(gpu)、数字信号处理器(dsp)和调制解调器处理器)。

通常,多处理器计算设备的处理单元可以执行与应用相关联的各种软件、例程、内核、线程、指令和/或代码(本文简称为“任务”)。在多处理器计算设备的各种处理单元上执行的一些任务可以被配置为访问公共缓冲区。用于通过各种任务来启用和管理缓冲区访问的常规技术,通常导致次优的性能。例如,在一些情况下,任务可以配置为管理对缓冲区数据的一致性访问(例如,通过使用关键部分、原子变量和其它应用程序管理的访问技术)。但是,当依赖于缓冲区数据的不同后备存储的处理单元执行并发缓冲区访问时,这种应用程序管理的访问技术可能会失败。例如,cpu任务可以通过访问主存储器中的后备存储来读取和写入缓冲区,而同时执行的gpu任务可以访问opencl管理的后备存储(其通常在gpu本地存储器中)。并发cpu和gpu任务可能不知道执行其它任务的缓冲区的更新,其导致缓冲区数据变得不一致。

在许多情况下,可以强制代表应用程序来管理缓冲区的运行时系统,对将要同时写入缓冲区的多个处理单元的执行进行序列化,从而减慢应用程序的执行。除了在运行时系统将写入缓冲区数据的任务的执行进行序列化时产生的性能损失之外,由于在序列化任务的执行之间在后备存储中的数据的必要同步,可能会产生另外的成本。将数据从第一后备存储(其可由一些处理单元访问)传输到第二后备存储(其可由一些其它处理单元访问)的这种同步可能是必需的,以便较早执行的任务对缓冲区的更新对于后来执行的任务来说变得可见。

在一些情况下,第一后备存储和第二后备存储可以连接在一起,使得运行时系统仅需要改变一些存储器配置和执行驱动器刷新来确保第二后备存储具有最新数据(即,低成本同步)。但是,在很多常见情况下,缓冲区数据的全部内容必须从第一后备存储复制到第二后备存储(其称为“全缓冲区复制”),即使与第二后备存储中已存在的数据相比,在第一后备存储中只更新了一小部分的缓冲区数据。这种类型的同步可能需要大量的处理时间和消耗电池电量,而影响设备性能。

并非计算设备的所有后备存储都可以被配置为实现一致性,并且因此可能需要刷新。例如,一些处理单元可以访问共享虚拟存储器(svm)中的后备存储,从而允许以一致的方式进行并发写入。其它处理单元可能仅支持部分svm,其中,对源自不同处理单元的后备存储的访问由于缺少高速缓存一致性机制而不一致。在这些情况下,可能需要显式的驱动程序管理刷新,以便与后备存储同步。

在其它情况下,在各种处理单元上执行的多个任务可以同时地写入相同的缓冲区而不会产生不一致,例如写入缓冲区的不同单元。但是,多个后备存储的参与和/或后备存储上缺乏一致性机制可能导致性能损失(例如,任务序列化、全缓冲区复制等等)。即使并发任务访问svm后备存储,也可能存在“错误共享”的概率,其中,不同的任务写入共同位于同一高速缓存行上的不同缓冲区单元,其导致高速缓存抖动和性能下降。

需要能够在尽管有多个后备存储的情况下并行地执行任务,并且避免后备存储之间的全缓冲区复制的技术,否则这些后备存储将需要全缓冲区复制同步。

各种实施例包括用于在“稀疏的、不相交的、以及只写的”(sdwo)并发缓冲区访问期间,改进多处理器计算设备中的操作的技术。如本文所提到的,sdwo缓冲区访问可以对应于多处理器计算设备的一个或多个处理单元(或者在一个或多个处理单元上执行的任务)对分配给执行应用程序(例如,程序等)的缓冲区的特殊情形访问。并发sdwo缓冲区访问可以是随机的(例如,访问的索引仅在运行时由每个处理单元来确定)、稀疏的(即,可能仅访问缓冲区的一小部分)、不相交的(即,各个处理单元访问不同的缓冲区索引)和只写的(即,参与并发sdwo缓冲区访问的处理单元都不读取任何缓冲区数据)。

各种实施例包括:用于将并发sdwo写入合并到应用程序的缓冲区的方法、以及执行这些方法的多处理器计算设备和存储这些方法的指令的非临时性处理可读存储介质。通常,多处理器计算设备可以被配置为:识别各种处理单元针对应用程序(例如,程序等)来执行缓冲区的sdwo访问的并发请求。例如,多处理器计算设备可以通过运行时功能来识别与sdwo缓冲区访问(或者访问请求)相关联的特殊应用程序接口(api)调用的任务代码中的调用。当发生并发sdwo缓冲区访问请求时,多处理器计算设备可以使用每设备写集合来设置每个处理单元,而不是跨这些处理单元中的每个处理单元使用的后备存储来复制缓冲区数据。例如,多处理器计算设备可以配置包括用于每个处理单元的一组缓冲区索引、值对的写集合。各个处理单元可以使用相应的写集合来指示与要写入缓冲区的数据相对应的缓冲区位置(例如,索引)。当并发sdwo缓冲区访问完成并且从处理单元接收到所有的写集合信息时,多处理器计算设备可以执行对缓冲区的写入,如各个每设备的写集合所规定的。例如,可以使用这些写集合来更新各个处理单元(例如,cpu)所维持的当前后备存储,多处理器计算设备使用其来更新缓冲区。各种实施例使多处理器计算设备能够执行功率高效且时间高效的对缓冲区的写入,其不需要处理单元具有相同的一致性能力。这种功能避免了序列化和/或昂贵的缓冲区复制/分配。

在各个实施例中,sdwo缓冲区访问可以由应用程序员基于应用程序的语义来识别。具体而言,应用程序员可以在任务的代码中,明确地将缓冲区访问声明成sdwo访问。例如,可以对cpu任务和gpu任务进行构造(或编码)以更新缓冲区的不同单元,而不是读取缓冲区的任何部分,其可能仅写入缓冲区的一小部分的单元。基于应用程序任务的这些语义或特性,应用程序员能够确定cpu和gpu任务可以执行sdwo缓冲区访问。应用程序员可以将cpu任务和gpu任务的访问指定为针对该缓冲区的sdwo,例如通过编程相应的任务以利用适当的sdwoapi调用。当执行这些任务并调用sdwoapi调用时,多处理器计算设备(例如,通过运行时功能)可以执行实施例sdwo优化,其允许cpu和gpu的任务同时地执行,同时避免全缓冲区复制。

再举一个例子,单独的缓冲器条目可能充当应用程序使用的链表式数据结构的节点的“数据有效载荷”。第一链表和第二链表可能具有散布在用于应用程序的缓冲区上的相关缓冲区条目。但是,访问第一链表的节点将访问与同第二链表的节点相关联的缓冲区条目不同的缓冲区条目。被配置为在dsp上运行的内核可以“走遍”(或遍历)第一链表,为相应的节点数据写入相应的缓冲区条目,而被配置为在gpu上运行的内核可以遍历第二链表并写入相应的缓冲区条目。当每个内核寻址缓冲区的不同数据元素/数据对象时,相应的写请求将仅只寻址缓冲区的不同但可能散布的单元。由于不存在跨处理单元的关于缓冲区条目的生产者-消费者关系,因此保证了并发的写请求的不相交性,因此应用程序员可以在内核的代码中声明这种写请求sdwo。再举一个例子,在树数据结构的两个同层(sibling)子树上工作的dsp内核和gpu内核,可以在写入缓冲区时被声明为sdwo,该缓冲区的条目充当树节点的数据有效载荷。

在各个实施例中,多处理器计算设备可以被配置为:识别将进行sdwo的并发缓冲区访问的任务或处理单元。例如,多处理器计算设备可以评估应用程序代码或指令集以检测两个处理单元的内核(例如,cpu、gpu等)何时被配置为提交将数据写入不同缓冲区索引的请求。在各个实施例中,内核代码的编译器分析可以指示由第一内核写入的缓冲区索引不同于由第二内核写入的缓冲区索引。在一些实施例中,多处理器计算设备通过运行时功能,可以识别要经由一个或多个处理单元执行的任务代码中的应用程序接口(api)调用(例如,对应于特定的物理引擎程序的用于gpu、cpu和dsp的任务)。可以在相应的处理单元(例如,gpu、cpu和dsp)启动并执行任务之前,向运行时功能通知这些任务进行sdwo缓冲区访问请求。例如,可以预先在代码中声明sdwo缓冲区访问。可以调用的这种api的一个例子是“sdwo(b)”命令,其中‘b’是作为自变量(argument)传递给调用该api命令的任务的缓冲区句柄。

在各个实施例中,响应于检测到多个处理单元(和相应任务)的并发请求以执行缓冲区的sdwo缓冲器访问,多处理器计算设备可以使用每设备写集合来设置(或者配置)每个处理单元。例如,代替分配后备存储和将数据传输到各个处理单元,多处理器计算设备可以简单地指示处理单元针对被识别为具有sdwo访问的给定缓冲区来设置写集合。利用写集合,在各个处理单元上执行的代码(例如,内核代码)可以提供应当用新数据更新的缓冲区的索引(例如,通过api调用)。例如,在dsp上执行的内核可以执行api调用(sdwo_write(...)),其包括缓冲区的索引和缓冲区存储的类型的数据值(例如,在“浮点”缓冲区情形下,处理单元可以调用“sdwo_write(index,3.0)”在指定的缓冲区索引处写入浮点值“3.0”等等)。

通常,可以存在用于在多处理器计算设备的每个处理单元(或处理设备)的本地存储器内创建写集合的各种特定于设备的机制。在一些实施例中,可以将处理单元的写集合实现成索引数据对的阵列,其中响应于处理单元上的每个sdwo_write()调用,该处理单元附加新的索引数据对。在一些实施例中,可以使用哈希映射(hash-map)来记录写集合的索引-数据对。写集合的使用使得能够在处理单元之间传输新的缓冲区数据,而无需在存储单元(例如,设备高速缓存等等)之间来回地对缓冲区的整个内容进行耗费时间和能量的数据传输。在一些实施例中,当多处理器计算设备的所有各种处理单元利用全部或部分的svm支持时,可以通过提供给处理单元的指针来启用写集合。

在一些实施例中,多处理器计算设备可以将来自各个处理单元的写集合传送到协调器处理器。可以基于处理器与缓冲区的有效后备存储相关联,来识别或指定这种协调器处理器。例如,具有带有缓冲区的最新数据的存储器后备存储的cpu可以被识别为协调器处理器,因此可以接收用于将来自处理单元的数据插入到后备存储中的写集合。在一些实施例中,协调器处理器可以是多处理器计算设备中具有缓冲区的有效后备存储的任何处理单元。在一些实施例中,多处理器计算设备可以执行操作以按照效率的顺序,对可以用作协调器处理器的每个处理单元进行排序或以其它方式排序,以便使用最快和/或最高效的处理单元和后备存储。

下面是对sdwo缓冲区访问和协调器处理器的实现的说明。在同时执行的处理单元已更新用于sdwo缓冲区访问的相应写集合之后,可以将各个写集合发送到访问该缓冲区的后备存储的指定协调器处理器(例如,cpu)。该协调器处理器可以使用所接收的写集合来更新后备存储。由于协调器处理器的写入是稀疏的,因此与缓冲区的大小相比,所有写集合的总大小可能较小。因此,与传输缓冲区的整个内容所需要的时间(如在没有sdwo的情况下所必需的那样)相比,可以在短得多的持续时间内使用这些写入来更新后备存储。

在各个实施例中,处理单元可以在处理单元已经完成(例如,完成任务)时或者在处理单元上执行任务期间间歇地,传送写集合(例如,传送到协调器处理器)。在一些实施例中,协调器处理器可以基于确定与并发sdwo缓冲区访问相关联的所有处理单元已经完成操作并且因此已经传送了写集合数据,来确定何时更新缓冲区的后备存储。在一些实施例中,程序员可以简单地指示完成点,在该完成点之后应当发生内核/处理单元的任何更新。

当并发sdwo缓冲区访问完成时(例如,已经从处理单元接收到所有的写集合),多处理器计算设备可以更新包括有效缓冲区数据的后备存储。例如,多处理器计算设备可以覆盖cpu可访问的缓冲区后备存储的最新副本中的数据。

当缓冲区中的各个条目非常大时,即使使用写集合也可能是高成本的。例如,通过写集合将大数据值传送到协调器处理器,然后由协调器处理器将数据值写入后备存储,可能需要在存储器系统上两次传送大数据值。为了解决该问题,在一些实施例中,多处理器计算设备可以被配置为:识别能够使用缓冲区索引来直接对存储器执行回写的处理单元。换言之,一些处理单元可以被配置为直接访问由协调器处理器更新的后备存储,以避免额外的数据值传输。这种技术可能不需要对后备存储的一致性访问。例如,协调器处理器的后备存储可以在gpu本地存储器中,其允许由gpu内核创建的写集合在协调器处理器的监督下直接更新到后备存储中。

在一些情况下,具有对后备存储的直接一致性访问(例如,经由svm)的处理单元可能不需要使用写集合,但是不具有一致性访问能力的其它单元可以使用写集合。用此方式,实施例技术实现这两种类型的处理单元的混合,并可以减少所涉及的写集合的数量。例如,在确保同时执行的进行缓冲区的sdwo访问的处理单元完成之后,多处理器计算设备可以用svm功能发信号通知各个处理单元以序列化缓冲器回写,其通过适当的驱动器刷新来打断。这些实施例可以使多处理器计算设备能够将一些处理单元(例如,cpu)对写集合的直接回写与协调器处理器针对其它处理单元/设备(例如,dsp、gpu、加速器)所执行的写集合更新进行混合。

例如,多处理器计算设备可以识别出一些处理单元能够直接访问存储器,使得具有最新缓冲区数据的后备存储可以由这些处理单元来直接访问(尽管可能不是以一致性方式)。因此,在这些处理单元执行sdwo操作之前,可能不需要分配或者同步相关联的后备存储来保存最新的缓冲区数据。这些处理单元可能不需要将写集合发送到协调器处理器,而是可以在执行并发的sdwo缓冲器访问之后直接写入与sdwo缓冲区访问相关联的数据。协调器处理器可以发信号通知这些处理单元以指示每个处理单元何时可以安全地将写集合数据直接应用于后备存储。协调器处理器可以通过序列化每个处理单元的写集合写入和/或执行存储器屏障指令来确保正确性,以确保在发信号通知下一个处理单元之前的一致性。

在一些实施例中,当处理单元可以处理物理寻址的存储器但没有虚拟地址能力时,这些处理单元可以将写集合索引发送到多处理器计算设备(例如,协调器处理器)以进行虚拟地址转换。例如,当dsp未被配置为利用转换查找缓冲器(tlb)进行虚拟地址转换时,多处理器计算设备可以通过运行时功能来执行转换操作,以将来自dsp的缓冲区索引转换为物理地址。基于这种转换,各个处理单元可以使用物理地址直接写入存储器。

在一些实施例中,多处理器计算设备可以配置有专用硬件,该专用硬件能够在无需特殊api调用的情况下启用sdwo缓冲区访问。例如,硬件可以被配置为:实现对内核代码中的缓冲区的常规访问的地址范围的运行时识别,将它们自动转换为针对该缓冲区的写集合。这种实施例多处理器计算设备可以实现对于程序员来说不可见的无缝写集合使用。利用这种硬件实现,在处理单元上执行的各个内核可以简单地使用常规api调用和/或缓冲区访问。这种实现允许硬件改进以识别sdwo缓冲区访问,并且在无需额外的程序员努力的情况下进行动作。

在各个实施例中,多处理器计算设备可以被配置为支持缓冲区的读取,同时维持各个处理单元之间的并发性。例如,多处理器计算设备可以向异构处理单元提供缓冲区的先前版本的(例如,在物理模拟中使用的缓冲区的时间‘t’版本)以用于读取目的和配置用于写入缓冲区的写集合(例如,通过同时执行处理单元来捕获时间‘t+1’的模拟状态更新)。处理单元随后的sdwo写调用可以生成写集合(例如,要写入的数据),其可以应用于保持缓冲区数据的时间‘t’版本的后备存储,以生成缓冲区后备存储的更新的时间‘t+1’版本。

在一些实施例中,多处理器计算设备可以被配置为启用不一定不相交的缓冲区访问。换言之,多处理器计算设备可以实现“近似容忍”并发sdwo缓冲区访问。例如,当认为对某个缓冲区索引(例如,b[i])的并发更新是有效的时(例如,认为并发写入的值全是“近似正确的”,或者期望每个处理单元将尝试写入相同的值等等),多处理器计算设备可以将两个写集合应用于缓冲区。换言之,当识别出访问缓冲区的多个并发请求是sdwo时,多处理器计算设备可以确定所述多个并发请求是将相同值写入相同缓冲区索引的请求。在一些实施例中,用于不相交的这种放宽的环境可能需要新的api调用,例如“稀疏的、近似的、仅写入”(例如,sawo_write)。

可以通过多处理器计算设备支持的运行时功能,来执行根据各种实施例的方法。例如,处理单元(例如,cpu)可以被配置为:执行或者以其它方式利用用于识别并发的sdwo缓冲区访问,并向各个处理单元提供写集合以促进并发的sdwo请求的服务、软件、指令、电路或者其任意组合(例如,在任务代码中识别的sdwoapi调用等等)。

各个实施例提供了用于多处理器计算设备的处理单元(例如,gpu、cpu、dsp等)同时地执行与应用程序的缓冲区相对应的稀疏、不相交和只写操作的方法。特别地解决sdwo缓冲区访问,可以使用各种实施例的方法来配置多处理器计算设备以将针对缓冲区的多个稀疏和不相交的写入进行同步,当所有并发写入单元都提供相应的数据时,仅写入单一缓冲区表示(例如,后备存储、存储器等等)。这使得通常被序列化(例如,按顺序地执行)的操作同时地执行。这些实施例方法可以减少需要复制和/或传输的冗余缓冲区数据的量,以便多个设备执行这种写入。例如,可以消除全缓冲区复制,因为不同处理单元上的任务可以使用写集合来更新缓冲区。再举一个例子,由于在利用来自协调器处理器的信令和/或虚拟地址转换的实施例中,可以使处理单元能够直接写入缓冲区,所以也可以消除对更新的缓冲区单元的双重复制,例如当缓冲区单元是从处理单元转送到协调器处理器再传送到后备存储。当缓冲区或缓冲区单元很大时,这些改进尤其有用。

此外,各个实施例还可以改善多处理器计算设备的功率使用。例如,可以通过去激活高速缓存一致性协议(例如,完全的svm)和/或通过减少总线活动量(例如,通过避免缓冲区复制来使数据传输开销最小化等等)来节省功率。此外,各个实施例还可以通过减少由于多个设备的高速缓存访问而可能发生的潜在颠簸(thrashing),来进一步改进多处理器计算设备的操作。

利用链表的应用程序(或程序)可以从各个实施例中受益。在一些情况下,可以从单一池中分配多个链表。如果该池是运行时管理的缓冲区,则来自多个链表的链表节点可以分散在整个缓冲区中。如果通过多个处理单元处理从同一缓冲池分配的不同链表来同时地执行多个任务,则来自并发任务的访问将是不相交的。在将链表节点分配在缓冲区外但缓冲区保存节点的“有效载荷”的情况下,对有效载荷的缓冲区访问可以是只写的,这是因为遍历链表的读取(例如,读取节点的下一个指针)可以用缓冲区外的数据完成。在其它情况下,如果从缓冲区内分配链表节点,则可以向处理单元提供缓冲区数据的只读副本(例如,通过运行时功能),同时可以将对于链表节点的内容任何写入记录在写集合中。在同时执行的处理单元完成之后,可以将写集合应用于单一后备存储,其表示更新的缓冲区数据。虽然可能无法避免使后备存储的只读副本可用于处理单元的成本,但是避免了更新的缓冲区内容的序列化和完全缓冲器复制的成本。

利用树数据结构的应用程序也可以从各个实施例中受益。在一些情况下,可以将树数据结构高效地存储为数据的元素,或者树节点“有效载荷”可以在缓冲区内进行池分配。例如,程序员可以识别应用程序的代码配置,其包括在根下的同层子树上操作的任务。在该情况下,可以以类似于链表实施例的方式,将任务访问标识为sdwo。

时间步进模拟(或应用)可以从实施例技术中受益。例如,执行时间步进模拟任务的处理单元的后备存储,都可以包括用于时间步长‘t’的数据。在处理单元上执行的每个任务可以读取时间步长‘t’的这种数据,可能在每个处理单元的后备存储中需要一个缓冲器副本。但是,针对各种任务的写操作可能只针对于时间步长‘t+1’。用于各个处理单元的写集合可以在并发任务结束时更新到一个所选择的后备存储,从而避免来自每个更新的后备存储的第二缓冲区复制。因此,尽管存在经常在时间步进模拟中看到的某些缓冲区读取模式,但是可以使用sdwo方法来支持并发任务执行,因此实现各种实施例的计算设备可以避免在每次序列化的任务完成更新之后,一次又一次地复制更新的后备存储。

如上所述,实施例方法对于需要多个可能不同的处理单元来执行对大缓冲区的写入的应用特别有益,例如,步进模拟或者支持大型系统的其它程序(例如,视频游戏物理引擎、链表、计算机视觉应用等等)。例如,当执行游戏物理引擎时,多处理器计算设备可以采用如本文所描述的sdwo缓冲区访问来实现高效的冲突检测算法,该算法在每个计算步骤中同时地更新较大现实状态数据的一小部分,其需要很少的复制或缓冲转移。

与其它典型系统不同,本文的实施例方法可以用于改进对处理单元所使用的应用缓冲区的并发写入(其可以使用也可以不使用高速缓存一致性技术)。例如,各个实施例可以用于从处理单元进行并发写入,处理单元可以被配置或者不配置为执行虚拟地址转换。典型的高速缓存一致性方法不提供对单个应用程序缓冲区的并发稀疏、不相交、只写访问的特殊用例的优化。例如,当需要处理单元多次地写入相同的缓冲区索引时,典型的方法可能不会减少系统流量,而是可能需要多次高速缓存行读取以进行所述多次写入。本文的实施例方法不需要“脏位”方法或读取整个高速缓存行以便写入高速缓存行的一部分,这是因为可以使用本文具体解决的sdwo缓冲区访问来跳过加载或读取。

传统的多处理器计算设备可能需要特殊和/或修改的架构、和/或需要在存储器范围或地址空间之间隔离的方案。例如,一些典型的方案需要用于不同应用的分区存储/存储器单元。再举一个例子,一些典型的方案利用与特定应用预先关联的特定地址范围的存储器。本文的实施例方法不需要这种体系结构或多个地址空间的关联。相反,实施例方法解决了与用于单个应用程序(或程序)的单个缓冲区相对应的sdwo缓冲区访问。例如,并发的sdwo缓冲器访问可以涉及:通过计算设备的一个或多个存储器单元存储在各个位置的缓冲区。本文的实施例方法解决了不相交的并发写入(例如,存储在同一地址空间中的一个程序的不同数据元素)。因此,各个实施例方法不利用分区的或者受限制的存储空间。此外,各个实施例方法需要同步,而这在各种基于范围的分区方案中是不需要的。

各个实施例的描述指代下面的场景:存在执行sdwo缓冲区访问的并发请求。但是,当仅仅一个处理单元请求关于应用程序的缓冲区执行sdwo缓冲区访问时,本文的各个实施例还可以提供性能改进。换言之,即使没有对应用程序的缓冲区的多个并发写入,多处理器计算设备也可以为处理单元设置写集合,其可以至少避免不必要的数据传输。例如,在多处理器计算设备上执行的应用程序可以仅仅与在gpu上执行的单一内核相关联。该内核可以被配置为更新与该应用程序相关联的大缓冲区内的一些数据对象或者值。因此,gpu经由内核可以调用sdwo缓冲区访问,其中,运行时功能可以在gpu上配置不需要缓冲传输或复制的写集合。一旦在gpu上执行的内核识别要写入缓冲区的缓冲区索引和数据,多处理器计算设备就可以使用cpu协调器处理器来更新cpu可访问的存储器中的该缓冲区的有效后备存储,而无需去往或者来自gpu可访问的存储器的缓冲区传输。

图1示出了一种多处理器计算设备100,其被配置为支持适合于结合各种实施例使用的sdwo缓冲器访问。多处理器计算设备100可以包括各种硬件和软件组件,例如,在一些典型的计算设备(例如,智能电话、膝上型计算机等等)中发现的那些。例如,多处理器计算设备100可以包括至少多个处理单元101a-101c(例如,cpu101a、gpu101b和dsp101c等等)。

此外,多处理器计算设备100还可以包括各种类型的一个或多个存储器单元102,比如主存储器、gpu本地存储器、定制加速器本地存储器池等等。存储器单元102可以被配置为存储与一个或多个应用相关联的各种缓冲区数据106a-106n。例如,存储器单元102可以存储用于物理引擎的多个数据元素(例如,链表、子树等等中的项)、步进模拟程序等等。用于应用程序的缓冲区数据106a-106n可以分布在整个存储器单元102中。

在各个实施例中,每个处理单元101a-101c可以仅连接到一个存储器单元,可以被配置为访问相应的后备存储。处理单元101a-101c可以使用各种类型的后备存储。例如,一种类型的后备存储可以是主存储器中的块,另一个后备存储可以是opencl管理的数据块,另一个后备存储可以分布在使用单独存储器接口来连接到定制加速器的多个小型暂存器存储器池上。每个后备存储可以保存缓冲区的内容。

在各个实施例中,多处理器计算设备100可以支持运行时功能110(例如,软件、例程、服务、逻辑、电路等等),其被配置为管理各个处理单元101a-101c关于应用的缓冲器访问。运行时功能110可以检测一个或多个并发请求以执行对缓冲区数据106a-106n的sdwo缓冲器访问,或者执行如本文中参照图2到图3b所描述的功能。例如,响应于确定cpu101a、gpu101b和dsp101c中的一个或多个已请求同时地写入缓冲区数据106a-106n,运行时功能110可以为这些请求的处理单元101a-101c设置写集合,识别处理单元101a-101c的并发写入何时完成(例如,等待时段的结束)。此外,运行时功能110还可以使来自处理单元101a-101c的各种数据写入到缓冲区的有效后备存储中,例如,通过指定协调器处理器来接收写集合数据以更新相应的最新后备存储。在一些实施例中,运行时功能110可以由主处理器或者应用处理器(例如,cpu101a)来执行。

在一些实施例中,运行时功能110可以利用用于将虚拟地址转换为存储器单元102的物理地址的转换查找缓冲器(tlb111)。例如,响应于从处理单元101a-101c中的一个接收到缓冲区索引,运行时功能110可以使用tlb111来执行查找,以识别缓冲区数据106a的第一段的存储器单元102中的物理地址。可以使用这些物理地址来直接写入存储器单元102(例如,当处理单元101a-101c不能通过虚拟地址访问存储器时)。在一些实施例中,运行时功能110可以被配置为向处理单元101a-101c提供物理地址。例如,当dsp101c仅能够使用物理地址来访问存储器时,运行时功能110可以向dsp101c提供物理地址,该物理地址可以用于对存储器单元102中的缓冲区数据106a-106n进行直接访问120。

图2、图3a到图3b根据各个实施例,分别示出了用于多处理器计算设备对稀疏的、不相交的、只写的并发缓冲区访问进行同步的方法200、300和350。在一些实施例中,多处理器计算设备(例如,图1中的多处理器计算设备100)可以执行或者以其它方式支持运行时功能(例如,图1中的运行时功能110),以执行这些方法的操作中的一个或多个。在各个实施例中,可以经由多处理器计算设备的处理单元中的一个(例如,应用处理器或cpu(如,图1中的cpu101a))来执行方法200、300和350的操作。此外,在一些实施例中,来自方法200、300、350的各种操作可以以不同于图2、3a-3b中所描绘的各种顺序或步骤来执行。

图2根据各种实施例,示出了用于多处理器计算设备对用于应用程序的缓冲区数据的并发sdwo缓冲器访问进行同步的方法200。在各个实施例中,该应用程序可以是游戏物理引擎、步进模拟程序或者如本文所描述的其它复杂应用程序。

在方框202中,多处理器计算设备的处理器可以识别(或者检测)来自一个或多个处理单元访问与应用程序相关联的缓冲区的并发请求。每个处理单元(例如,cpu、dsp、gpu等等)可以执行与该应用程序相关联的软件(例如,例程、任务、内核等等)。在执行各个任务的过程期间,处理单元中的一个或多个可以请求将数据读取和/或写入到应用程序的缓冲区数据。例如,处理单元可以进行api调用以将链表或子树的数据对象加载到本地后备存储中。多处理器计算设备可以基于任务代码的分析来检测任何这些访问请求。例如,多处理器计算设备经由运行时功能,可以识别代码中的api调用的调用,以用于与处理单元相关联的各种任务。在各个实施例中,访问缓冲区的多个并发请求中的每一个可以对应于使用该缓冲区作为存储器池的单独数据结构的访问,其中该数据结构可以是链表或者树中的一种。例如,每个并发请求可以由访问单独的链表或者树的单独子树的不同处理单元来进行,所有这些都在与存储器池相同的缓冲区中进行分配。

在方框203中,多处理器计算设备的处理器可以识别所识别的访问缓冲区的并发请求中的任何一个(其是稀疏的、不相交的、以及只写的(sdwo))。例如,多处理器计算设备的处理器可以识别与链表或者子树中的数据对象相对应的并发写请求。在一些实施例中,多处理器计算设备可以基于在处理单元上执行的任务(或任务代码)所采用的api调用的类型来进行该识别。例如,多处理器计算设备可以确定并发请求是否对应于用于sdwo缓冲区访问的预定义的“特殊”sdwoapi调用(例如,sdwo缓冲区访问请求)。再举一个例子,多处理器计算设备可以确定处理单元上的任务代码是否调用“sdwo_write()”api调用。如上所述,可以在启动或执行应用程序代码(或任务代码)之前声明这种sdwoapi调用,例如由应用程序员声明的api调用。

在一些实施例中,方框203中的识别可以是基于并发请求是否与预定义的缓冲区索引相关联。例如,多处理器计算设备可以配置多处理器计算设备的硬件以检测所述多个处理单元通过典型的api调用来对缓冲区进行写操作。在该情况下,多处理器计算设备可以将针对缓冲区的这些写操作转换为针对写集合的写操作。

在方框204中,多处理器计算设备的处理器可以识别所识别的访问缓冲区的并发请求中的不是sdwo(即,非sdwo请求)的任何一个。例如,多处理器计算设备可以确定并发请求中的任何一个是否与未被称为sdwo相关的api调用有关。

对于非sdwo请求,多处理器计算设备可以进行常规操作以提供对相关联的处理单元和/或任务的缓冲区访问。因此,在方框205中,多处理器计算设备的处理器可以经由常规运行时机制,来执行所识别的非sdwo请求。例如,响应于确定访问缓冲区的某些并发请求不是sdwo,多处理器计算设备的处理器可以通过执行可能潜在地导致或利用任务序列化的典型操作、高速缓存抖动和/或全缓冲区复制,来串行地执行这些缓冲区请求。在不利用sdwo操作的处理单元上运行的任务可以正常执行,其具有通常的惩罚(例如,全缓冲区复制等等)。在一些情况下,多处理器计算设备(例如,经由运行时功能)可以将缓冲区串行地传送到进行访问缓冲区的并发请求的一个或多个处理单元中的每一个处理单元。换言之,多处理器计算设备可以执行典型的序列化操作以使处理单元能够依次地单独访问缓冲区。这种典型操作可能创建冗余副本和缓冲区数据的传输(例如,传送到处理单元的各个后备存储)。由于处理单元的潜在差异,缓冲区的传输可以是串行的,以确保一致性。

响应于识别访问缓冲区的并发请求(其是sdwo的),在方框206中,多处理器计算设备的处理器可以为与所识别的并发sdwo请求相关联的所述一个或多个处理单元中的每一个处理单元配置(或者设置)写集合。例如,多处理器计算设备可以在执行请求sdwo缓冲区访问的任务的所述一个或多个处理单元中的每一个处理单元上配置每设备写集合。如上所述,每个写集合可以是一组{索引、数据值}对。与将缓冲区的副本传送到每个处理单元相比,为每个处理单元设置这些写集合可以导致更少的系统流量。

方框207-209中的操作可以构成一个循环或周期,在该循环或周期期间,多处理器可以被配置为等待预先规定的时段,或者直到各个处理单元关于相应的写集合已经解决了所有并发的sdwo操作为止。在方框207中,多处理器计算设备可以同时地执行与所识别的sdwo请求相关联的任务。

在方框208中,多处理器计算设备的处理器可以从所述多个处理单元中的一个或多个处理单元接收写集合。例如,多处理器计算设备可以从一个或多个处理单元接收一组缓冲区索引、数据值对,其中每个写集合可以是一组缓冲区索引、值对。可以将写集合数据接收成关于处理单元完成的任务。但是,在方框207-209的操作循环的一些迭代中,可以不接收写集合数据,因为处理单元仍然可以执行任务操作以生成缓冲区索引和数据信息来进行传输。

在确定框209中,多处理器计算设备的处理器可以确定所有并发sdwo请求是否完成。换言之,多处理器计算设备可以等待直到从与所识别的并发sdwo请求相关联的所有处理单元接收到写集合数据为止,和/或直到用于执行与所识别的sdwo请求相关联的任务的时段已经过去或者以其它方式结束为止。例如,多处理器计算设备可以进行等待,直到全部的所述多个处理单元已经完成执行用于写入相关联的写集合的相应任务为止。再举一个例子,多处理器计算设备可以响应于识别应用的代码内的某个标记来确定该时段已完成,其中该标记指示所述多个处理单元所请求的缓冲区访问的完成。

在一些实施例中,多处理器计算设备可以响应于检测到与所识别的sdwo请求相关联的多个处理单元中的每一个处理单元已经完成与sdwo操作相关联的专用api调用(例如,sdwo_wait()),而确定所有并发的sdwo请求已经完成(或者该时段已经过去)。单个处理单元的这种api调用可能并不指示与其它识别的sdwo请求相关联的所有其它处理单元的时段已经结束。相反,诸如“sdwo_wait(b)”之类的api调用可以指示多处理器计算设备在对应于“sdwo_wait(b)”的调用的程序点之后访问更新的写集合数据。在一些实施例中,多处理器计算设备可以等待直到该时段已经过去,各个写集合具有各自的更新结果。

在一些实施例中,可能存在用于多处理器计算设备利用来自相应处理单元的写集合的数据的替代方式。例如,多处理器计算设备可以等待访问写集合的所有任务完成相应的操作(例如,保持单元wait_for(t1)、wait_for(t2)等等、由任务t1-t2调用等等)。再举一个例子,多处理器计算设备可以直接在缓冲区上等待,直到在sdwo_wait(b)调用之前启动的访问写集合的所有任务都完成为止。在一些实施例中,多处理器计算设备可以响应于识别应用的代码中的标记来确定该时段已经完成,其中该标记指示所述多个处理单元所请求的缓冲区访问的完成(即,程序员定义的并发写入周期的结束)。

响应于确定所有的并发sdwo请求尚未完成(即,确定框209=“否”),多处理器计算设备可以在方框207中继续执行任务。在一些情况下,多处理器计算设备可以在方框208的后续操作期间,从各种处理单元的写集合中接收缓冲区索引和数据。换言之,处理单元的各种执行任务可以间歇地发送要写入到缓冲区的具有数据的相应写集合。

响应于确定所有的并发sdwo请求已经完成(即,确定框209=“是”),在方框210中,多处理器计算设备的处理器可以从所述多个处理单元中的一个或多个处理单元的写集合获得缓冲区索引和数据的集合。换言之,多处理器计算设备可以获得并合并响应于设置各个写集合而接收的所有写集合数据。例如,多处理器计算设备可以从每个处理单元获得一个或多个数据对,其指示用于更新缓冲区的数据(例如,(索引、元素-值)对的集合)。如上所述,来自与sdwo请求(以及其中的数据)相关联的每个处理单元的写集合可以在不同的时间变得可用于多处理器计算设备,例如在方框207-209的操作期间间歇地可用。

在方框212中,多处理器计算设备的处理器可以使用所获得的缓冲区索引和来自一个或多个处理单元的写集合的数据来写入缓冲区。例如,多处理器计算设备可以将数据写入到包括最新版本的缓冲区数据的后备存储中(例如,直接写入与应用程序的缓冲区相关联的存储器位置)。

在一些实施例中,可以经由协调器处理器来执行方框210-212的操作。因此,在一些实施例中,多处理器计算设备可以执行操作来识别协调器处理器。如上所述,这种中央处理器可以是具有后备存储的设备或其它功能,该后备存储在并发写入请求的时间,存储用于缓冲区的有效数据。例如,可以将这种协调器处理器识别成与具有缓冲区数据的有效表示的后备存储相对应的cpu。在这些实例中,多处理器计算设备可以将关于写集合的任何信息发送到协调器处理器,以便响应于确定同步时段完成而写入后备存储。作为响应,协调器处理器可以使用写集合信息来写入后备存储。例如,在相关联的任务完成时,指定的cpu协调器处理器可以从每个处理单元接收写集合(例如,(索引,元素-值)对的集合),然后,协调器处理器可以使用来自所接收的写集合的数据来更新相应的后备存储,其将后备存储指定为存储最新的数据。

图3a到图3b示出了用于使得处理单元在可能时直接寻址缓冲区数据的实施例方法300、350。例如,当缓冲区由较大单元组成时(例如,每个缓冲区单元是较大的“结构”数据对象),多处理器计算设备在将写入的数据元素作为向指定的处理单元(208)发送写集合的一部分(其中该处理单元将使用该写集合(210、212)来更新缓冲区)时,可能招致显著的成本(例如,能量需求的增加和/或处理开销的增加)。因此,多处理器计算设备可以利用处理单元直接访问存储器单元的任何能力(例如,svm能力),以避免不必要的缓冲区复制。目标是避免在系统总线上双重传输较大数据元素(即,首先在接收写集合时,其次在将写集合数据写入到缓冲区时),同时保持sdwo的好处。相反,各个实施例允许所接收的写集合携带不包括所写入的缓冲区元素数据的替代信息。

图3a根据各种实施例,示出了用于多处理器计算设备将针对应用的缓冲区数据的并发sdwo缓冲区访问进行同步的方法300。方法300类似于参照图2所描述的方法200,除了方法300包括用于处理单元执行虚拟地址查找的操作(其可能受限于在物理地址上的操作)之外。当并发处理单元完成执行时,仅从处理单元(302)接收所写入的缓冲区单元的缓冲区索引,而没有如208中的那样的缓冲器元素数据。多处理器计算设备可以在保存缓冲区的最新内容的后备存储中查找所接收的缓冲区索引的虚拟地址,将虚拟地址转换为物理地址,并且将物理地址发送回处理单元。处理单元可以使用物理地址将相应的缓冲区单元直接写入到后备存储中,从而避免较大缓冲区单元的双重传输。在另一个实施例中,为了提高写入应用程序的缓冲区的效率,多处理器计算设备可以利用各个处理单元的任何一致性能力来实现对缓冲区数据的直接写入。例如,如图3b中所示,一些处理单元可以具有svm能力,而其它处理单元可以不具有svm能力。因此,多处理器计算设备可以自动地确定具有svm能力的设备应当使用常规机制以便来直接访问缓冲区,但是确定非svm处理单元应当使用写集合来执行应用的sdwo缓冲区访问。用此方式,与本文所描述的协调器处理器所完成的写入相反,向缓冲区的写入可以由一些处理单元本身来完成。

参见图3a,方框202-207、209的操作可以类似于参照图2所描述的方法200的相同编号的方框的操作。在方框302中,多处理器计算设备的处理器可以从处理单元接收用于缓冲区的缓冲区单元的索引。在方框304中,多处理器计算设备的处理器可以执行虚拟地址转换,以识别与所接收的索引相对应的缓冲器单元的物理地址。

在确定所有并发的sdwo请求已经完成(或者用于执行并发的sdwo请求的时段结束)之后(即,确定框209=“是”),在方框306中,多处理器计算设备的处理器可以向处理单元发送用于直接写入缓冲器的物理地址(例如,将缓冲器单元值直接写入缓冲区)。随后,处理单元可以使用这些物理地址来执行sdwo缓冲区访问,而不需要可能较大的缓冲区单元的双重传输。

图3b根据各种实施例,示出了用于多处理器计算设备将针对应用的缓冲区数据的并发sdwo缓冲区访问进行同步的方法350。方法350类似于参照图2所描述的方法200,除了方法350包括用于配置有适当功能(例如,svm功能)的处理单元实现对缓冲区的直接写入的操作之外。多处理器计算设备(例如,经由如本文所描述的协调器处理器)可以串行地向与并发sdwo请求相关联的处理单元指示何时这些处理单元可以直接将相应的写集合写入到具有最新的缓冲区数据的单个后备存储中。例如,多处理器计算设备(例如,经由协调器处理器)可以监测来自处理单元的消息的接收,该消息指示处理单元何时完成sdwo缓冲区访问的执行。该处理单元可以等待接收来自多处理器计算设备(例如,经由协调器处理器)的指示该处理单元可以使用相应的写集合来直接更新后备存储的响应。响应于接收到该信号(例如,来自协调器处理器),处理单元可以执行驱动程序管理的刷新,显式高速缓存刷新,和/或配置转换查找缓冲器(tlb)以一致性地更新后备存储。用此方式,可以不发送用于一些处理单元的写集合(例如,发送到协调器处理器),当所有的并发处理单元完成执行时,一些处理单元可以直接写入存储器。

参见图3b,方框202-207的操作可以类似于参照图2所描述的方法200的相同编号的方框的操作。在方框351中,多处理器计算设备的处理器可以从不能直接写入缓冲区数据的一个或多个处理单元接收写集合。

一旦完成了所有并发请求(即,确定框209=“是”),在确定框352中,多处理器计算设备的处理器可以确定请求并发sdwo缓冲区访问(或写入)的任何处理单元是否能够直接写入缓冲区数据(或者直接寻址缓冲区)。例如,多处理器计算设备可以确定处理单元是否可以直接寻址虚拟地址,但可能缺乏完整的svm高速缓存一致性。可以指导任何这些处理单元直接对存储器执行回写,以便节省缓冲区的冗余复制。

响应于确定请求并发sdwo写入的处理单元不能直接寻址缓冲区(即,确定框352=“否”),多处理器计算设备可以关于这些处理单元的写集合,执行如参照图2所描述的方框210-212的操作。

响应于确定请求并发写入的处理单元能够直接寻址缓冲区(即,确定框352=“是”),在方框354中,多处理器计算设备的处理器可以串行地向这些处理单元中的每一个发送信号,以直接写入缓冲区。换言之,这些处理单元可以被配置为同时地执行(在构建它们各自的写集合的过程中),并在完成执行时,等待用于将它们的写集合直接地串行写入缓冲区(例如,具有缓冲区的最新数据的后备存储)的信号。该信号可以使这些处理单元中的每一个将相应的写集合数据写入单个后备存储(例如,与指定的协调器处理器相关联的缓冲区数据的后备存储)。例如,协调器处理器(例如,具有缓冲区的有效后备存储的cpu)可以发信号通知处理单元串行化设备回写,其通过适当的驱动器刷新来打断。

在一些实施例中,多处理器计算设备可以执行方法350的操作,以通过有资格直接写入缓冲区(或者后备存储)的处理单元和/或能够向协调器处理器提供写集合数据以便直接写入后备存储的处理单元,来处理并发sdwo请求。

参考图3a到图3b所描述的实施例操作提供了可以帮助多处理器计算设备避免更新的数据条目的“双重复制”的操作(例如,避免第一次复制到协调器处理器,然后由协调器处理器第二次复制到后备存储)。利用方法300和350,多处理器计算设备可以替代地使处理单元能够将数据直接写入缓冲区。这些实施例方法对于各个缓冲区条目非常大的情况是有用的。

在一些情况下,可能不需要高速缓存一致性来确保一致性。因此,当不需要一致性时,禁用高速缓存一致性功能/策略可以节省相当大的功率。

图4根据一些实施例,示出了伪代码400的非限制性示例,其中该伪代码400可以由多处理器计算设备的处理器执行以实现稀疏的、不相交和只写的并发缓冲区访问。例如,伪代码400可以由运行时功能执行,以管理被配置为引起与特定应用程序的缓冲区的sdwo缓冲区访问相对应的一个或多个任务或其它可执行元件。

伪代码400可以包括用于为应用程序创建缓冲区的第一部分402(例如,包括用于游戏物理引擎的100000个数据对象或条目的缓冲区‘b’等等)。

伪代码400可以包括第二部分404,以便启动由多处理器计算设备的各个处理单元(例如,cpu、gpu、dsp、定制硬件加速器等等)执行的任务、内核和/或其它操作。在启动每个任务时,多处理器计算设备可以提供用于读取和/或写入的数据的副本(例如,缓冲区‘a’、‘c’、‘d’、‘e’等等),配置与sdwo缓冲区‘b’相关联的写集合。换言之,多处理器计算设备可以向处理单元提供一些数据的副本,但是仅可以配置与sdwo缓冲区相关联的写集合。

伪代码400可以包括第三部分406,其使得多处理器计算设备进行等待,直到每个处理单元已经基于相应代码(例如,任务)的执行提供了至少缓冲区索引和数据为止。例如,多处理器计算设备可以进行等待,直到cpu在执行“cpu_function”任务后返回缓冲区索引和数据、gpu在执行“gpu_kernel”内核后返回缓冲区索引和数据、dsp在执行“dsp_kernel”内核后返回缓冲区索引和数据、以及自定义硬件加速器在执行“custom_hw_acc1”任务后返回缓冲区索引和数据为止。

当所有任务都完成时,多处理器计算设备可能已经从各个处理单元(和相应的任务)接收到(例如,间歇地等等)所有相关联的写集合,随后可以更新后备存储以更新缓冲区。在一些实施例中,第三部分406中的操作可以包括将所接收的写集合数据提供给协调器处理器设备、以及用于更新后备存储器的操作(即,更新缓冲区的公共存储器)。

图5a到图5b根据一些实施例,示出了可以由多处理器计算设备的处理单元执行的伪代码500、550的非限制性示例。响应于多处理器计算设备执行图4中所示出的伪代码400的部分402-404的操作,至少cpu、dsp或gpu可以调用伪代码500、550。在一些实施例中,可以针对各种运行时系统(例如,opencl)来实现伪代码500、550。

在图5a中,伪代码500可以包括由处理单元(例如,gpu等)执行的函数(‘f’)。该函数可以利用普通缓冲区‘c’和用于sdwo缓冲器‘b’的写集合(例如,指向写集合的指针)的输入参数。在执行该函数时,处理单元最终可以使用写集合(例如,sdwo_write(...))进行特殊的api调用。这种api调用可以包括提供用于规定以下信息的参数:写集合(例如,b_sdwo)、要写入到的缓冲区的索引(例如,‘i’)、以及写入该缓冲区索引的数据(例如,值)。换言之,sdwo_write()可以是从任务中使用的用于写入缓冲区单元的api调用。

图5b中的伪代码550类似于可以由处理单元执行的典型功能。例如,伪代码550可以不包括用于调用或者以其它方式来访问如本文所描述的写集合的任何特殊api调用。但是,当多处理器计算设备被修改为包括能够识别处理单元对sdwo缓冲区访问的请求的专用硬件时,根据各种实施例,伪代码550可用于调用sdwo优化。

可以使用包括个人计算机和膝上型计算机的各种形式的计算设备来实现各个实施例。在图6中示出了适合于实现各个实施例的多处理器计算设备600的一个例子。在各个实施例中,多处理器计算设备600可以包括耦合到触摸屏控制器604和内部存储器602的处理器601。处理器601可以是被设计为实现通用任务或特定处理任务的一个或多个多核ic。内部存储器602可以是易失性存储器和/或非易失性存储器,还可以是安全和/或加密存储器,或者非安全和/或非加密存储器、或者其任意组合。此外,触摸屏控制器604和处理器601还可以耦合到触摸屏面板612,例如,电阻式感应触摸屏、电容感应触摸屏、红外线感测触摸屏等等。多处理器计算设备600可以具有用于进行发送和接收的一个或多个无线电信号收发机608(例如,射频(rf)无线电装置)和天线610,它们彼此之间相耦合和/或耦合到处理器601。收发机608和天线610可以结合上面所提及的电路进行使用,以实现各种无线传输协议栈和接口。多处理器计算设备600可以包括蜂窝网络无线调制解调器芯片616,后者经由蜂窝网络进行通信并耦合到处理器。多处理器计算设备600可以包括耦合到处理器601的外围设备连接接口618。外围设备连接接口618可以被单独地配置为接受一种类型的连接,或者被多重地配置为接受多种类型的物理和通信连接、共同或专有连接(例如,usb、火线、thunderbolt或pcie)。此外,外围设备连接接口618还可以耦合到类似配置的外围设备连接端口(没有示出)。此外,多处理器计算设备600还可以包括用于提供音频输出的扬声器614。此外,多处理器计算设备600还可以包括使用塑料、金属、或材料的组合构成的壳体620,以包含本文所讨论的所有部件或者一些部件。多处理器计算设备600可以包括耦合到处理器601的电源622,例如一次性或可充电电池。此外,该可充电电池还可以耦合到外围设备连接端口,以便从多处理器计算设备600之外的源接收充电电流。

所示出和描述的各种实施例只是被提供成示例,以说明权利要求的各种特征。但是,关于任何给定实施例所示出和描述的特征并不一定限于相关联的实施例,可以与所示出和描述的其它实施例一起使用或者组合。此外,权利要求并不意图受到任何一个示例性实施例的限制。

本文所描述的各种处理器可以是能够被软件指令(应用)配置以执行各种各样的功能(其包括本文所描述的各个实施例的功能)的任何可编程微处理器、微计算机或者多处理器芯片或芯片集。在各个设备中,可以提供多个处理器,例如,一个处理器专用于无线通信功能,一个处理器专用于运行其它应用。通常,软件应用可以在被访问之前存储在内部存储器中,并装载到处理器中。处理器可以包括足够用于存储应用软件指令的内部存储器。在很多设备中,内部存储器可以是易失性存储器或者非易失性存储器(例如,闪存)或者二者的混合。为了便于说明目的,对于存储器的通常引用,指代处理器可访问的存储器,其包括插入在各个设备中的内部存储器或者移动存储器、以及这些处理器中的存储器。

上述的方法描述和处理流程图仅仅是用作为说明性例子,而不是旨在要求或者隐含着必须以所给出的顺序来执行各个实施例的步骤。如本领域普通技术人员所应当理解的,可以以任何顺序来执行上述的实施例中的操作顺序。诸如“其后”、“转而”、“接着”等等之类的词语,并不旨在限制这些操作的顺序;这些词语仅仅只是用于引导读者遍历该方法的描述。此外,任何对权利要求元素的单数引用(例如,使用冠词“一个(a)”、“某个(an)”或者“该(the)”),不应被解释为将该元素限制为单数形式。

结合本文所公开的实施例描述的各种示例性的逻辑框、模块、电路和算法操作均可以实现成电子硬件、计算机软件或二者的组合。为了清楚地表示硬件和软件之间的这种可交换性,上面对各种示例性的部件、框、模块、电路和操作均围绕相应功能进行了总体描述。至于这种功能是实现成硬件还是实现成软件,取决于特定的应用和对整个系统所施加的设计约束条件。熟练的技术人员可以针对每个特定应用,以变通的方式实现所描述的功能,但是,这种实现决策不应解释为背离本发明的保护范围。

用于执行本文所述功能的通用处理器、数字信号处理器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga)或其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件部件或者其任意组合,可以用来实现或执行结合本文所公开的实施例描述的用于实现各种示例性的逻辑、逻辑框、模块和电路的硬件。通用处理器可以是微处理器,或者,该处理器也可以是任何常规的处理器、控制器、微控制器或者状态机。处理器也可以实现为计算设备的组合,例如,dsp和微处理器的组合、若干微处理器、一个或多个微处理器与dsp内核的结合,或者任何其它此种结构。替代地,一些操作或方法可以由特定于给定的功能的电路来执行。

在一个或多个实施例中,本文所述功能可以用硬件、软件、固件或它们任意组合的方式来实现。当在软件中实现时,可以将这些功能作为非临时性处理器可读、计算机可读或者服务器可读或者非临时性处理器可读存储介质上的一个或多个指令或代码进行存储或者通过其来传输。本文所公开的方法或算法的操作,可以体现在处理器可执行软件模块或者处理器可执行软件指令中,后者可以位于非临时性计算机可读存储介质、非临时性服务器可读存储介质和/或非临时性处理器可读存储介质上。在各个实施例中,这些指令可以是存储的处理器可执行指令或者存储的处理器可执行软件指令。有形的、非临时性计算机可读存储介质可以是计算机能够存取的任何可用介质。举例而言,但非做出限制,这种非临时性计算机可读介质可以包括ram、rom、eeprom、cd-rom或其它光盘存储器、磁盘存储器或其它磁存储设备、或者能够用于存储具有指令或数据结构形式的期望的程序代码并能够由计算机进行存取的任何其它介质。如本文所使用的,磁盘和光盘包括压缩光盘(cd)、激光光盘、光盘、数字通用光盘(dvd)、软盘和其中磁盘通常磁性地复制数据,而光盘则用激光来光学地复制数据。上述的组合也应当包括在非临时性计算机可读介质的保护范围之内。另外,一种方法或算法的操作可以作为一个代码和/或指令集或者其任意组合,位于有形的、非临时性处理器可读存储介质和/或计算机可读介质上,其中该非临时性处理器可读存储介质和/或计算机可读介质可以并入到计算机程序产品中。

为使本领域任何普通技术人员能够实现或者使用本发明的实施例方法,上面围绕所公开的实施例进行了描述。对于本领域普通技术人员来说,对这些实施例的各种修改是显而易见的,并且,本文定义的总体原理也可以在不脱离本发明的精神或保护范围的基础上应用于其它实施例。因此,本公开内容并不限于本文所示出的实施例,而是与所附权利要求书和本文公开的原理和新颖性特征的最广范围相一致。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1