一种优化模式自动生成方法及优化装置的制造方法_4

文档序号:9750550阅读:来源:国知局
关系。具体地,可以根据程序特征建立对应关系,具体如第一程序结构属于第一程序结构集合,第三程序结构属于第三程序结构集合,如果一般情况下第一程序结构对应的语句在GPU优化过程中可以得到第三程序结构对应的语句,则可以建立第一程序结构与第三程序结构的程序对应关系。例如for语句对应kernel。
[0180](3)、优化装置建立至少一个程序结构区域;
[0181]优化装置建立程序对应关系之后,根据程序对应关系建立至少一个程序结构区域,每个程序结构区域包含至少一对具有程序对应关系的程序结构。比如上述例子中,第一程序结构与第三程序结构具有程序对应关系,那么第一程序结构与第三程序结构即能构成一个程序结构区域。
[0182](4)优化装置建立第一基本块集合与第三基本块集合中程序形似相似度高于阈值且属于同一程序结构的基本块之间的对应关系。
[0183]需要说明的是,程序结构可以由基本块组成,而程序结构由至少一对程序结构组成,因此一个程序结构区域可以包含多个基本块,故优化装置建立至少一个程序结构区域后,建立第一基本块集合与第三基本块集合中程序形式相似度高于阈值且属于同一程序结构的基本块之间的对应关系,需要说明的是,也就是说基本块的对应关系不能跨越程序结构区域,不属于同一程序结构区域的基本块,一般不具有映射关系,还需要说明的是这里建立的对应关系是不同基本块集合之间的。假设如上述例子所述第一程序结构与第三程序结构构成一个程序结构区域,第一基本块属于第一基本块集合,第三基本块属于第三基本块集合,如果第一基本块与第三基本块的程序形式相似度高于阈值,并且第一基本块属于第一程序结构,第三基本块属于第三程序结构,即第一基本块与第三基本块属于同一程序结构区域,则建立第一基本块与第三基本块的对应关系。
[0184]步骤6、优化装置根据等价关系及第一基本块集合中的基本块与第三基本块集合中的基本块之间的对应关系,建立第一基本块集合与第二基本块集合的对应关系。
[0185]优化装置建立第三基本块集合的基本块与第二基本块集合的基本块之间的等价关系,及第一基本块集合的基本块与第三基本块集合的基本块之间的对应关系后,根据该等价关系及该对应关系建立第一基本块集合与第二基本块集合的对应关系,即第一对应关系。具体地可以通过如下方式:
[0186]确定第一目标基本块集合,第一目标基本块集合是由第二基本块集合中和第三基本块集合中具有等价关系的基本块组成的;
[0187]确定第二目标基本块集合,第二目标基本块集合是由第一基本块集合中的基本块组成的,并且第二目标基本块集合中的每个基本块与第一目标基本块集合中属于第三基本块集合中的基本块具有对应关系;
[0188]建立第三目标基本块集合与第二目标基本块集合之间的对应关系,第三目标基本块集合为第一目标基本块集合与第二目标基本集合的交集。
[0189]具体地,如果第三基本块(第三基本块集合中的任意一个基本块)与第二基本块(第二基本块集合中的基本块)具有等价关系,并且第三基本块与第一基本块(第一基本块集合中的基本块)具有对应关系,则优化装置建立第一基本块与第二基本块的对应关系。对于第一基本块集合中的基本块,如果未能在第二基本块集合中找到对应的基本块,则该基本块对应空。
[0190]可以理解的是,根据不同程序的程序特征优化装置还可以通过其他方式建立对应关系,具体此处不作限定。
[0191]本发明实施例中,优化装置可以通过多种方式建立第一基本块集合与第二基本块集合的对应关系,提高了方案的灵活性。
[0192]基于上述图1对应的实施例,在本发明实施例的一些实施中,优化装置根据程序变换库及第一对应关系输出多个具有第一对应关系的基本块对对应的程序变换序列如下方式:
[0193]1、优化装置根据预置的程序变换库为具有第一对应关系的基本块对分配程序变换序列;
[0194]具体地,由前述可知基本块对包含至少一个属于第一基本块集合的基本块,第一基本块集合中的基本块对应第二基本块集合中的基本块或空,优化装置根据这些基本块的基本块特征,结合程序变换库中存储的程序变换的特性,从该程序变换库中选取一个或多个与该基本块对匹配的程序变换序列,当程序变换序列为多个时,可以将各个程序变换序列按照可能性从大到小排列,优化装置在识别程序变换序列的时候可以按照这个排列顺序进行识别。例如,第一基本块集合中的第一基本块(a[i]=b[i]+2)和第二基本块集合中的第二基本块(a[0]=b[0]+2)具有第一对应关系,则对应的程序变换为向量化或并向归约。
[0195]2、优化装置判断该基本块对中属于第一基本块集合的基本块是否能够通过该程序变换序列得到该基本块对中属于第二基本块集合的基本块或空;
[0196]若是,则输出该基本块对对应的程序变换序列;
[0197]若否,则优化装置,对更新第一基本块集合和第二基本块集合中的基本块进行更新,建立更新后的第一基本块集合的基本块与更新后的第二基本块集合的基本块之间的第二对应关系,根据程序变换库及第二对应关系输出多个具有第二对应关系的基本块对对应的程序变换序列。
[0198]此步骤即对上述步骤分配的程序变换序列进行识别。
[0199]具体地,由前述可知第一对应关系只是一个可能的映射关系,这里就是对第一对应关系进行验证,判断具体第一对应关系的基本块对中属于第一基本块集合的基本块是否能够通过分配的程序变换序列得到该基本块对中属于第二基本块集合的基本块。或是具有第一对应关系的基本块对中属于第一基本块集合的基本块是否能够通过分配的程序变换序列得到空,空即变换后基本块对应的代码都被消除,不包含任何代码。
[0200]若能,则确定该基本块对之间存在映射关系,输出该基本块对对应的程序变换序列,例如按照上述举例,第一基本块集合中的第一基本块(a[i]=b[i]+2)通过向量化变换能够得到第二基本块集合中的第二基本块(a[0]=b[0]+2),即第一基本块与第二基本块具有第一对应关系,优化装置输出第一基本块到第二基本块,对应的程序变换序列为向量化。[0201 ]若不能,则确定该基本块对之间不存在映射关系,优化装置需要通过合并基本块的方式更新第一基本块集合和/或第二基本块集合,并建立更新后的两个基本块集合之间的第二对应关系,再根据预置的程序变换库输出具有第二对应关系的基本块对对应的程序变换序列。具体过程与前述输出具有第一对应关系的基本块对对应的程序变换序列的过程相似,具体此处不再赘述。
[0202]需要说明的是,这里指的合并基本块只能是合并同一基本块集合的,即不能将第一基本块集合的基本块与第二基本块集合的基本块进行合并。在合并基本块时,优化装置可以先对属于同一程序结构的基本块进行合并,当合并后仍然识别出程序变换序列,才合并不属于同一程序结构的基本块。
[0203]本发明实施例提供了一种优化装置输出程序变换序列的具体方式,提高了方案的可实现性。
[0204]为了便于理解,下面以一实际应用场景对本发明实施例中的优化模式自动生成方法:
[0205]优化装置通过用户的输入得到图2中的源程序,通过调用专家分析总结成的知识库得到与该源程序对应的GPU优化程序,如图3所示。
[0206]优化装置扫描源程序和GPU优化程序,生成两者的中间表示。由于程序的中间表示会比较复杂且篇幅较大,这里仍然以类C代码表示。
[0207]按照基本块的定义划分源程序的基本块,得到源程序对应的第一基本块集合:
[0208]BB1(2),BB2(3,4),BB3(5,6),BB4(8)
[0209]括号内的数字对应于源程序上的代码序列,表示该基本块对应的具体内容,例如BB1(2),表示第一基本块对应的具体内容为源程序中第一行代码的内功,S卩:int sum(int*a,int*b,int*c),下面对于程序结构表达式中括号内的数字的含义与此相似。
[0210]通过区域分析技术分析源程序的程序结构得到源程序对应的第一程序结构集合:
[0211]for(2,3,4,5,6,7)
[0212]if(3,4)
[0213]else(5,6)
[0214]其中,BB1(2),BB2(3,4)及BB3(5,6)属于for程序结构,BB2(3,4)属于if程序结构,BB3( 5,6)属于else程序结构。
[0215]用相同的分析方法对GPU优化程序进行分析,得到GPU优化程序对应的第二基本块集合:
[0216]BBl(I),BB2(3,4),BB3(5,6),BB4(7),BB5(9)
[0217]GPU优化程序对应的第二程序结构集合:
[0218]kernel(2,3,4,5,6,7,8)
[0219]kernel_task_contro1(3,4,5,6)
[0220]其中,BB2及BB3属于kernel_task_control程序结构。
[0221 ]优化装置确定目标程序:
[0222]在GPU优化程序上去掉与用于支持程序在GPU设备上执行的kernel_task_control(3,4,5,6)程序结构得到核心程序,对核心程序进行逆变换得到目标程序,如图4所示。
[0223]目标程序对应的第三基本块集合:
[0224]BBl(I),BB4(7),BB5(9)
[0225]目标程序对应的第三程序结构:
[0226]kerneI(2,7,8)
[0227]其中,BB4(7)属于 kerne 1(2,7,8)程序结构。
[0228]优化装置建立源程序和目标程序的基本块对应关系:
[0229]用(BBx;BBy)表不,分号之前的表不源程序的基本块集合(第一基本块集合),分号之后表示目标程序的基本块集合(第二基本块集合)ο当目标程序中没有源程序对应的基本块时,映射为空,用NULL进行标记。
[0230]显而易见的,源程序中的BB4(8)对应的代码与目标程序中的BB5(9)对应的代码相同,故建立BB4(8)与BB5(9)之间的对应关系,记为(BB4;BB5)。
[0231]根据程序特征源程序中的for(2,3,4,5,6,7)程序结构与目标程序中的kernel(2,7,8)程序结构可能存在映射关系4(^(2,3,4,5,6,7)程序结构与1?^1161(2,7,8)程序结构的对应关系,源程序中的1€(3,4)程序结构及61%(5,6)程序结构在目标程序中未找到对应的程序结构。
[0232]其中,源程序中的BBl (2),BB2(3,4)及BB3(5,6)属于for程序结构,目标程序中的BB4(7)属于kernel(2,7,8)程序结构的基本块,故源程序中的BB1(2),BB2(3,4)及BB3(5,6)与目标程序中的BB4(7)属于同一程序结构区域。
[0233]源程序中的BB2(3,4)与目标程序中的BBl(I)或BB5(9)的程序形式相似,但是源程序中的BB2(3,4)与目标程序中的BBl(I)或BB5(9)都不属于同一程序结构区域,跨越了程序结构区域,故BB2(3,4)与BBl(I)或BB5(9)不具有对应关系,记为(BB2,NULL)。
[0234]源程序中的BB3(5,6)与目标程序中的BB4(7)的程序形式相似,并且源程序中的BB3(5,6)与目标程序中的BB4(7)属于同一程序结构区域,即未跨越程序结构区域,故BB3(5,6)与BB4 (7)可能存在映射关系,建立BB3 (5,6)与BB4 (7)之间的初步基本块映射关系,记为(BB3;BB4)。
[0235]源程序中的BB1(2)在目标程序中未能找到对应的基本块,故映射为空(BB1;NULL)
[0236]最终建立第一基本块集合与第三基本块集合的对应关系为(BBl;NULL),(BB2;NULL),(BB3;BB4),(BB4;BB5);
[0237]其中目标程序中的BB4与GPU优化程序中的BB4等价,目标程序中的BB5与源程序中的BB5等价,故建立第一基本块集合与第二基本块集合的初步第一对应关系为:
[0238](BBl;NULL),(BB2;NULL),(BB3;BB4),(BB4;BB5)。
[0239]优化装置根据预置的程序变换库为具有初步基本块映射关系的基本块对分配程序变换序列:
[0240](BBl ;NULL)对应的程序变换序列为kernel/循环展开;
[0241](BB2;NULL)对应的程序变换序列为循环if/else消除,循环分裂;
[0242](BB3 ;BB4)对应的程序变换序列为循环内if/else消除;
[0243 ] (BB4; BB5)对应的程序变换序列为向量化/并向归约。
[0244]优化装置判断该基本块对中属于第一基本块集合的基本块是否能够通过该程序变换序列得到该基本块对中属于第二基本块集合的基本块:
[0245]从底向上开始识别优化序列,优先分析基本块对中两者都非空的情形。
[0246]对于(BB4;BB5),容易分析出其等价关系,对应的程序变换序列为向量化,优化装置输出(BB4; BB5)对应的程序变换序列为向量化。
[0247]对于(BB3;BB4),虽然存在可能映射关系,但是不能确定其变换序列;
[0248]优化装置合并映射为空的基本块,和无法确定是否映射的基本块,将源程序中的BB2和BB3合并得到BB23 (3,4,5,6),
[0249]对于更新后的基本块集合,BB2
当前第4页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1