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

文档序号:9693211阅读:来源:国知局
程104必须也等待,直到线程108也已到达壁垒操作,之后进行到执行读取所述组数据的读 取操作。在时间t4处,线程108到达壁垒操作116。因为所述线程群组中的每个线程102、104、 106及108已到达壁垒操作,所W线程102、104、106及108中的每一者现在各自允许执行读取 所述组数据的读取操作。
[0017] 然而,在允许群组中的线程进行之前要求线程群组中的线程等待所述线程群组中 的每个线程都到达壁垒操作的壁垒操作可为低效的。例如,在执行写入之后执行的读取操 作可仅取决于结束其写入操作的相应执行的一些线程(而不是全部)。因此,即使所有线程 取决于额外操作已到达壁垒操作,但那些线程不可执行其相应的读取操作,直到群组中的 每个线程都已结束其相应的写入操作且到达壁垒操作为止。
[0018] W下展示W打吾言编写的实例代码片段,其展示壁垒操作的此用途:
[0019]
[0020] 如W上代码片段中所展示,壁垒操作是在执行后续x = ptr[thread_id%32]读取 操作之前各自执行if (thread_id%32) {pt;r[thread_id%32] =value;}写入操作的线程群 组的同步点,进而确保仅在群组中的每一线程已结束执行if(thread_id%32){ptr [thread_id%32]=value;}操作且已到达同步点之后从其读取ptr[t虹ead_id%32]且X变 量被指派pt;r[threatid%32]的值。然而,因为threatid%32将产生仅0到31的值,所W如 果群组包含多于32个线程,那么所述线程群组中的每个线程可没有必要在执行x = ptr [thread_id%32]操作之前一直等到每一线程已执行壁垒操作。而是,32个线程的群组可仅 需要等待确保x = ptr[thread_id%32]操作将正确地操作。因此,如果所述线程群组包含多 于32个线程,壁垒操作可需要过度等待更多线程而不是必须确保x = ptr[thread_id%32] 操作的完整性。
[0021] 减少壁垒操作的低效率的一个方法可包含指定壁垒操作的宽度。壁垒操作的宽度 可为在允许线程在壁垒操作之后继续进行之前到达壁垒操作所需的线程的数目,且宽度可 通常被指定为少于所述线程群组中的线程的总数。例如,壁垒操作可采取宽度作为参数。在 另一实例中,所述宽度可被指定为常量。在编译时间,壁垒操作的宽度可被硬编码为调用壁 垒操作的计算机程序。对于W上实例代码片段,可在壁垒操作的编译时间处指定32的宽度。
[0022] 然而,在编译时间硬编码壁垒操作的宽度可限制壁垒操作的有用性及灵活性,因 为其可能不可用于其中在编译时间未知壁垒操作的所要宽度的情形。此外,编写数据并行 代码的程序员可不知晓指定的适当宽度。因此,可能需要在运行时间动态地计算壁垒操作 的宽度。
[0023] 图2是说明根据本发明的一些方面的用于执行数据并行代码的并行处理计算系统 的框图。如图2中所展示,主机220可W可通信地禪合到处理单元202。处理单元202可包含计 算单元204A到204ΝΓ计算单元204"),且计算单元204中的每一者可包含处理元件206A到 206ΝΓ处理元件20护)。
[0024] 在一些实例中,主机220可为微处理器,例如中央处理单元(CPU),其经配置W处理 计算机程序的指令W用于在并行处理计算系统内执行。在一些实例中,主机220可在执行计 算机程序期间在遇到数据并行代码之后将数据并行代码传送到处理单元202W用于执行。 [00巧]处理单元202可为图形处理单元(GPU)或经配置W处理计算机程序的指令中的至 少一些指令的任何其它合适的处理单元。处理单元202可W可操作地禪合到主机220且可从 主机220接收计算机程序的数据并行代码。处理单元202可包含一或多个可编程处理器,例 如计算单元204。计算单元204可各自包含处理元件206。计算单元204可各自包含本地存储 器(即,高速缓冲存储器)。处理元件206可为相应的计算单元204的处理核屯、。例如,处理元 件206可各自包含一或多个算术逻辑单元(ALU)或经配置W执行算术及逻辑操作的其它电 路。
[0026] 在多个数据点中的一者上操作的相同数据并行代码的每一个别调用是线程,且线 程可同时执行W在多个数据点上执行相同指令。在一些实例中,线程还可被称为工作项。处 理单元202可将线程一起分组为块。通常,处理单元202可将由相同数据并行代码产生的所 有线程分组为一或多个块。在一些实例中,块还可被称为工作组。在一些实例中,单一块中 的所有线程可限制在计算单元204中的一者上执行。在一些实例中,线程的块可为线程群 组,其中如果壁垒操作的宽度未指定或确定小于群组中的线程的数目,那么壁垒操作可应 用于群组中的每一线程。因此,如果所述线程群组中的线程到达此壁垒,那么线程可能必须 等到所述群组中的每一线程也到达所述壁垒,之后才允许线程在壁垒之后继续进行。
[0027] 处理单元202可将块内的线程分组为一或多个翅曲或波前。波前是计算单元204的 调度的基本单元且可通常包含块中的线程的子集。例如,给定512个线程的块,波前可包含 32个线程,且所述块中的线程可被分组为512/32=16个翅曲。波前可通常与单一计算单元 (即,计算单元204A)中的处理元件206-样多的线程,使得单一计算单元的处理元件206可 同时处理波前中的每个线程。
[0028] 因为线程的波前对多个数据元素执行相同指令,所W主机220可将待由波前处理 的数据向量化为数据向量且可将所述向量传送到处理单元202。通常,数据被分组为具有与 单一波前中的线程一样多的元素的向量。换句话说,波前中的线程的数目与其操作的数据 的向量的宽度相同。因此,波前中的线程的数目可被称作波前的向量宽度。
[0029] 如上文所论述,波前含有与单一计算单元中存在的处理元件206-样多的线程或 比其少的线程。因此,波前的所有线程可由单一计算单元的处理元件206同时平行执行,因 为波前中没有线程必须等待忙的处理单元完成处理相同波前中的另一线程。因此,可保证 单一波前的线程实质上并行执行,使得可不需要壁垒操作W使单一波前内的线程同步。
[0030] 计算单元204中的一者可使用计算单元204的处理元件206并行执行一或多个波 前。在执行块的线程时,壁垒操作可用于使所述块的线程同步。如上文所论述,壁垒操作可 操作W使得可需要块的线程一直等到块的所有线程已执行壁垒操作为止。
[0031] 定序器208可经配置W管理及安排数据并行代码在计算单元204之间的执行。例 如,定序器208可安排线程的块及线程的波前在计算单元204上的执行。定序器208还可经配 置W使线程的块同步。例如,如果线程已执行壁垒操作且空闲,同时等待其块的另一线程执 行它们的相应的壁垒操作W允许等待的其它线程执行W由处理元件206处理,那么定序器 208可从处理元件206卸载那些线程。定序器208还可在确定块的线程已全部执行壁垒操作 之后将空闲线程重新加载回到处理元件206。
[0032] 定序器208可动态地基于将由群组中的线程执行的数据并行代码而确定在众多数 据点上执行相同数据并行代码的线程群组的壁垒操作的宽度,其中所确定的宽度小于群组 中的线程的总数。在一些实例中,所述群组可为线程块。壁垒操作的宽度可为块中的必须到 达壁垒操作的线程的数目,之后才允许所述线程中的任一者在壁垒操作之后执行操作。因 为所确定的宽度小于所述群组中的线程的总数,所W定序器208可通过确定壁垒宽度而允 许所述群组的线程在壁垒操作之后执行操作,即使所述群组中不是每个线程都已到达相应 的壁垒操作也如此。
[0033] 定序器208可基于在壁垒操作之前及/或在壁垒操作之后将由群组中的线程执行 的数据并行代码而确定线程群组的壁垒操作的宽度。例如,基于W上代码片段,定序器208 可确定数据并行代码将在壁垒操作之前写入到32ptr阵列位置,且数据并行代码将在壁垒 操作之后从32ptr阵列位置读取。因此,定序器可确定所述特定壁垒操作的32
当前第2页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1