用于众核处理的快速同步屏障的技术的制作方法

文档序号:11288471阅读:274来源:国知局
用于众核处理的快速同步屏障的技术的制造方法与工艺

相关美国专利申请的交叉引用

本申请要求于2014年12月3日提交的题为“technologiesforfastsynchronizationbarriersformany-coreprocessing(用于众核处理的快速同步屏障的技术)”的美国实用新型专利申请序列号14/568,890的优先权。

技术背景

对于当前的计算设备和应用程序,高效的多线程性能正变得越来越重要。openmp是一种用于共享内存并行编程的流行应用程序编程接口(api)。openmp指定了可以用于协调在线程队(threadteam)中执行的多个线程的同步屏障特征。一般地,在对程序的执行可以进行之前,线程队的所有线程必须到达屏障。openmp还指定了其中多个线程可以创建和执行任务的任务系统。必须在线程可能退出同步屏障之前完成所有任务。因此,通常在线程在同步屏障中等待的同时执行任务。

通常通过使线程以某种方式彼此等待来实现同步屏障。例如,在树形屏障中,线程以树形模式彼此等待,从叶子开始并扇入直达根部,然后反向从根部朝向叶子向下扇出。作为另一个示例,在分级屏障中,线程还以树模式彼此等待,但由相同处理器核执行的线程被分组为在树中彼此靠近的叶节点。作为第三个示例,在传播屏障中,线程以本质上形成一组交叠树的更复杂的模式彼此等待。在基于高速缓存的处理器架构中,完成屏障运算所需的时间可以由各个线程在所述线程与其他线程通信而穿过同步屏障时引发的高速缓存未命中(cachemiss)的数量来支配或限制。

附图简述

在附图中通过示例的方式而非限制性的方式展示了在此所描述的概念。为了说明的简单和清晰起见,附图中所展示的元件不一定按比例绘制。在认为适当的情况下,在附图当中重复参考标号以表示相应或相似的元件。

图1是用于快速多线程化同步的计算设备的至少一个实施例的简化框图;

图2是可以由图1的计算设备建立的环境的至少一个实施例的简化框图;

图3a和图3b是可以由图1和图2的计算设备执行的用于快速多线程化同步的方法的至少一个实施例的简化流程图;以及

图4是展示了可以由图1和图2的计算设备建立的屏障通信网络的示意图;

图5a-5c是展示了可以由图1和图2的计算设备执行的用于快速多线程化同步的方法的至少一个实施例的伪代码。

具体实施方式

虽然本公开的概念易于经历各种修改和替代形式,但是在附图中已经通过示例的方式示出了其特定实施例并且将在此对其进行详细描述。然而,应当理解的是,并不旨在将本公开的概念限制于所公开的特定形式,而相反,意图是覆盖与本公开和所附权利要求书一致的所有修改型式、等效型式和替代型式。

在说明书中提到的“一个实施例”、“实施例”、“说明性实施例”等指示所描述的实施例可以包括具体特征、结构或特性,但每一个实施例可能或者可能不一定包括该具体特征、结构或特性。而且,此类短语不一定指相同的实施例。进一步地,当结合实施例描述具体特征、结构或特性时,应认为,无论是否明确描述,结合其他实施例来实现这种特征、结构或特性是在本领域的普通技术人员的知识范围内。另外,应当认识到,包括在采用“a、b和c中的至少一个”形式的列表中的项可意指(a);(b);(c);(a和b);(a和c);(b和c);或(a、b和c)。类似地,采用“a、b或c中的至少一者”形式列出的项可意指(a);(b);(c);(a和b);(a和c);(b和c);或(a、b和c)。

在一些情况下,可以在硬件、固件、软件或其任何组合中实施所公开的实施例。所公开的实施例还可以实现为一个或多个瞬态或非瞬态机器可读(例如,计算机可读)存储介质所携带或其上所存储的指令,这些指令可以由一个或多个处理器读取和执行。机器可读存储介质可以实施为任何存储设备、机制、或用于存储或传输采用机器可读形式的信息的其他物理结构(例如,易失性或非易失性存储器、介质盘或其他介质设备)。

在附图中,一些结构特征或方法特征可能以特定安排和/或顺序示出。然而,应当理解的是,可以不需要这种特定安排和/或顺序。相反,在一些实施例中,可以采用与在说明性附图中所示出的方式和/或顺序不同的方式和/或顺序来安排这种特征。另外,在具体的图中包括结构特征或方法特征并不意味着暗示在所有实施例中都需要这种特征,并且在一些实施例中,可以不包括这种特征或者这种特征可以与其他特征组合。

现在参考图1,在说明性实施例中,用于快速多线程化同步的计算设备100包括处理器120、i/o子系统126、存储器128以及数据存储设备130。在使用中,如下面更详细地讨论的,计算设备100被配置成用于使用处理器120的硬件源(如硬件线程和/或处理器子核)同时执行许多任务。线程进入同步屏障后,线程与在同一处理器核上执行的其他线程一起执行局部同步。同一处理器核上的局部同步可能会迅速发生,例如使用处理器核的专用高速缓存。在局部同步之后,每个线程与可以由处理器120的不同处理器核执行的源线程一起执行远程同步。根据n路全混洗配置来分配源线程,其中n是每个处理器核的硬件线程数。在远程同步之后,每个线程再次与由同一处理器核执行的其他线程一起执行局部同步。计算设备100继续在远程同步和局部同步之间交替,直到所有线程都已经同步。

