《一种GPU上的访存方法.pdf》由会员分享,可在线阅读,更多相关《一种GPU上的访存方法.pdf(9页珍藏版)》请在专利查询网上搜索。
1、10申请公布号CN104199782A43申请公布日20141210CN104199782A21申请号201410419711222申请日20140825G06F12/0220060171申请人浙江大学城市学院地址310015浙江省杭州市拱墅区湖州街51号72发明人吴明晖裴玉龙陈天洲李颂元孟静磊74专利代理机构杭州求是专利事务所有限公司33200代理人林超54发明名称一种GPU上的访存方法57摘要本发明公开了一种GPU上的访存方法。本发明对流处理器中发出的请求进行访存融合;流处理器将融合后的访存请求发送到相应内存中;内存中将融合后的访存请求进行拆分,并读出数据;内存中将读出数据形成数据块返回到。
2、流处理器;流处理器对发回的数据块进行处理、存储。本发明通过对访存地址具有相同间隔的访存请求进行融合,提高了访存效率,隐藏了内存延迟,提高了GPU的综合性能。可将本方法与现有方法结合使用,从而使得程序有一定程度的性能提升。51INTCL权利要求书2页说明书5页附图1页19中华人民共和国国家知识产权局12发明专利申请权利要求书2页说明书5页附图1页10申请公布号CN104199782ACN104199782A1/2页21一种GPU上的访存方法,其特征在于1)对流处理器中发出的请求进行访存融合;2)流处理器将融合后的访存请求发送到相应内存中;3)内存中将融合后的访存请求进行拆分,并读出数据;4)内存。
3、中将读出数据形成数据块返回到流处理器;5)流处理器对发回的数据块进行处理、存储。2根据权利要求1所述的一种GPU上的访存方法,其特征在于所述的步骤1)中对流处理器中发出的请求进行访存融合具体包括11)将GPU多核中的流处理器发出的请求地址放在一个数组中;12)将数组中的访存地址按从小到大顺序进行排序,并使得同一数组中的各访存地址不重复;每个数组中,按从小到大的顺序依次将所有访存地址中访存地址之间的距离相同的访存地址融合为一次访存请求。3根据权利要求1所述的一种GPU上的访存方法,其特征在于所述的步骤2)中具体包括21)流处理器通过访存地址判断将融合后得到的访存请求需要发送到内存序号,并将融合后。
4、得到的访存请求发送到与该内存序号对应的内存中。4根据权利要求3所述的一种GPU上的访存方法,其特征在于所述的步骤21)通过访存地址判断的判断方式为将某一融合后的访存请求中的所有访存地址展开为数组,将展开后数组中的访存地址对内存个数取余,得到需要发送访存请求的内存序号。5根据权利要求1所述的一种GPU上的访存方法,其特征在于所述的步骤3)中具体包括31)内存接收从流处理器发出的经过融合的访存请求后,将融合过的访存请求还原为未融合的多个访存请求;33)将未融合的多个访存请求发送到相应的内存块,读出所需数据。6根据权利要求5所述的一种GPU上的访存方法,其特征在于所述的步骤31)中将融合过的访存请求。
5、还原为未融合的多个访存请求具体过程为将某一融合后的访存请求中的所有访存地址展开为数组,形成未融合的多个访存请求,其中一个访存地址作为一个访存请求。7根据权利要求5所述的一种GPU上的访存方法,其特征在于所述的步骤33)中将未融合的多个访存请求发送到相应的内存块,具体为将其中各个访存地址对内存个数取余,得到需要发送访存请求的内存序号;若得到的内存序号与当前内存序号相同,则发送该访存请求到相应的内存块;若得到的内存序号与当前内存序号不相同,则忽略该访存请求。8根据权利要求1所述的一种GPU上的访存方法,其特征在于所述的步骤4)具体包括41)内存将从内存块中读出的所有数据放在缓冲区中;42)将各个数。
6、据首部加上该数据对应的融合后的访存请求和当前内存序号,得到数据块;权利要求书CN104199782A2/2页343)将数据块发送回发出该数据块对应请求的流处理器。9根据权利要求1所述的一种GPU上的访存方法,其特征在于所述的步骤5)具体包括51)接收从内存发送回的数据块后,通过数据块中融合后的访存请求和内存序号计算得到数据块中各字节的地址;52)最后通过数据块中各字节的地址存储数据。10根据权利要求9所述的一种GPU上的访存方法,其特征在于所述的步骤51)数据块中各字节的地址采用以下方式计算将数据块中融合后的访存请求的所有访存地址展开为数组,将展开后各访存地址对内存个数取余得到的内存序号与数据。
7、块中的内存序号相比较;如果两者相同,则将该访存地址为数据块中对应字节的地址;如果两者不相同,则忽略。权利要求书CN104199782A1/5页4一种GPU上的访存方法技术领域0001本发明涉及GPU体系结构和GPU的访存方法设计领域,特别是涉及在GPU体系结构下一种GPU上的访存方法。背景技术0002GPU的硬件结构与CPU的硬件结构有着差别极大,GPU的硬件由内存和流处理器组成。GPU实际上是一个处理器核的阵列,每个流处理器包含多个核,一个GPU设备中包含一个或多个流处理器,因此处理器才具有可扩展性。如果向设备中增加更多的流处理器,GPU就可以在同一时刻处理更多的任务,或者对于同一任务,如果。
8、有充足的并行性的话,GPU可以更快的完成该任务。0003GPU使用的是高速存储器,具有稳定的带宽,但同所有内存一样,存在严重的访存延迟。通过对内存以融合方式的访问,访存延迟在一定程度上能被隐藏。原始的融合访问就是融合所有线程访问连续的对齐的内存块。如果对内存进行一对一连续访问,则每个线程的访存地址可融合,只需一次访存请求即可解决问题。假设每个线程访问一个4字节的内存块。内存会基于线程束进行融合,也就是访问一次内存将得到324128个字节的数据。合并的大小支持32字节,64字节和128字节,分别表示线程束中的每个线程以1个字节,2个字节及4个字节为单位读取数据,但前提是访存请求必须连续,并且是以。
9、32字节为基准对齐的。发明内容0004为了解决背景技术中存在的问题,本发明的目的在于提供一种GPU上的访存方法,本发明能提高访存效率,隐藏内存延迟,提高GPU的综合性能。0005本发明解决其技术问题采用的技术方案如下1)对流处理器中发出的请求进行访存融合;2)流处理器将融合后的访存请求发送到相应内存中;3)内存中将融合后的访存请求进行拆分,并读出数据;4)内存中将读出数据形成数据块返回到流处理器;5)流处理器对发回的数据块进行处理、存储。0006所述的步骤1)中对流处理器中发出的请求进行访存融合具体包括11)将GPU多核中的流处理器发出的请求地址放在一个数组中;12)将数组中的访存地址按从小到。
10、大顺序进行排序,并使得同一数组中的各访存地址不重复;每个数组中,按从小到大的顺序依次将所有访存地址中访存地址之间的距离相同的访存地址融合为一次访存请求。0007所述的步骤2)具体包括21)流处理器通过访存地址判断将融合后得到的访存请求需要发送到内存序号,并将融合后得到的访存请求发送到与该内存序号对应的内存中;说明书CN104199782A2/5页5所述的步骤21)通过访存地址判断的判断方式为将某一融合后的访存请求中的所有访存地址展开为数组,将展开后数组中的访存地址对内存个数取余,得到需要发送访存请求的内存序号。0008所述的步骤3)具体包括31)内存接收从流处理器发出的经过融合的访存请求后,将。
11、融合过的访存请求还原为未融合的多个访存请求;33)将未融合的多个访存请求发送到相应的内存块,读出所需数据。0009所述的步骤31)中将融合过的访存请求还原为未融合的多个访存请求具体过程为将某一融合后的访存请求中的所有访存地址展开为数组,形成未融合的多个访存请求,其中一个访存地址作为一个访存请求。0010所述的步骤33)中将未融合的多个访存请求发送到相应的内存块,具体为将其中各个访存地址对内存个数取余,得到需要发送访存请求的内存序号;若得到的内存序号与当前内存序号相同,则发送该访存请求到相应的内存块;若得到的内存序号与当前内存序号不相同,则忽略该访存请求。0011所述的步骤4)具体包括41)内存。
12、将从内存块中读出的所有数据放在缓冲区中;42)将各个数据首部加上该数据对应的融合后的访存请求和当前内存序号,得到数据块;43)将数据块发送回发出该数据块对应请求的流处理器。0012所述的步骤5)具体包括51)接收从内存发送回的数据块后,通过数据块中融合后的访存请求和内存序号计算得到数据块中各字节的地址;52)最后通过数据块中各字节的地址存储数据。0013所述的步骤51)数据块中各字节的地址采用以下方式计算将数据块中融合后的访存请求的所有访存地址展开为数组,将展开后各访存地址对内存个数取余得到的内存序号与数据块中的内存序号相比较;如果两者相同,则将该访存地址为数据块中对应字节的地址;如果两者不相。
13、同,则忽略。0014本发明与背景技术相比,具有的有益的效果是本发明是对访存地址具有相同间隔的访存请求进行融合。通过对一些现存的标准程序进行测试,提高了访存效率,隐藏了内存延迟,提高了GPU的综合性能。可将本方法与现有方法结合使用,从而使得程序的性能都能得到不同的提高。附图说明0015附图是本发明的总体流程图。具体实施方式0016下面结合附图和实施例对本发明作进一步说明。0017如附图所示,本发明包括说明书CN104199782A3/5页61)对流处理器中发出的请求进行访存融合;2)流处理器将融合后的访存请求发送到相应内存中;3)内存中将融合后的访存请求进行拆分,并读出数据;4)内存中将读出数据。
14、形成数据块返回到流处理器;5)流处理器对发回的数据块进行处理、存储。0018上述步骤1)中对流处理器中发出的请求进行访存融合具体包括11)将GPU多核中的流处理器发出的请求地址放在一个数组中;12)将数组中的访存地址按从小到大顺序进行排序,排序后若有某个访存地址在数组中重复了多次,则删除多余的访存地址,使得减为一次,即使得同一数组中的各访存地址不重复;每个数组中,按从小到大的顺序依次将所有访存地址中访存地址之间的距离相同的访存地址融合为一次访存请求。0019融合过程具体为121)取出数组中的前两个地址,将其差赋给距离变量;122)取将第三个地址与第二个地址的差与距离变量比较,若不相等则将前两个。
15、地址融合为一次访存请求,若相等则将第三个地址归为与前两个地址相同的访存请求,再继续比较后面的访存地址,依次类推并重复上步骤,直到数组中所有访存地址均被融合掉。0020上述步骤2)中具体包括21)流处理器通过访存地址判断将融合后得到的访存请求需要发送到内存序号,并将融合后得到的访存请求发送到与该内存序号对应的内存中。由于一个GPU中存在多个内存,一个融合过的访存请求可能需要发送给多个内存,也有可能发送到一个内存中。0021其判断方式为将某一融合后的访存请求中的所有访存地址展开为数组,将展开后数组中的访存地址对内存个数取余,得到需要发送访存请求的内存序号。0022上述步骤3)中具体包括31)内存接。
16、收从流处理器发出的经过融合的访存请求后,将融合过的访存请求还原为未融合的多个访存请求;32将某一融合后的访存请求中的所有访存地址展开为数组,形成未融合的多个访存请求,其中一个访存地址作为一个访存请求。002333)将未融合的多个访存请求发送到相应的内存块,读出所需数据。发送前,将其中各个访存地址对内存个数取余,得到需要发送访存请求的内存序号;若得到的内存序号与当前内存序号相同,则发送该访存请求到相应的内存块;若得到的内存序号与当前内存序号不相同,则忽略该访存请求。0024上述步骤4)具体包括41)内存将从内存块中读出的所有数据放在缓冲区中;42)将各个数据首部加上该数据对应的融合后的访存请求和。
17、当前内存序号,得到数据块;43)将数据块发送回发出该数据块对应请求的流处理器。0025上述步骤5)具体包括51)接收从内存发送回的数据块后,通过数据块中融合后的访存请求和内存序号计算得到数据块中各字节的地址;将数据块中融合后的访存请求的所有访存地址展开为数组,说明书CN104199782A4/5页7将展开后各访存地址对内存个数取余得到的内存序号与数据块中的内存序号相比较;如果两者相同,则将该访存地址为数据块中对应字节的地址;如果两者不相同,则忽略。002652)最后通过数据块中各字节的地址存储数据。0027本发明由于一组呈等差数列的地址可以由首地址,地址数,间隔距离3个变量表示,因此本发明将一。
18、系列地址呈等差数列的访存请求转换成一个访存请求。有效的减少了访存请求的数量,提高了性能。0028本发明的实施例如下以由1个流处理器发出16个访存请求为例,共6块内存,内存序号为05。00291流处理器行访存融合1流处理器发出16个访存请求,地址序列为1664,1792,1920,2560,3328,4096,4864,5632,128,256,384,512,640,768,896,640;2将以上请求地址放在一个数组中;3将数组中的访存地址按从小到大顺序进行排序,排序后若有某个访存地址在数组中重复了多次,则删除多余的访存地址,使得减为一次,即使得同一数组中的各访存地址不重复,操作后数组为12。
19、8,256,384,512,640,768,896,1664,1792,1920,2560,3328,4096,4864,5632;4按从小到大的顺序依次将所有访存地址中访存地址之间的距离相同的访存地址融合为一次访存请求,操作后数组为128,256,384,512,640,768,896融合为128(首地址),7(地址数),128(间隔距离),1664,1792,1920融合为1664,3,128,2560,3328,4096,4864,5632融合为2560,5,768;2流处理器将融合后的访存请求发送到相应内存1流处理器通过访存地址判断将融合后得到的访存请求需要发送到内存序号,并将融合后得。
20、到的访存请求发送到与该内存序号对应的内存中,融合后的128,7,128发送到0,1,2,3,4,5号内存中,1664,3,128发送到1,2,3号内存中,2560,5,768发送到2号内存中;3内存中将融合后的访存请求进行拆分,并读出数据1)内存接收从流处理器发出的经过融合的访存请求后,将融合过的访存请求还原为未融合的多个访存请求,128,7,128还原成128,256,384,512,640,768,896,1664,3,128还原成1664,1792,1920,2560,5,768还原成2560,3328,4096,4864,5632;在0号内存中取出地址768所对应的数据D768,在1号。
21、内存中取出地址128,896,1664所对应的数据D128,D896,D1664,在2号内存中取出地址256,1792,2560,3328,4096,4864,5632所对应的数据D256,D1792,D2560,D3328,D4096,D4864,D5632,在3号内存中取出地址384,1920所对应的数据D384,D1920,在4号内存中取出地址512所对应的数据D512,在5号内存中取出地址640所对应的数据D640;4内存中将读出数据形成数据块返回到流处理器1各内存将从内存块中读出的所有数据放在缓冲区中;2将各个数据首部加上该数据对应的融合后的访存请求和当前内存序号,得到数据块,0号内。
22、存中的数据块包括0内存号,128,7,128,D768,1号内存中的数说明书CN104199782A5/5页8据块包括1,128,7,128,D128,D896,1,1664,3,128,D1664,2号内存中的数据块包括2,128,7,128,D256,2,1664,3,128,D1792,2,2560,5,768,D2560,D3328,D4096,D4864,D5632,3号内存中的数据块包括3,128,7,128,D384,3,1664,3,128,D1920,4号内存中的数据块包括4,128,7,128,D512,5号内存中的数据块包括5,128,7,128,D640;3将数据块发送。
23、回发出该数据块对应请求的流处理器。00305流处理器对发回的数据块进行处理、存储1接收从内存发送回的数据块后,通过数据块中融合后的访存请求和内存序号计算得到数据块中各字节的地址;将数据块中融合后的访存请求的所有访存地址展开为数组,将展开后各访存地址对内存个数取余得到的内存序号与数据块中的内存序号相比较;如果两者相同,则将该访存地址为数据块中对应字节的地址;如果两者不相同,则忽略;0,128,7,128,D768为768访存地址,D768,1,128,7,128,D128,D896为128,896D128,D896,1,1664,3,128,D1664为1664,D1664,2,128,7,12。
24、8,D256为256,D256,2,1664,3,128,D1792为1792,D1792,2,2560,5,768,D2560,D3328,D4096,D4864,D5632为2560,3328,4096,4864,5632,D2560,D3328,D4096,D4864,D5632,3,128,7,128,D384为384,D384,3,1664,3,128,D1920为1920,D1920,4,128,7,128,D512为512,D512,5,128,7,128,D640为640,D640;2)最后通过数据块中各字节的地址存储数据。0031本发明能明显减少从流处理器发出的访存数。使用原。
25、方法时,访存数为15次,而本发明的访存数为10次,提高了访存效率。0032采用如上本发明方法运行POLYBENCHHTTP/WEBCSEOHIOSTATEEDU/POUCHET/SOFTWARE/POLYBENCH/和RODINIA(HTTP/WWWCSVIRGINIAEDU/SKADRON/WIKI/RODINIA/INDEXPHP/MAIN_PAGE)中的程序,结果如下表1。0033表1程序名原访存数本发明访存数本发明访存数/原访存数PARTICLELTER19876209896584979NW10731528683528092ATAX1939891241945602162BICG1939。
26、891241945602162LAVA_MD3467603552636345057603K_MEANS1818650245393102496CORR165340399477653942889GESUMMV1403799924064471714MVT1649387524256561471COVAR170508760478336222805SYR2K9202211239971347SYRK852727112546801471由此可看出,本发明通过对访存地址具有相同间隔的访存请求的融合,使得从流处理器发出的访存数明显减少,从而提高了访存效率,隐藏了内存延迟,提高了GPU的综合性能,具有显著的技术效果。说明书CN104199782A1/1页9图1说明书附图CN104199782A。