一种消除分支分歧的方法及设备技术

技术编号:21183947 阅读:41 留言:0更新日期:2019-05-22 14:50
一种消除分支分歧的方法及设备,GPU在执行到内核指令中的一个分支位置时,根据创建的用于执行该内核指令的每个线程当前对应的内存空间中存储的数据,预测每个线程在执行该分支位置处的操作后会跳转到的路径;统计跳转到各个路径Pi的线程的个数,将创建的用于执行该内核指令的各个线程构成的多个线程集合分配给所述各个路径,并设置分配给路径Pi的线程集合中的每个线程在执行该分支位置处的操作后均跳转到所述路径Pi。可以避免线程集合中每个线程执行的路径不同导致的分支分歧,以提高不同线程在执行内核指令的各个分支位置处的操作时的执行效率,进而提高内核指令的执行效率。

A Method and Equipment for Eliminating Branch Divergence

A method and device for eliminating branch divergence. When GPU executes a branch position in a kernel instruction, it predicts the path that each thread will jump to after performing the operation at the branch location based on the data stored in the current memory space of each thread created to execute the kernel instruction; counts the number of threads that jump to each path Pi, and creates the path. A set of threads composed of threads for executing the kernel instruction is allocated to the paths, and each thread in the set of threads allocated to the path Pi jumps to the path Pi after performing operations at the branch position. It can avoid the branching divergence caused by the different execution paths of each thread in the thread set, so as to improve the execution efficiency of different threads when executing the operations at the branching positions of the kernel instructions, and then improve the execution efficiency of the kernel instructions.