通过交替进行远程同步和局部同步,计算设备100可以减少在执行同步屏障期间引发的高速缓存未命中数。另外,计算设备100可以并行地对多个线程引发高速缓存未命中,这样可以提高性能并减少总体延时。计算设备100可以为所有级别的同步屏障(即,对于远程同步和局部同步的每次迭代)提供那些性能的改进。对于使用xeonphitm协处理器测试的计算设备100的某些实施例,同步屏障性能可能几乎和传统树形屏障的两倍一样快。通过包括对布尔标志参数上的全归约or的支持,计算设备100可以支持与openmp任务语义兼容的事务同步屏障的实现,如题为“technologiesforefficientsynchronizationbarrierswithworkstealingsupport(用于利用工作窃取支持进行有效同步屏障的技术)”的共同未决的美国专利申请序列号xx/xxx,xxx中进一步描述的。

计算设备100可以实施为能够执行在此所描述的功能的任何类型的计算或计算机设备,包括但不限于计算机、多处理器系统、服务器、机架式服务器、刀片式服务器、膝上型计算机、笔记本计算机、网络设备、网络设备、分布式计算系统、基于处理器的系统和/或消费者电子设备。如图1所示,计算设备100示例性地包括处理器120、输入/输出子系统126、存储器128以及数据存储设备130。当然,在其它实施例中,计算装置100可包含其它或附加组件,诸如在服务器装置中发现的组件(例如各种输入/输出装置)。另外,在一些实施例中,说明性部件中的一个或多个说明性部件可以结合在另一部件中,或以其他方式形成其一部分。例如,在一些实施例中,存储器128或其部分可以结合在处理器120中。

处理器120可以被实施为能够执行本文中所描述的功能的任何类型的多核处理器。例如,处理器120可以实现为(多个)多核处理器、(多个)众核处理器、(多个)协处理器、数字信号处理器、微控制器或其他处理器或处理/控制电路。处理器120包括两个或多个处理器核122,每个处理器核122都是能够执行编程指令的独立处理单元。每个处理器核122可以包括专门的专用高速缓存存储器或与其耦合。说明性处理器120包括两个处理器核122a和122b;在一些实施例中,处理器120可以包括更多的处理器核122(例如,57个处理器核122、60个处理器核122、61个处理器核122或更多的处理器核122)。每个处理器核122包括两个或更多个硬件线程124;在说明性实施例中,每个处理器核122包括四个硬件线程124。每个硬件线程124可以体现为能够执行编程指令的任何逻辑处理器、子核、硬件线程或其他执行资源。因此,在具有各自具有四个硬件线程124的60个处理器核122的处理器120的实施例中,处理器120可以包括240个总硬件线程124。处理器核122的每个硬件线程124可以共享相同的专用高速缓存。另外,尽管说明性计算设备100包括单个众核处理器120,但是本文公开的技术也可应用于具有两个或更多个处理器120(例如,耦合到众核协处理器的服务器处理器)的计算设备100。

存储器128可实施为能够执行本文描述的功能的任何类型的易失性或非易失性存储器或数据存储装置。在运算中,存储器128可存储在计算装置100运算期间使用的各种数据和软件,如运算系统、应用、程序、库以及驱动。存储器128以通信方式经由i/o子系统126耦合到处理器120,i/o子系统104可实施为电路和/或组件以便于与计算装置100的处理器120、存储器128和/或其它组件的输入/输出操作。例如,i/o子系统126可以被实施为或以其他方式包括用于促进输入/输出操作的存储器控制器中枢、输入/输出控制中枢、固件设备、通信链路(即,点到点链路、总线链路、线、电缆、光导、印刷电路板迹线等)和/或其他部件和子系统。在一些实施例中,i/o子系统126可以形成片上系统(soc)的一部分并且可以与计算设备100的处理器120、存储器128以及其他部件一起结合在单个集成电路芯片上。数据存储设备130可以被实施为被配置成用于对数据进行短期或长期存储的任何类型的一种或多种设备,如例如,存储器设备和电路、存储器卡、硬盘驱动器、固态驱动器或其他数据存储设备。

计算设备100还可以包括通信子系统132,所述通信子系统可以被实施为能够使计算设备100与其他远端设备之间通过计算机网络(未示出)的通信成为可能任何通信电路、设备、或其集合。通信子系统132可以被配置成用于使用任何一种或多种通信技术(例如,有线或无线通信)以及相关联的协议(例如,以太网、wimax等)来实现这种通信。

现参考图2,在说明性的实施例中,计算设备100在运算期间建立环境200。示例性环境200包括线程管理模块202、局部屏障模块206、远程屏障模块210以及屏障网络模块214。环境200的各种模块可以被实施为硬件、固件、软件或其组合。例如,环境200的模块、逻辑和其他部件中的每一者可以形成计算设备100的处理器120或其他硬件部件的一部分或以其他方式由所述计算设备的所述处理器或所述其他硬件部件建立。这样,在一些实施例中,环境200的模块中的一个或多个模块可以实施为电子设备的电路或集合(例如,线程管理电路、局部屏障电路、远程屏障电路等)。

线程管理模块202被配置成用于创建、执行和以其他方式管理一个或多个线程204。线程204中的每一个可以体现为操作系统线程,所述操作系统线程由可执行线程、应用程序线程、工作线程、轻量型线程或能够由硬件线程124执行的其他程序进行管理。线程204中的每一个可以被命中或以其他方式被绑定以在硬件线程124之一上执行。因此,虽然被展示为包括两个线程204a、204b,但环境200可以包括更多的线程204(例如,每个硬件线程124一个线程204)。线程管理模块202还被配置成用于通过使线程204进入同步屏障并管理所述同步屏障的执行来管理线程同步。

