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、线程 ...
【技术保护点】
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
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。