一种全局内存访问的方法和设备的制造方法_2

文档序号:9471303阅读:来源:国知局
列号与所述第二列号相差为1,且所述最小索引值按照所述第二公式 得到的行号为〇,所述最大索引值按照所述第二公式得到的行号为M-1,则确定所述访问模 式为所述依次访问;
[0065] 所述第三公式包括:
[0066]
,maxIndex表示所述最大索引值,minIndex表示 所述最小索引值。
[0067] 结合第二方面的第二种可能的实现方式,在第五种可能的实现方式中,所述转置 单元具体用于:
[0068] 获取所述数据块的空间大小,在全局内存中分配同等大小的数据空间,同时分配 局部内存用于存储待转置的元素;
[0069] 将所述当前half-warp线程束访问的元素进行转置,并将转置后的元素存储在局 部内存中;
[0070] 将转置后的元素形成的转置数据块写回所述全局内存分配的同等大小的数据空 间;
[0071] 其中,所述局部内存的大小为:
[0072] Block_dim*(Block_dim+l)*sizeof(type of Data)
[0073] Block_dim表示所述当前half-warp线程束的线程个数,sizeof (type of Data)表 示所述数据块中的一个元素的存储空间大小。
[0074] 结合第二方面的第五种可能的实现方式,在第六种可能的实现方式中,所述判断 单元还用于:
[0075] 在所述判断单元判断所述访问模式是否为按列依次访问之前,根据当前 half-warp线程束访问的每个元素的索引值中的最大值,判断此次访问是否结束;
[0076] 若所述当前half-warp线程束访问的每个元素的索引值中的最大值满足: maxlndex = M*N_1,则确定此次访问结束;
[0077] 其中,maxlndex表示所述当前half-warp线程束访问的每个元素的索引值中的最 大值。
[0078] 结合第二方面,在第二方面的第七种可能的实现方式中,所述判断单元具体用 于:
[0079] 若所述标志位为所述第一标识,则确定所述数据块未进行转置;
[0080] 若所述标志位为所述第二标识,则确定所述数据块已进行转置。
[0081] 本发明实施例提供的全局内存访问的方法和设备,在访问只读全局内存数据块 时,根据数据块的标志位判断数据块是否已进行转置;若未进行转置,则判断访问模式是否 为按列依次访问,若访问模式为按列依次访问,则在访问数据块的同时对数据块进行转置, 得到转置数据块并对转置数据块进行存储;若已进行转置,则判断访问模式是否为按列依 次访问,若访问模式为按列依次访问,则访问转置数据块,使得访问转置数据块时能够进行 合并访问,若访问模式不为按列依次访问,则访问转置之前的数据块,解决了访问全局内存 时,可能会出现非合并访问而导致的全局内存访问带宽降低的问题。
【附图说明】
[0082] 为了更清楚地说明本发明实施例的技术方案,下面将对实施例或现有技术描述中 所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实 施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图 获得其他的附图。
[0083] 图1为本发明实施例提供的一种全局内存访问的方法流程示意图;
[0084] 图2为本发明实施例提供的一种全局内存访问的方法流程示意图;
[0085] 图3为本发明实施例提供的一种设备结构框图;
[0086] 图4为本发明实施例提供的一种设备结构框图。
【具体实施方式】
[0087] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他 实施例,都属于本发明保护的范围。
[0088] 本发明实施例的应用场景可以是由GPGPU、开放运算语言(OpenComputing Language,OpenCL) / 同一计算设备架构(ComputeUnifiedDeviceArchitecture,CUDA)编 译平台、GPU应用程序组成。其中,GPU应用程序通过OpenCL/CUDA编译平台在GPGPU上运 行。本发明实施例是针对GPU应用程序对GPGPU全局内存的访问模式的改进,即实现时,需 要对OpenCL/CUDA编译平台进行相应的改进,使之能够完成相应的功能。
[0089] 实施例一
[0090] 本发明实施例提供一种全局内存访问的方法,参见图1,其步骤包括:
[0091] 101、设备在访问只读全局内存数据块时,根据数据块的标志位判断数据块是否已 进行转置。
[0092] 该设备可以为计算机等。全局内存可以用以存储没有初始化的和初始化为0的全 局变量bss、数据data和只读数据rodata。这里的只读全局内存是指全局内存中的只读数 据。
[0093] 具体的,在根据数据块的标志位flag判断数据块是否已进行转置时,如果标志位 为第一标识false,则确定该数据块未进行转置;如果标志位为第二标识true,则确定该数 据块已进行转置。
[0094] 102、若未进行转置,则设备判断访问模式是否为按列依次访问,若访问模式为按 列依次访问,则在访问数据块的同时对数据块进行转置,得到转置数据块并对转置数据块 进行存储。
[0095] 由于GPU全局内存的访问模式可以为:按行访问的模式、按列访问的模式、以及乱 序访问的模式。针对本发明要解决的按列访问数据块出现的非合并访问的情况,在访问全 局内存时,首先对访问模式进行判断,确定是否为按列依次访问。这里还要判断是否为依次 访问,也就是访问的数据地址是否按列连续,是由于数据地址不连续出现非合并访问时,如 果对数据进行转置,其转置后的数据块的数据地址也不连续,再次访问转置数据块时,继续 会出现非合并访问的情况。
[0096] 如果为按列依次访问,就访问原数据块,其中每访问一个原数据块中的数据,对该 数据进行一次转置,这样访问原数据块完毕后,就同时形成了原数据块的转置数据块,以便 于下一次将要按列依次访问原数据块时,直接访问其对应的转置数据块,使得访问的数据 地址连续,可以进行合并访问。
[0097] 其中,判断访问模式是否为按列依次访问,是通过先判断访问模式是否为按列访 问,若判断访问模式为按列访问,则再判断访问模式是否为依次访问。
[0098] 其中,对数据块进行转置,指的是将数据块的第一行变成第一列,第二行变成第二 列,......,最后一行变成最后一列。
[0099] 103、若已进行转置,则设备判断访问模式是否为按列依次访问,若访问模式为按 列依次访问,则访问转置数据块,使得访问转置数据块时能够进行合并访问,若访问模式不 为按列依次访问,则访问转置之前的数据块。
[0100] 本发明实施例提供的全局内存访问的方法,在访问只读全局内存数据块时,根据 数据块的标志位判断数据块是否已进行转置;若未进行转置,则判断访问模式是否为按列 依次访问,若访问模式为按列依次访问,则在访问数据块的同时对数据块进行转置,得到转 置数据块并对转置数据块进行存储;若已进行转置,则判断访问模式是否为按列依次访问, 若访问模式为按列依次访问,则访问转置数据块,使得访问转置数据块时能够进行合并访 问,若访问模式不为按列依次访问,则访问转置之前的数据块,解决了现有技术中,访问全 局内存过程中,可能会出现按列访问时非合并访问的情况,而导致的全局内存访问带宽降 低的问题。
[0101] 实施例二
[0102] 本发明实施例提供一种全局内存访问的方法,以访问只读全局内存数据块二维矩 阵Data, Data数据块的大小为M*N(M行N列),以行优先的顺序存储为例进行说明,如图2 所示,包括:
[0103] 201、在访问只读全局内存数据块时,根据数据块的标志位判断数据块是否已进行 转置,若未进行转置,则进入步骤202 ;若已进行转置,则进入步骤207。
[0104] 示例性的,可以将全局内存中的数据块通过标志位flag进行标识,若数据块的 flag为第一标识flase,则确定该数据块没有作出调整,即未做任何处理,未进行转置;若 数据块的flag为第二标识true则确定该数据块已经经过转置。
[0105] 202、判断访问模式是否为按列访问,若为按列访问,则进入步骤203 ;若不为按列 访问,则进入步骤206。
[0106] 先对访问模式是否为按列访问进行判断,这里可以通过在GPU编译平台中在访问 语句前插入桩代码,用以指示判断访问模式是否为按列访问,也可以为其它的指示方式,这 里不做限定。
[0107] 其中,在判断是否按列访问时,可以先获取当前half-warp线程束访问数据块时 所访问的每个元素的索引值,根据索引值并按照第一公式获取当前half-warp线程束访 问的子数据块中的每个元素的列号,这里的子数据块是指当前half-warp线程束访问的该 Data数据块中的部分元素这里的第一公式包括:
[0108]
columnlndex表不列号,index表不索引值,N 表示数据块的列数
表示当前计算的元素所在行之前的行数,
表示当前 计算的元素所在行之前的所有行的元素总数。
[0109] 若每个元素对应的列号相等,且相邻索引值之间相差为N,则可以确定访问模式为 按列访问;若每个兀素对应的列号中有两个列号相差为1,同时列号相等的相邻索引值相 差为N,其中的列号大者对应的每个元素按照第二公式得出的行号中最小值为0,列号小者 对应的每个元素按照第二公式得出的行号中最大值为M-I,M表示数据块的行数,则确定访 问模式为按列访问,这里的第二公式包括
m表示行号,index表示索引值,N 表示数据块的列数。也就是说,判断是否为按列访问,有两种情况,一种是判断是否为同一 列的元素,另一种是判断此次访问的是否为相邻两列的元素。
[0110] 其中的索引值index为所访问的全局内存数据块元素的标识,本发明的元素的标 识为〇、1,......M*N_1。这里的彳丁号是从0依次至M_1标识的。
[0111] 203、判断访问模式是否为依次访问,若为依次访问,则进入步骤204;若不为依次 访问,则进入步骤206。
[0112] 若判断了访问模式为按列访问后,再判断是否访问的是数据的地址是否连续,也 即此次half-warp线程束所访问的子数据块和上一次half-warp线程束所访问的子数据块 是否为相邻子数据块,这里的相邻子数据块是该M*N矩阵中的两部分子数据块。具体可以 将此次half-warp线程束所访问每个元素对应的索引值中的最小索引值按照第一公式得 到的第一列号
当前第2页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1