局部屏障模块206被配置成用于使由单个处理器核122执行的第一组线程204同步。局部同步可以以最小的延时迅速完成。局部屏障模块206可以对用于核内通信的每个处理器核122的存储器结构进行维护。所述存储器结构可以体现为在局部高速缓存行区域208中维护结构阵列。每个处理器核122的存储器结构可以装配在可由处理器120寻址的单个存储器高速缓存行内。

远程屏障模块210被配置成用于使在一个处理器核122上执行的线程204a与可以在另一个处理器核122上执行的源线程204b同步。远程同步可能会导致一个或多个缓存缺失,从而可能引发延时。远程屏障模块210可以对用于核间通信的每个线程204的存储器结构进行维护。所述存储器结构可以体现为在全局高速缓存行区域212中维护结构阵列。每个线程204的存储器结构可以装配在可由处理器120寻址的单个存储器高速缓存行内。远程屏障模块210还可以被配置成用于对在同一处理器核122上执行的线程204进行同步。

屏障网络模块214被配置成用于建立在不同处理器核122上执行的线程204之间的连接网络,以允许所有线程204的同步。屏障网络模块214可以为线程204建立n路混洗,其中n是每个处理器核122的硬件线程124的数量(例如,每个处理器核122的四个硬件线程124的4路混洗)。可以在网络表216中预定义硬件线程124之间的关系。例如,网络表216可以标识每个线程204a的源线程204b。

线程管理模块202被进一步配置成用于可替代地重复与远程屏障模块210同步和随后的与局部屏障模块206同步,直到所有线程204被同步。例如,对于各自具有60个处理器核122和四个硬件线程124(对于240个总线程204)的处理器120,线程管理模块202可以可替代地重复远程同步和随后的局部同步四次。

现在参考图3a,在使用中,计算设备100可以执行用于快速多线程化同步的方法300。方法300可以由计算设备100的硬件线程124例如通过执行已被固定到硬件线程124a的线程204a来执行。因此,方法300的多个实例可以由处理器120的硬件线程124同时执行。在框302中开始方法300,其中计算设备100的硬件线程124a进入同步屏障。响应于硬件指令、功能调用、系统调用、陷阱或其他由硬件线程124a处理的事件,硬件线程124a可以进入同步屏障。在一些实施例中,在框304中,硬件线程124a可以利用布尔标志参数进入同步屏障。可以由用户或多线程框架来提供标志参数。如下面进一步描述的,计算设备100可以在执行同步屏障期间执行多个硬件线程124的布尔标志值的逻辑or归约。这种能力可以支持与openmp任务语义兼容的事务同步屏障的实现,如题为“technologiesforefficientsynchronizationbarrierswithworkstealingsupport(用于利用工作窃取支持进行有效同步屏障的技术)”的共同未决的美国专利申请序列号xx/xxx,xxx中进一步描述的。

在框306中,硬件线程124a标识用于核间通信的源端点和目的地端点。源端点和目的地端点可以体现为能够在硬件线程124a(“目的地”硬件线程124a)与可以由不同处理器核122执行的另一个硬件线程124b(“源”硬件线程124b)之间传送数据的任何存储器位置或其他通信信道。另外,如下面进一步描述的,在一些实施例中,源端点和/或目的地端点可以包括与屏障网络中的不同级别相关联的多个存储器位置或通信信道。在一些实施例中,在框308中,计算设备100可以使用预定义的屏障网络表216来标识源硬件线程124b。在每个处理器核122具有四个硬件线程124的说明性实施例中,源硬件线程124的分配可以形成处理器120的所有硬件线程124的4路全混洗。例如,在一些实施例中,处理器120可以执行n个线程204(例如,240个线程),并且每个线程204可以由从零到n-1(例如,0至239)的整数线程id号来标识。n线程204中的每一个都可以被固定或以其他方式在硬件线程124之一上执行,并且因此可以由相关联的处理器核122和硬件线程124来标识。每个硬件线程124可以由从零到三的子核标识符来标识,并且每个处理器核122可以由从零到(例如,0到59)的整数核id号来标识。在那个示例中,可以使用下面的等式1来确定目的地线程idk的源线程idj。可以用等式1的结果来填充屏障网络表216。因此,在说明性实施例中,每个硬件线程124可以使用其自身的线程id来对屏障网络表216进行索引,以确定其分配的源硬件线程124的线程id。

例如,现在参考图4,示意图400示出了用于16个硬件线程124的屏障网络的一个可能的实施例,展示为线程t0至t15(具有对应的线程id0至15)。在局部同步402中,线程t0至t15在同一处理器核122上与线程t局部同步,如下面进一步描述的。在远程同步404中,使用在屏障网络表216中描述的全混洗网络拓扑,线程t0至t15可以与在不同处理器核122上执行的源线程同步。例如,线程t0的子核数为0,核数为0。因此,t0的源线程id为0;也就是说,t0的源线程是t0,意味着线程t0与其自身同步。线程t1的子核数为1,核数为0。因此,t1的源线程id为4,表示t1的源线程为t4。作为另一个示例,线程t4的子核数为0,核数为1。因此,t4的源线程id为1,表示t4的源线程为t1。可以对剩余的线程类似地确定源线程。

尽管被展示为4路全混洗,但是应当理解,屏障网络表216可以描述不同的拓扑。例如,屏障网络表216可以描述n路全混洗,其中n是每个处理器核122的硬件线程124的数量。另外,可以使用全混洗以外的拓扑。然而,全混洗拓扑可以针对每个同步级别使用同一源硬件线程124;其他拓扑可能需要为每个同步级别分配或以其他方式确定不同的源硬件线程124。