【技术实现步骤摘要】
一种消除分支分歧的方法及设备
本申请涉及通信
,尤其涉及一种消除分支分歧的方法及设备。
技术介绍
图形处理器(graphicsprocessingunit,GPU)可以作为协处理器,在接收CPU(centralprocessingunit,中央处理器)的内核指令时,GPU会创建大量的线程来执行该内核指令。其中,固定数量的线程组成一个线程集合,各个线程集合中包含的线程数量相同。而多个线程集合可以组成一个workgroup(工作组),workgroup中的各个线程需要一同执行该内核指令(kernelcode)。在GPU的内存中,会为每个线程分配对应的内存空间,每个线程在执行内核指令时会从对应的内存空间中获取数据,并根据获取的数据执行内核指令。而每个线程分别对应的内存空间中存储的数据可能不同,这样就会使得每个线程在执行内核指令中的一个分支位置处的操作时,不同线程根据各自对应内存空间中存储的数据会选择跳转到不同路径继续执行内核指令。例如,假设存在第一线程和第二线程,GPU在执行内核指令时执行到一个分支位置处的操作为判断操作,第一线程可能会根据自己对应内存空间中的数据得到判断结果为是,进而跳转到判断结果为是的执行路径上;而第二线程可能会根据自己对应内存空间中的数据得到判断结果为否,进而跳转到判断结果为否的执行路径上。而一个线程集合中的不同线程在执行同一个分支位置处的操作时,如果跳转到不同的路径上执行,后续该线程集合中的每个线程在执行完自己跳转的路径后,还将串行执行该线程集合中其他线程需要执行的所有路径,这种现象称为分支分歧。例如,一个线程集合中存在线程a、线程b和线程c时,如果线程a执行分支位置的操作后选择执行第一路径,而线程b和线程c执行分支位置的操作后选择执行第二路径,则线程a在执行完第一路径后,还需要继续执行第二路径,而线程b和线程c在执行完成第二路径后,还需要继续执行第一路径。这样,对于一个线程集合,在执行内核指令中的每个分支位置后,线程集合中的每个线程相当于要将每条路径都要执行一遍,而无关的路径执行结果会被舍弃,从而会使得线程的执行效率降低,进而使得内核指令的执行度效率降低。综上所述,现有技术需要提供一种消除分支分歧的方式,以有效提高不同线程在执行内核指令的各个分支位置处的操作时的执行效率,进而提高内核指令的执行效率。
技术实现思路
本申请提供一种消除分支分歧的方法及设备,以提高不同线程在执行内核指令的各个分支位置处的操作时的执行效率,进而提高内核指令的执行效率。第一方面,本申请实施例提供了一种消除分支分歧的方法,所述方法包括:首先,GPU在执行到内核指令中的一个分支位置时,需要确定每个线程在执行该分支位置处的操作后会跳转到的路径,此时需要通过创建的用于执行该内核指令的每个线程当前对应的内存空间中存储的数据,预测每个线程在执行该分支位置处的操作后会跳转到的路径;针对每个线程的预测结果,所述GPU统计跳转到各个路径Pi的线程的个数,其中,i从1取到n,n为各个路径的总数量;将创建的用于执行该内核指令的各个线程构成的多个线程集合分配给所述各个路径,并设置分配给路径Pi的线程集合中的每个线程在执行该分支位置处的操作后均跳转到所述路径Pi,以使得分配给路径Pi的线程集合中的每个线程执行的路径相同,其中,各个路径分配到的线程集合应不重复,各不相同,且路径Pi被分配到的线程集合的数量等于统计得到的跳转到路径Pi的线程的个数与一个线程集合中包括的线程数量的商值。通过上述方法,GPU根据预测的结果重新分配并设置了执行各个路径的线程集合,使得分配和设置后的每个线程集合中的每个线程可以执行相同的路径,因此可以避免线程集合中每个线程执行的路径不同导致的分支分歧,使得线程集合中的每个线程不需要再串行执行其他线程在分支位置处所需执行的路径,改善了不同线程在执行内核指令的各个分支位置处的操作效率,进而可以提高内核指令的执行效率。在一种可能的设计中,若所述分配给路径Pi的线程集合中存在执行该分支位置处的操作后不会跳转到所述路径Pi的部分线程时,所述GPU可以通过下述两种方式设置分配给路径Pi的线程集合中的每个线程在执行该分支位置处的操作后均跳转到所述路径Pi:方式一:调整部分线程对应的内存空间中存储的数据。所述GPU设置所述分配给路径Pi的线程集合中、在执行该分支位置处的操作后不会跳转到所述路径Pi的部分线程分别对应的内存空间中存储的数据,使得所述部分线程根据设置后的数据,在执行该分支位置处的操作后均跳转到所述路径Pi。方式二:调整部分线程的线程标识。所述GPU设置所述分配给路径Pi的线程集合中、在执行该分支位置处的操作后不会跳转到所述路径Pi的部分线程分别对应的线程标识,每个线程标识对应一个内存空间,设置后的线程标识使所述部分线程访问到在执行该分支位置处的操作后跳转到所述路径Pi的线程对应的内存空间中的数据。通过上述方法,分配给路径Pi的线程集合中若存在执行该分支位置处的操作后不会跳转到所述路径Pi的部分线程,可以通过调整所述部分线程对应的内存空间中存储的数据或线程标识的方式,可以使得该部分线程在之后实际执行到所述分支位置处均跳转到所述路径Pi,以避免分支分歧,提高内核指令执行的效率。在一种可能的设计中,无论当前分配给路径Pi的线程集合中各个线程中是否存在在执行该分支位置处的操作后跳转到路径Pi的线程,所述GPU在设置分配给路径Pi的线程集合中的每个线程在执行该分支位置处的操作后均跳转到所述路径Pi可以采用的数据,具体可以通过如下两种方式实现:方式一:调整各个线程对应的内存空间中存储的数据。所述GPU预测分配给路径Pi的线程集合中的每个线程在执行该分支位置处的操作后均跳转到所述路径Pi分别所需要访问到的数据范围,并将所述预测的数据范围中的不同数据或相同数据分别存储至分配给路径Pi的线程集合中的每个线程分别对应的内存空间中;方式二:调整各个线程的线程标识。所述GPU预测分配给路径Pi的线程集合中的每个线程在执行该分支位置处的操作后均跳转到所述路径Pi所需要分配的线程标识的范围,并为所述分配给路径Pi的线程集合中的每个线程分别配置所述预测的范围内的不同线程标识或相同线程标识。通过上述方法,调整分配给路径Pi的线程集合中的每个线程对应的内存空间中存储的数据或线程标识的方式,可以使得线程集合中的每个线程在之后实际执行到所述分支位置处均跳转到所述路径Pi,可以避免分支分歧,进而提高内核指令执行的效率。在一种可能的设计中,所述GPU调整部分线程对应的内存空间中存储的数据时,可以确定创建执行所述内核指令的线程集合中除分配给路径Pi的线程集合外的其他线程集合中、在执行该分支位置处的操作后会跳转到所述路径Pi的线程分别对应的内存空间中存储的数据,将确定的数据分别存储至分配给路径Pi的线程集合中、在执行该分支位置处的操作后不会跳转到所述路径Pi的部分线程分别对应的内存空间中。通过上述方法,所述分配给路径Pi的线程集合中存在执行该分支位置处的操作后不会跳转到所述路径Pi的部分线程,通过将其他线程集合中执行路径Pi的线程分别对应的内存空间中存储的数据调整至所述部分线程对应的内存空间中存储的数据,可以使得该部分线程在之后实际执行到所述分支本文档来自技高网
...

