使用动态宽度计算的壁垒同步的制作方法_3

文档序号:9693211阅读:来源:国知局
的壁垒宽度。
[0034] 在一个实例中,定序器208可将壁垒操作的动态地确定的壁垒宽度存储在一或多 个宽度寄存器中。响应于线程到达具有存储在宽度寄存器中的其壁垒宽度的壁垒操作,递 减一或多个宽度寄存器中的数目。响应于一或多个宽度寄存器中的数目到达零,可允许在 已到达壁垒操作之后等待的块中的任何线程继续执行。在另一实例中,定序器208可包含存 储指示壁垒操作的宽度的数目的宽度寄存器及存储等待块中的其它线程到达壁垒的线程 的数目的等待寄存器两者。响应于线程到达壁垒操作,递增等待寄存器中的数目。响应于等 待寄存器中的数目等于宽度寄存器中的数目,可允许在到达壁垒操作之后等待的块中的任 何线程继续执行。
[0035] 在一些实例中,动态地确定壁垒宽度可使得含有数据并行代码的计算机程序的开 发者能够更容易地编写可跨越多种并行计算系统执行的跨平台数据并行代码。例如,一些 并行计算系统可保证单一波前中的每个线程可同时执行,使得如果壁垒的宽度小于波前的 向量宽度,那么壁垒操作是不必要的。例如,如果波前的向量宽度是16(例如因为计算单元 含有16个处理元件),那么具有16或更小的壁垒宽度的壁垒操作可为不必要的。然而,因为 计算机程序员可能不知晓他的数据并行代码将确切在哪一并行计算系统上运行,并且因此 可能不知晓并行处理系统的计算单元含有多少处理元件,所W如果计算机程序员硬编码小 于特定并行计算系统的波前的向量宽度的壁垒宽度,那么所述数据并行代码在所述特定并 行计算系统上运行时可执行额外的壁垒操作且可减慢数据并行代码的执行。相比而言,定 序器208可针对所述特定并行计算系统确定壁垒操作的壁垒宽度W及波前的向量宽度,且 可在所确定的壁垒宽度小于数据并行代码在上面执行的并行计算系统的波前的向量宽度 的情况下确定不执行所述壁垒操作。在一些实例中,定序器208可确定大于波前的向量宽度 的壁垒宽度。
[0036] 动态地计算壁垒宽度还可实现壁垒操作在动态控制流的条件语句中的使用,其中 条件语句不贯穿所述线程群组统一地进行评估。考虑W下伪码:
[0037]
[0038] 通常,对于线程群组,如果条件x<y在每个线程中都未评估为真,那么包含壁垒操 作W使得仅在条件x<y评估为真的情况下才执行其可导致群组中的线程的群组死锁,因为 其中X勺被评估为假的线程将永不执行壁垒操作。相比而言,在本发明中,定序器208可例如 通过针对所述组值X及y预先评估x<y而将壁垒的宽度动态地设定为等于x<y评估为真的次 数。因此,如果壁垒的宽度设定为四,那么有壁垒的线程可一旦四个线程已执行壁垒操作便 在壁垒之后继续而无需必须等待工作项的群组中的其余线程执行壁垒操作。
[0039] 定序器208还可确定壁垒操作的壁垒宽度W使线程子组一起同步,其中子组的线 程是块的连续线程。例如,给定十六个线程t〇、tl,一^15的块,如果将线程的壁垒操作的壁 垒宽度指定为四,那么块to到t3的前四个线程可一起同步,块t4到t7的第二四个线程可一起 同步,第Ξ组四个线程t8到til可一起同步,且第四组四个线程tl2到tl5可一起同步。在此实 例中,线程群组中的每一线程to到t3可仅需要等待群组中的所有线程to到t3执行壁垒操作, 之后便能够进行其执行,线程群组中的每一线程t4到t7可仅需要等待群组中的所有线程t4 到t7执行壁垒操作,之后便能够进行其执行,线程群组中的每一线程t8到til可仅需要等待 群组中的所有线程t8到til执行壁垒操作,之后便能够进行其执行,且线程群组中的每一线 程tl2到tl5可仅需要等待群组中的所有线程tl2到tl5执行壁垒操作,之后便能够进行其执行。 因此,例如,如果线程tl、t8、t2及t3是到达壁垒操作的前四个线程,那么线程tl、t2及t3可需 要等待线程t4到达壁垒操作,之后才允许那些线程tl、t2及t3在壁垒操作之后继续执行,即 使十六个线程的块中的四个线程已到达壁垒操作也如此。
[0040] 图3是说明根据本发明的一些方面的使用动态壁垒宽度使线程同步的概念图。如 图3中所展示,定序器(例如图2中展示的定序器208)可确定线程302及304可一起同步,且线 程306及308可一起同步。因此,定序器可确定用于可并行执行数据并行代码的线程302、 304、306及308的2的壁垒宽度。因此,线程302及304被分组为线程子群组,且线程306及308 可被分组为另一线程子群组。在时间tl处,线程306已结束执行其写入操作且到达壁垒操作 310。然而,因为不是其子群组中的每个线程都也已结束执行其相应的写入操作且到达壁垒 操作,所W线程306必须等待,直到子群组中的另一线程(即,线程308)也已结束执行其写入 操作且到达壁垒操作,之后才进行到执行在壁垒操作310之后的读取操作。在时间t2处,线 程302结束执行写入操作且到达壁垒操作312。类似地,因为作为与线程302的子群组的另一 成员的线程304还尚未完成执行写入操作且到达壁垒操作,所W线程302必须还要等待,之 后才进行到执行在壁垒操作312之后的代码。在时间t3处,线程304到达壁垒操作314。因为 线程302及304两者已到达壁垒操作312及314,所W线程302及304可进行到执行在壁垒操作 314之后的相应的读取操作。在时间t4处,线程308到达壁垒操作316。因为线程306及308两 者已到达壁垒操作,所W现在允许线程306及308执行在其相应的壁垒操作之后的相应的读 取操作。如可在图3中看出,通过设定小于线程群组中的线程的总数的壁垒宽度,线程可能 够快得多地恢复在壁垒之后的执行。举例来说,由于不设定小于线程群组中的线程的总数 的壁垒宽度,线程302、304及306将在执行相应的壁垒操作310、312及314之后保持闲置,直 到线程308在比时间tl、t2及t3晚的时间t4处执行了壁垒操作316为止。
[0041] 动态地确定壁垒操作的宽度可用于并行,尤其在将缩减的数目的集合的大小在运 行时间之前是未知时。减少是对数目的集合求和的技术,且并行缩减可为其中数据并行代 码可执行W对缩减的元素并行求和的缩减。图4是说明根据本发明的一些方面的实例并行 缩减的概念图。如图4中所展示,阵列402可包含将一起求和的八个数目的集合。执行缩减的 数据并行代码可执行W使得每一工作项对阵列402的两个连续元素一起求和。因此,在并行 缩减的第一遍次中,求和操作404A到404D("求和操作404")可经由四个并行线程并行执行, 从而各自对阵列402的元素中的两者求和,W将八元素阵列402缩减为含有由求和操作404 中的每一者产生的四个所得的和的四元素阵列406。
[0042] 然而,因为集合的大小在运行时间可为未知的,所W程序员在编译时间可能不可 能知晓数据并行代码中的壁垒操作所需的确切壁垒宽度W执行并行缩减。例如,集合的大 小可取决于用户输入,使得用户可输入8个数目、20个数目,或任何其它组数目。在图4中展 示的特定实例中,定序器(例如图2中展示的定序器208)可基于阵列402的大小(8)而确定用 于将由四个线程在执行求和操作404之后执行的壁垒操作的4的壁垒宽度。
[0043] 经由求和操作404的第一轮缩减可产生含有四个所得的元素的阵列406。为进一步 缩减阵列406的元素,可仅需要两个线程执行求和操作408A及408ΒΓ求和操作408")。因此, 定序器可基于阵列406的大小(4)而确定用于将由两个线程在执行求和操作408之后执行的 壁垒操作的2的壁垒宽度。
[0044] 经由求和操作408的第二轮缩减可产生含有两个所得元素的阵列410。为进一步缩 减阵列410的元素,可仅需要单一线程执行求和操作412。因此,定序器可确定将不需要执行 壁垒操作。因此,定序器可确定在执行求和操作412之后忽略代码中指定的壁垒操作。
[0045] 用于执行求和缩减的数据并行代码通常被编写为循环,使得壁垒操作包含在循环 内。因此,如果将在编译时间设定壁垒操作的宽度,假设程序员知晓要缩减的集合中的元素 的初始数目,那么程序员可必须展开所述循环W将特定宽度的壁垒操作手动
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1