返回参考图3a,在一些实施例中,在框310中,硬件线程124a可以将源端点和目的地端点标识为全局存储器结构中的位置。例如,源端点和目的地端点可以指向系统存储器128中的位置,如全局高速缓存行区域212中的位置。由计算设备100执行的每个硬件线程124可以与存储器128中的特定端点相关联。硬件线程124a可以将目的地端点标识为与当前硬件线程124a相关联的端点,并且可以将源端点标识为与源硬件线程124b相关联的端点。

在一些实施例中,在框312中,硬件线程124a可以在每次调用同步屏障之后在两个不同的通信信道之间交替。例如,全局存储器结构可以包括与每个硬件线程124相关联的两个端点,并且硬件线程124a可以在每次进入同步屏障时在这些端点之间交替。包括两个通信信道可以允许计算设备100在执行同步屏障期间执行逻辑or归约。

在框314中,硬件线程124a与在同一处理器核122上执行的硬件线程124同步。硬件线程124a可以通过例如从处理器核122的其他硬件线程124共享的每核存储器结构的读取和/或写入来执行同步,所述核存储器结构可以存储在处理器核122的专用高速缓存中。例如,在一些实施例中,硬件线程124a可以写入存储在局部高速缓存行区域208中的存储器结构。因此,硬件线程124a可以执行同步,而没有对系统存储器128的高速缓存未命中,并且没有关联的高速缓存未命中延时。

在框316中,硬件线程124a存储每个核存储器结构中的感测值。感测值可以体现为每当硬件线程124a进入同步屏障时交替的任何值(例如,奇数/偶数、1/0等)。在一些实施例中,在框318中,硬件线程124a可以在每个核存储器结构中存储布尔标志参数。例如,硬件线程124a可以对每个核存储器结构的一个位中的布尔标志参数进行编码。

在框320中,硬件线程124a从每个核存储器结构中读取其他感测值。其他感测值已经或将要由处理器核122执行的其他硬件线程124写入。在框322中,硬件线程124a暂停,直到由其他硬件线程124写入的所有感测值与由硬件线程124a所存储的感测值相匹配,如框316所述。换句话说,硬件线程124a等待,直到处理器核122的所有硬件线程124已经对每个核存储器结构写入相同的感测值。硬件线程124a可以忙-等待、旋转、产出、休眠或执行任何其他适当的技术来暂停执行。

在框324中,在一些实施例中,硬件线程124a可以将从同一处理器核122的硬件线程124接收到的标志参数值归约到单个标志参数值。在一些实施例中,硬件线程124a可以例如通过从每个感测值来确定位值而从由硬件线程124存储的每个感测值中恢复标志参数值。硬件线程124a可以通过执行逻辑or运算来确定归约值来归约这些标志参数值。

在框326中,在与由同一处理器核122执行的硬件线程124同步之后,硬件线程124a判断是否保留附加同步级别以完成同步。同步级别数可以描述与由同一处理器核122执行的硬件线程124执行局部同步的次数。可以将同步级别数n_级别确定为由计算设备100执行的总线数n的基数n对数的上限(不小于其最小值),其中n是每个处理器的硬件线程124的数量。可以使用下面的等式2来确定n_级别。例如,在具有每个处理器核122四个硬件线程124并具有240个总线程204的实施例中,个级别。作为另一个示例,如图4所示,在具有每个处理器核122四个硬件线程124并具有16个总线程204的实施例中,个级别。如图4的示意图400所示,同步屏障包括局部同步402、远程同步404以及对应于n_级别等于2的和另一个局部同步406。

返回参考图3a,在框328中,硬件线程124a判断是否保留附加同步级别。如果是,则方法300分支到如图3b所示的框334,以执行如下所述的远程同步。如果不保留附加同步级别,则方法300前进到框330。

在框330中,硬件线程124a退出同步屏障。在一些实施例中,在框332中,硬件线程124a可以返回称为归约值的逻辑or归约的标志参数值。归约值可以支持与openmp任务语义兼容的事务同步屏障的实现,如题为“technologiesforefficientsynchronizationbarrierswithworkstealingsupport(用于利用工作窃取支持进行有效同步屏障的技术)”的共同未决的美国专利申请序列号xx/xxx,xxx中进一步描述的。在退出同步屏障之后,方法300循环回到框302以继续多线程执行并很可能进入另一个同步屏障。

返回参考框328,如果仍然保留附加同步级别,则方法300分支到框334,如图3b所示。现在参考图3b,在框334中,被称为目的地硬件线程124a的硬件线程124a与被称为源硬件线程124b的硬件线程124b同步。如结合框308所述,目的地硬件线程124a和源硬件线程124b通常(但不总是)在计算设备100的不同处理器核122上执行的不同的硬件线程124。目的地硬件线程124a可以通过例如从系统存储器128中的全局存储器结构读取和/或写入来执行同步。全局存储器结构可以被存储在例如全局高速缓存行区域212中。因此,目的地硬件线程124a在与源硬件线程124b同步期间可能引发一个或多个高速缓存未命中(例如,用于写入的高速缓存未命中和用于读取的高速缓存未命中)。然而,由同一处理器核122上执行的所有硬件线程124可以并行地引发高速缓存未命中和相关联的延时,这样可以减少总体延时。