【技术保护点】
1.一种消除分支分歧的方法,其特征在于,包括:图像处理器GPU在执行到内核指令中的一个分支位置时,根据创建的用于执行该内核指令的每个线程当前对应的内存空间中存储的数据,预测每个线程在执行该分支位置处的操作后会跳转到的路径;所述GPU根据预测的每个线程在执行该分支位置处的操作后会跳转到的路径,统计跳转到各个路径Pi的线程的个数,其中,i从1取到n,n为各个路径的总数量;所述GPU将创建的用于执行该内核指令的各个线程构成的多个线程集合分配给所述各个路径;所述GPU设置分配给路径Pi的线程集合中的每个线程在执行该分支位置处的操作后均跳转到所述路径Pi;其中,各个路径分配到的线程集合各不相同,且路径Pi被分配到的线程集合的数量等于统计得到的跳转到路径Pi的线程的个数与一个线程集合中包括的线程数量的商值。

【技术特征摘要】
1.一种消除分支分歧的方法,其特征在于,包括:图像处理器GPU在执行到内核指令中的一个分支位置时,根据创建的用于执行该内核指令的每个线程当前对应的内存空间中存储的数据,预测每个线程在执行该分支位置处的操作后会跳转到的路径;所述GPU根据预测的每个线程在执行该分支位置处的操作后会跳转到的路径,统计跳转到各个路径Pi的线程的个数,其中,i从1取到n,n为各个路径的总数量;所述GPU将创建的用于执行该内核指令的各个线程构成的多个线程集合分配给所述各个路径;所述GPU设置分配给路径Pi的线程集合中的每个线程在执行该分支位置处的操作后均跳转到所述路径Pi;其中,各个路径分配到的线程集合各不相同,且路径Pi被分配到的线程集合的数量等于统计得到的跳转到路径Pi的线程的个数与一个线程集合中包括的线程数量的商值。2.如权利要求1所述的方法,其特征在于,所述GPU设置分配给路径Pi的线程集合中的每个线程在执行该分支位置处的操作后均跳转到所述路径Pi,包括:所述GPU设置所述分配给路径Pi的线程集合中、在执行该分支位置处的操作后不会跳转到所述路径Pi的部分线程分别对应的内存空间中存储的数据,使得所述部分线程根据设置后的数据,在执行该分支位置处的操作后均跳转到所述路径Pi;或所述GPU设置所述分配给路径Pi的线程集合中、在执行该分支位置处的操作后不会跳转到所述路径Pi的部分线程分别对应的线程标识,每个线程标识对应一个内存空间,设置后的线程标识使所述部分线程访问到在执行该分支位置处的操作后跳转到所述路径Pi的线程对应的内存空间中的数据。3.如权利要求1所述的方法,其特征在于,所述GPU设置分配给路径Pi的线程集合中的每个线程在执行该分支位置处的操作后均跳转到所述路径Pi,包括:所述GPU预测分配给路径Pi的线程集合中的每个线程在执行该分支位置处的操作后均跳转到所述路径Pi分别所需要访问到的数据,并将预测的数据分别存储至分配给路径Pi的线程集合中的每个线程分别对应的内存空间中;或所述GPU预测分配给路径Pi的线程集合中的每个线程在执行该分支位置处的操作后均跳转到所述路径Pi所需要分配的线程标识,并为所述分配给路径Pi的线程集合中的每个线程分别配置预测的线程标识。4.如权利要求2所述的方法,其特征在于,所述GPU设置分配给路径Pi的线程集合中、在执行该分支位置处的操作后不会跳转到所述路径Pi的部分线程分别对应的内存空间中存储的数据,包括:所述GPU确定除分配给路径Pi的线程集合外的其他线程集合中、在执行该分支位置处的操作后会跳转到所述路径Pi的线程分别对应的内存空间中存储的数据,将确定的数据分别存储至分配给路径Pi的线程集合中、在执行该分支位置处的操作后不会跳转到所述路径Pi的部分线程分别对应的内存空间中。5.如权利要求2所述的方法,其特征在于,所述GPU设置分配给路径Pi的线程集合中、在执行该分支位置处的操作后不会跳转到所述路径Pi的部分线程分别对应的线程标识,包括:所述GPU确定除分配给路径Pi的线程集合外的其他线程集合中、在执行该分支位置处的操作后会跳转到所述路径Pi的线程的线程标识,并为分配给路径Pi的线程集合中、在执行该分支位置处的操作后不会跳转到所述路径Pi的部分线程分别配置确定的线程标识。6.一种消除分支分歧的方法,其特征在于,包括:图像处理器GPU在执行到内核指令中的一个分支位置时,根据创建的用于执行该内核指令的每个线程当前对应的内存空间中存储的数据,预测到各个线程在执行该分支位置处的操作后会跳转到第一路径和第二路径;所述GPU依次遍历各个线程当前对应的内存空间中存储的数据,当遍历到的数据为能够使线程在执行该分支位置处的操作后跳转到所述第一路径所需的数据时,确定未映射数据的线程中线程标识最小的线程,使用遍历到的数据更新确定的线程对应的内存空间中当前存储的数据,并标识确定的所述线程为已映射数据的线程;当遍历到的数据为能够使线程在执行该分支位置处的操作后跳转到所述第二路径所需的数据时,确定未映射数据的线程中线程标识最大的线程,使用遍历到的数据更新确定的线程对应的内存空间中当前存储的数据,并标识确定的所述线程为已映射数据的线程。7.一种消除分支分歧的装置,其特征在于,包括:第一预测单元,用于在执行到内核指令中的一个分支位置时,根据创建的用于执行该内核指令的每个线程当前对应的内存空间中存储的数据,预测每个线程在执行该分支位置处的操作后会跳转到的路径;统计单元,用于根据预测的每个线程在执行该分支位置处的操作后会跳转到的路径,统计跳转到各个路径Pi的线程的个数,其中,i从1取到n,n为各个路径的总数量;分配单元,将创建的用于执行该内核指令的各个线程构成的多个线程集合分配给所述各个路径;其中,各个路径分配到的线程集合各不相同,且路径Pi被分配到的线程集合的数量等于统计得到的跳转到路径Pi的线程的个数与一个线程集合中包括的线程数量的商值;第一处理单元,用于设置分配给路径Pi的线程集合中的每个线程在执行该分支位置处的操作后均跳转到所述路径Pi。8.如权利要求7所述的装置,其特征在于,所述第一处理单元,具体用于:设置所述分配给路径Pi的线程集合中、在执行该分支位置处的操作后不会跳转到所述路径Pi的部分线程分别对应的内存空间中存储的数据,使得所述部分线程根据设置后的数据,在执行该分支位置处的操作后均跳转到所述路径Pi;或设置所述分配给路径Pi的线程集合中、在执行该分支位置处的操作后不会跳转到所述路径Pi的部分线程分别对应的线程标识,每个线程标识对应一个内存空间,设置后的线程标识使所述部分线程访问到在执行该分支位置处的操作后跳转到所述路径Pi的线程对应的内存空间中的数据。9.如权利要求7所述的装置,其特征在于,所述第一处理单元,具体用于:预测分配给路径Pi的线程集合中的每个线程在执行该分支位置处的操作后均跳转到所述路径Pi分别所需要访问到的数据,并将预测的数据分别存储至分配给路径Pi的线程集合中的每个线程分别对应的内存空间中;或预测分配给路径Pi的线程集合中的每个线程在执行该分支位置处的操作后均跳转到所述路径Pi所需要分配的线程标识,并为所述分配给路径Pi的线程集合中的每个线程分别配置预测的线程标识。10.如权利要求8所述的装置,其特征...

【专利技术属性】
技术研发人员:林焕鑫王卓立刘宏远
申请(专利权)人:杭州华为数字技术有限公司
类型:发明
国别省市:浙江,33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1