在框336中,目的地硬件线程124a将票号写入目的地端点。硬件线程124a可以将票号写入存储器位置、通信信道或其他与当前同步级相关联的目的地端点的字段。票号可以体现为整数计数器,所述整数计数器响应于进入所述同步屏障而由硬件线程124a递增。在一些实施例中,票号可以在超过阈值之后绕回为零,例如绕回模数256。在框338中,目的地硬件线程124a将票号写入系统存储器128中的全局存储器位置,这样可能导致高速缓存未命中。例如,目的地硬件线程124a可以写入与存储在系统存储器128中的全局高速缓存行区域212中的当前同步级别相关联的目的地端点字段,从而导致高速缓存未命中。在一些实施例中,在框340中,硬件线程124a还可以将标志参数值写入全局存储器位置。例如,硬件线程124a可以将标志参数值编码为票号的位。

在框342中,目的地硬件线程124a从源端点读取票号。硬件线程124a可以从存储器位置、通信信道或其他与当前同步级相关联的源端点的字段读取票号。如上所述,源端点与源硬件线程124b相关联,源硬件线程可以将票号写入或已经写入源端点。在框344中,目的地硬件线程124a从系统存储器128中的全局存储器位置读取票号,这样可能导致高速缓存未命中。例如,可以从与存储在系统存储器128中的全局高速缓存行区域212中的当前同步级别相关联的目的地端点字段读取目的地硬件线程124a,从而导致高速缓存未命中。在一些实施例中,在框346中,硬件线程124a还可以从全局存储器位置读取标志参数值。例如,目的地硬件线程124a可以将票号的一位解码为标志参数值。

在框348中,目的地硬件线程124a暂停,直到从源硬件线程124b读取的源票号符合如上在方框336中确定的当前票号。换句话说,目的地硬件线程124a等待,直到源硬件线程124b将同一票号写入全局存储器结构。目的地硬件线程124a可以忙-等待、旋转、产出、休眠或执行任何其他适当的技术来暂停执行。

在一些实施例中,在框350中,目的地硬件线程124a可以用其自己的标志参数值来来归约从源硬件线程124b接收的标志参数值。例如,目的地硬件线程124a可以利用源硬件线程124b和目的地硬件线程124a的标志参数值来执行逻辑or运算。如以上结合图3a的框324所述,在随后的迭代中,目的地硬件线程124a可以利用来自同一处理器核122执行的每个硬件线程124的标志参数值来归约其自己的标志参数值。因此,标志参数值可以在不同处理器核122上执行的硬件线程124之间传播。

在框352中,在硬件线程124a已经与源硬件线程124b同步之后,硬件线程124a递增同步级别。如以上结合框326、328所述,使用同步等级来判断所述同步屏障是否完成。另外,如以上结合框336、342所述,同步级别也可以用于标识存储器位置、通信信道或其它在远程同步期间读取和写入数据的位置。在递增同步级别之后,方法300循环回到框314,如图3a所示,以与由同一处理器核122执行的硬件线程124同步。因此,计算设备100可以继续交替地执行可能涉及在不同处理器核122上执行的硬件线程124的远程同步以及随后的在每个处理器核122上执行局部同步。

现在参照图5a-5c,伪代码500展示了方法300的一个潜在实施例。如图5a所示,伪代码500展示了数据结构208'、212'、216',所述数据结构各自对应于图2的局部高速缓存行区域208、全局高速缓存行区域212和屏障网络表216的一个说明性实施例。如图5b和图5c所示,伪代码500展示了运算302'至352',每一项运算分别与图3a和图3b的框302至352的一个说明性实施例相对应。特别地,如图5b所示,通过在运算316'、318'中将感测值写入与那些其他硬件线程124共享的localcacheline(局部高速缓存行)对象并且然后以紧密循环从那个localcacheline对象读取直到所有感测值都在运算320'、322'中匹配,伪代码500与在运算314'中的相同处理器核122上执行的其他硬件线程124同步。如图所示,伪代码500通过在运算318'中利用标志参数和感测值执行逐位or运算来归约标志参数,然后在运算324'中测试来自其他处理器核122的标志位。

如图5c所示,通过在运算336'、338'中将票号写入globalcacheline(全局高速缓存行)对象的目的地端点并且然后以紧密循环从globalcacheline对象的源端点读取直到所述源端点与运算342'、344'、348'中的票号相匹配,伪代码500与可以由不同的处理器核122执行的源硬件线程124b同步。源和目的地globalcacheline对象通常都不在处理器核122的局部高速缓存中并且因此在运算336'、338'和342'、344'中读取和写入这些对象可能会导致高速缓存未命中。如所示出的,伪代码500通过在运算340'中利用标志参数和票值执行按位or运算并且然后提取来自从所述源端点读取的票的标志值并利用所述标志参数在运算346'、350'中归约所述标志参数。

示例

以下提供了在本文中所公开的技术的说明性示例。所述技术的实施例可以包括以下所描述的示例中的任何一个或多个示例及其任何组合。

示例1包括用一种用于多线程化同步的计算设备,所述计算设备包括:线程管理模块,所述线程管理模块用于通过由所述计算设备的第一处理器核执行的第一线程进入同步屏障;局部屏障模块,所述局部屏障模块用于响应于进入所述同步屏障而通过所述第一线程与由所述计算设备的所述第一处理器核执行的第一多个线程同步;以及远程屏障模块,所述远程屏障模块用于响应于与所述第一多个线程同步而通过所述第一线程与由所述计算设备的第二处理器核执行的第二线程同步;其中,所述局部屏障模块进一步用于响应于与所述第二线程同步而通过所述第一线程与所述第一多个线程重新同步。

示例2包括如示例1所述的主题,并且其中,所述第一处理器核包括第一预定数量的子核;并且所述第一多个线程包括所述第一预定数量的线程。

示例3包括如示例1和2中任一项所述的主题,并且进一步包括屏障网络模块,所述屏障网络模块用于利用待由所述计算设备执行的总线程数的n路全混洗来标识所述第二线程,其中,n等于所述第一预定数量。

示例4包括如示例1-3中任一项所述的主题,其中,所述第一预定数量包括四个。

示例5包括如示例1-4中任一项所述的主题,并且其中,所述线程管理模块进一步用于:通过所述第一线程退出所述同步屏障;并且通过所述第一线程交替重复与所述第二线程的同步以及与所述第一多个线程的重新同步,直到退出所述同步屏障。

示例6包括如示例1-5中任一项所述的主题,并且其中,所述第一处理器核包括第一预定数量的子核;所述第一多个线程包括所述第一预定数量的线程;并且交替地重复与所述第二线程的同步以及与所述第一多个线程的重新同步包括交替地重复第二预定次数,其中,根据待由所述计算设备执行的第三预定数量的总线程以及所述第一预定数量来确定所述第二预定数量。

示例7包括如示例1-6中任一项所述的主题,并且其中,所述第二预定数量作为所述第三预定数量的对数函数的取顶函数来确定,其中,所述对数函数利用所述第一预定数量作为基数。

示例8包括如示例1-7中任一项所述的主题,并且其中,所述第一预定数量是四,所述第二预定数量是四,并且所述第三预定数量是240。

示例9包括如示例1-8中任一项所述的主题,并且其中,与所述第一多个线程同步包括将感测值存储在由所述第一多个线程共享的存储器结构中,其中,所述感测值基于进入所述同步屏障而在第一值与第二值之间交替;从由所述第一多个线程共享的所述存储器结构中读取多个感测值,其中,所述多个感测值中的每一个由所述多个线程中的相应线程来存储;并且暂停执行所述第一线程,直到所述多个感测值彼此匹配。

示例10包括如示例1-9中任一项所述的主题,并且其中,所述线程管理模块进一步用于响应于所述进入所述同步屏障而通过第一线程使所述感测值在所述第一值与所述第二值之间交替。

示例11包括如示例1-10中任一项所述的主题,并且其中,存储所述感测值包括:将所述感测值存储在存储器结构中,所述存储器结构存储在所述第一处理器核的高速缓存存储器中。

示例12包括如示例1-11中任一项所述的主题,并且其中,通过所述第一线程与由所述计算装置的所述第二处理器核执行的所述第二线程同步包括将第一票号存储在全局存储器结构的目的地字段中,其中,所述目的地字段与所述第一线程相关联;从所述全局存储器结构的源字段中读取第二票号,其中,所述源字段与所述第二线程相关联,并且所述第二票号由所述第二线程存储;并且暂停执行所述第一线程,直到所述第二票号与所述第一票号相匹配。

示例13包括如示例1-12中任一项所述的主题,并且其中,将所述全局存储器结构存储在所述计算设备的主存储器中。

示例14包括如示例1-13中任一项所述的主题,并且其中,存储所述第一票号包括引发高速缓存未命中;并且读取所述第二票号包括引发高速缓存未命中。

示例15包括如示例1-14中任一项所述的主题,并且其中,所述线程管理模块进一步用于响应于所述进入所述同步屏障而通过所述第一线程使活动通信信道在第一通信信道与第二通信信道之间交替;其中,将所述第一票号存储在所述目的地字段中包括将所述第一票号存储在所述目的地字段的所述活动通信信道中;并且其中,从所述源字段中读取所述第二票号包括从所述源字段的所述活动通信信道中读取所述第二票号。

示例16包括如示例1-15中任一项所述的主题,并且其中,进入所述同步屏障包括利用所述第一线程的标志参数进入所述同步屏障;与所述第一多个线程同步包括对所述标志参数以及与所述第一多个线程相对应的多个标志参数执行逻辑or归约运算以生成第一归约值;与所述第二线程同步包括对所述第一归约值以及与所述第二线程相对应的标志参数执行逻辑or归约运算以生成第二归约值;并且与所述第一多个线程重新同步包括对所述第二归约值以及与所述第一多个线程相对应的所述多个标志参数执行逻辑or归约运算以生成第三归约值。

示示例17包括如示例1-16中任一项所述的主题,并且其中,与所述第一多个线程同步进一步包括:将所述标志参数值存储在由所述第一多个线程共享的存储器结构中。

示例18包括如示例1-17中任一项所述的主题,并且其中,通过所述第一线程与由所述计算装置的所述第二处理器核执行的所述第二线程同步进一步包括将所述第一归约值存储在全局存储器结构的目的地字段中,其中,所述目的地字段与所述第一线程相关联;并且从所述全局存储器结构的源字段中读取与所述第二线程相对应的所述标志参数,其中,所述源字段与所述第二线程相关联。

示例19包括一种用于多线程化同步的方法,所述方法包括:通过由计算设备的第一处理器核执行的第一线程进入同步屏障;响应于进入所述同步屏障而通过所述第一线程与由所述计算设备的所述第一处理器核执行的第一多个线程同步;响应于与所述第一多个线程同步而通过所述第一线程与由所述计算设备的第二处理器核执行的第二线程同步;并且响应于与所述第二线程同步而通过所述第一线程与所述第一多个线程重新同步。

示例20包括如示例19所述的主题,并且其中,所述第一处理器核包括第一预定数量的子核;并且所述第一多个线程包括所述第一预定数量的线程。

示例21包括如示例19和20中任一项所述的主题,并且其中,利用待由所述计算设备执行的总线程数的n路全混洗来标识所述第二线程,其中,n等于所述第一预定数量。

示例22包括如示例19-21中任一项所述的主题,其中,所述第一预定数量包括四个。

示例23包括如示例19-22中任一项所述的主题,并且进一步包括通过所述第一线程退出同步屏障;并且通过所述第一线程交替地重复与所述第二线程同步以及与所述第一多个线程重新同步直到退出所述同步屏障。

示例24包括如示例19-23中任一项所述的主题,并且其中,所述第一处理器核包括第一预定数量的子核;所述第一多个线程包括所述第一预定数量的线程;并且交替地重复与所述第二线程的同步以及与所述第一多个线程的重新同步包括交替地重复第二预定次数,其中,根据待由所述计算设备执行的第三预定数量的总线程以及所述第一预定数量来确定所述第二预定数量。

示例25包括如示例19-24中任一项所述的主题,并且其中,所述第二预定数量作为所述第三预定数量的对数函数的取顶函数来确定,其中,所述对数函数利用所述第一预定数量作为基数。

示例26包括如示例19-25中任一项所述的主题,并且其中,所述第一预定数量是四,所述第二预定数量是四,并且所述第三预定数量是240。

示例27包括如示例19-26中任一项所述的主题,并且其中,与所述第一多个线程同步包括将感测值存储在由所述第一多个线程共享的存储器结构中,其中,所述感测值基于进入所述同步屏障而在第一值与第二值之间交替;从由所述第一多个线程共享的所述存储器结构中读取多个感测值,其中,所述多个感测值中的每一个由所述多个线程中的相应线程来存储;并且暂停执行所述第一线程,直到所述多个感测值彼此匹配。

示例28包括如示例19-27中任一项所述的主题,并且进一步包括响应于进入所述同步屏障而通过所述第一线程使感测值在所述第一值与所述第二值之间交替。

示例29包括如示例19-28中任一项所述的主题,并且其中,存储所述感测值包括将所述感测值存储在存储器结构中,所述存储器结构存储在所述第一处理器核的高速缓存存储器中。

示例30包括如示例19-29中任一项所述的主题,并且其中,通过所述第一线程与由所述计算装置的所述第二处理器核执行的所述第二线程同步包括将第一票号存储在全局存储器结构的目的地字段中,其中,所述目的地字段与所述第一线程相关联;从所述全局存储器结构的源字段中读取第二票号,其中,所述源字段与所述第二线程相关联,并且所述第二票号由所述第二线程存储;并且暂停执行所述第一线程,直到所述第二票号与所述第一票号相匹配。

示例31包括如示例19-30中任一项所述的主题,并且其中,将所述全局存储器结构存储在所述计算设备的主存储器中。

示例32包括如示例19-31中任一项所述的主题,并且其中,存储所述第一票号包括引发高速缓存未命中;并且读取第二票号包括引发高速缓存未命中。

示例33包括如示例19-32中任一项所述的主题,并且进一步包括:响应于进入所述同步屏障而通过所述第一线程使活动通信信道在第一通信信道与第二通信信道之间交替;其中,将所述第一票号存储在所述目的地字段中包括将所述第一票号存储在所述目的地字段的活动通信信道中;并且其中,从所述源字段中读取所述第二票号包括从所述源字段的所述活动通信信道中读取所述第二票号。

示例34包括如示例19-33中任一项所述的主题,并且其中,进入所述同步屏障包括利用所述第一线程的标志参数进入所述同步屏障;与所述第一多个线程同步包括对所述标志参数以及与所述第一多个线程相对应的多个标志参数执行逻辑or归约运算以生成第一归约值;与所述第二线程同步包括对所述第一归约值以及与所述第二线程相对应的标志参数执行逻辑or归约运算以生成第二归约值;并且与所述第一多个线程重新同步包括对所述第二归约值以及与所述第一多个线程相对应的所述多个标志参数执行逻辑or归约运算以生成第三归约值。

示例35包括如示例19-34中任一项所述的主题,并且其中,与所述第一多个线程同步进一步包括:将所述标志参数值存储在由所述第一多个线程共享的存储器结构中。

示例36包括如示例19-35中任一项所述的主题,并且其中,通过所述第一线程与由所述计算装置的所述第二处理器核执行的所述第二线程同步进一步包括将所述第一归约值存储在全局存储器结构的目的地字段中,其中,所述目的地字段与所述第一线程相关联;并且从所述全局存储器结构的源字段中读取与所述第二线程相对应的所述标志参数,其中,所述源字段与所述第二线程相关联。

示例37包括一种计算设备,所述计算设备包括:处理器;以及存储器,所述存储器具有存储于其中的多条指令,所述指令当由所述处理器执行时使所述计算设备执行如示例19-36中任一项所述的方法。

示例38包括一种或多种机器可读存储介质,所述一种或多种机器可读存储介质包括存储于其上的多条指令,所述指令响应于被执行而使计算设备执行如示例19-36中任一项所述的方法。

示例39包括一种计算设备,所述计算设备包括用于执行示例19-36中任一项所述的方法的装置。

示例40包括一种用于多线程化同步的计算设备,所述计算设备包括:用于通过由计算设备的第一处理器核执行的第一线程进入同步屏障的装置;用于响应于进入所述同步屏障而通过所述第一线程与由所述计算设备的所述第一处理器核执行的第一多个线程同步的装置;用于响应于与所述第一多个线程同步而通过所述第一线程与由所述计算设备的第二处理器核执行的第二线程同步的装置;以及用于响应于与所述第二线程同步而通过所述第一线程与所述第一多个线程重新同步的装置。

示例41包括如示例40所述的主题,并且其中,所述第一处理器核包括第一预定数量的子核;并且所述第一多个线程包括所述第一预定数量的线程。

示例42包括如示例40和41中任一项所述的主题,并且其中,利用待由所述计算设备执行的总线程数的n路全混洗来标识所述第二线程,其中,n等于所述第一预定数量。

示例43包括如示例40-42中任一项所述的主题,其中,所述第一预定数量包括四个。

示例44包括如示例40-43中任一项所述的主题,并且进一步包括:用于通过所述第一线程退出同步屏障的装置;以及用于通过所述第一线程交替地重复与所述第二线程同步以及与所述第一多个线程重新同步直到退出所述同步屏障的装置。

示例45包括如示例40-44中任一项所述的主题,并且其中,所述第一处理器核包括第一预定数量的子核;所述第一多个线程包括所述第一预定数量的线程;并且用于交替地重复与所述第二线程同步以及与所述第一多个线程重新同步的所述装置包括用于交替地重复第二预定次数的装置,其中,根据待由所述计算设备执行的第三预定数量的总线程以及所述第一预定数量来确定所述第二预定数量。

示例46包括如示例40-45中任一项所述的主题,并且其中,所述第二预定数量作为所述第三预定数量的对数函数的取顶函数来确定,其中,所述对数函数利用所述第一预定数量作为基数。

示例47包括如示例40-46中任一项所述的主题,并且其中,所述第一预定数量是四,所述第二预定数量是四,并且所述第三预定数量是240。

示例48包括如示例40-47中任一项所述的主题,并且其中,用于与所述第一多个线程同步的所述装置包括用于将感测值存储在由所述第一多个线程共享的存储器结构中的装置,其中,所述感测值基于进入所述同步屏障而在第一值与第二值之间交替;用于从由所述第一多个线程共享的所述存储器结构中读取多个感测值的装置,其中,所述多个感测值中的每一个由所述多个线程中的相应线程来存储;以及用于暂停执行所述第一线程直到所述多个感测值彼此匹配的装置。

示例49包括如示例40-48中任一项所述的主题,并且进一步包括:用于响应于进入所述同步屏障而通过所述第一线程使感测值在所述第一值与所述第二值之间交替的装置。

示例50包括如示例40-49中任一项所述的主题,并且其中,用于存储所述感测值的所述装置包括用于将所述感测值存储在存储器结构中的装置,所述存储器结构存储在所述第一处理器核的高速缓存存储器中。

示例51包括如示例40-50中任一项所述的主题,并且其中,用于通过所述第一线程与由所述计算装置的所述第二处理器核执行的所述第二线程同步的所述装置包括用于将第一票号存储在全局存储器结构的目的地字段中的装置,其中,所述目的地字段与所述第一线程相关联;用于从所述全局存储器结构的源字段中读取第二票号的装置,其中,所述源字段与所述第二线程相关联,并且所述第二票号由所述第二线程存储;以及用于暂停执行所述第一线程直到所述第二票号与所述第一票号相匹配的装置。

示例52包括如示例40-51中任一项所述的主题,并且其中,将所述全局存储器结构存储在所述计算设备的主存储器中。

示例53包括如示例40-52中任一项所述的主题,并且其中,所述用于存储所述第一票号的装置包括用于引发高速缓存未命中的装置;并且所述用于读取所述第二票号的装置包括引发高速缓存未命中的装置。

示例54包括如示例40-53中任一项所述的主题,并且进一步包括:用于响应于进入所述同步屏障而通过所述第一线程使活动通信信道在第一通信信道与第二通信信道之间交替的装置;其中,用于将所述第一票号存储在所述目的地字段中的所述装置包括用于将所述第一票号存储在所述目的地字段的活动通信信道中的装置;并且其中,用于从所述源字段中读取所述第二票号的所述装置包括用于从所述源字段的所述活动通信信道中读取所述第二票号的装置。

示例55包括如示例40-54中任一项所述的主题,并且其中,用于进入所述同步屏障的所述装置包括用于利用所述第一线程的标志参数进入所述同步屏障的装置;用于与所述第一多个线程同步的所述装置包括用于对所述标志参数以及与所述第一多个线程相对应的多个标志参数执行逻辑or归约运算以生成第一归约值的装置;用于与所述第二线程同步的所述装置包括用于对所述第一归约值以及与所述第二线程相对应的标志参数执行逻辑or归约运算以生成第二归约值的装置;并且用于与所述第一多个线程重新同步的所述装置包括用于对所述第二归约值以及与所述第一多个线程相对应的多个标志参数执行逻辑or归约运算以生成第三归约值的装置。

示例56包括如示例40-55中任一项所述的主题,并且其中,用于与所述第一多个线程同步的所述装置进一步包括用于将所述标志参数值存储在由所述第一多个线程共享的存储器结构中的装置。

示例57包括如示例40-56中任一项所述的主题,并且其中,用于通过所述第一线程与由所述计算装置的所述第二处理器核执行的所述第二线程同步的所述装置进一步包括:用于将所述第一归约值存储在全局存储器结构的目的地字段中的装置,其中,所述目的地字段与所述第一线程相关联;以及用于从所述全局存储器结构的源字段中读取与所述第二线程相对应的所述标志参数的装置,其中,所述源字段与所述第二线程相关联。

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