System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术属于gpu测试,具体涉及一种基于数据分段的gpu全片存储带宽度量方法。
技术介绍
1、图形处理单元gpu(graphics processing unit)存在类似于cpu的多级存储结构,由外至内包括全局存储(global memory)、常量存储(data cache)、局部存储(localmemory)和私有存储(寄存器register),这些存储结构在带宽、可访问性和数据共享等方面具有不同的特点和优缺点,具体如下表所示:
2、 存储器名称 访问模式 访问速度 作用范围 生存期 全局存储 读写 慢 主机和所有线程 整个程序 常量存储 只读 慢 主机和所有线程 整个程序 局部存储 读写
3、使用gpu进行计算时准确评估和了解这些存储结构的带宽对于gpu程序性能的优化至关重要,充分利用各级存储结构的特点能够更有效地提高gpu的计算性能。然而,现有测试工具主要测试的是cpu到gpu显存之间的带宽,或者是gpu全局内存到gpu寄存器之间的带宽,而未涉及与gpu局部存储相关的带宽,因此无法全面有效的支撑gpu程序的性能优化。
技术实现思路
1、有鉴于此,本专利技术提供了一种基于数据分段的gpu全片存储带宽度量方法,实现了基于程序实际运行的gpu全片各级存储结构带宽的实际测量。
2、本专利技术提供的一种基于数据分段的gpu全片存储带宽度量方法,包括以下步骤:
3、建立用于测试gpu全片存储带宽的测试数据集,测试数据集包含一定数据量的测试数据,测试数据的数量即为测试数据集中数据的总数量size;
4、将测试数据集存储到全局存储中执行n次第一gpu核函数,建立p个线程由这p个线程分别循环分段从全局存储中读取数据到寄存器中,p个线程传输的数据总量与第一gpu核函数的执行时间的比值即为全局存储与寄存器间的带宽;
5、将测试数据集存储到局部存储中执行m次第二gpu核函数,建立q个线程由这q个线程分别循环分段从局部存储中读取数据到寄存器中,q个线程传输的数据总量与第二gpu核函数的执行时间的比值即为局部存储与寄存器间的带宽;
6、将测试数据集存储到全局存储中执行t次第三gpu核函数,建立r个线程由这r个线程分别从局部存储中读取数据到寄存器中,r个线程传输的数据总量与第三gpu核函数的执行时间的比值即为全局存储与局部存储间的带宽。
7、进一步地,所述测试数据集包括多个具有不同测试数据量的测试数据集,采用多个具有不同测试数据量的测试数据集分别执行第一gpu核函数、第二gpu核函数及第三gpu核函数得到多个全局存储与寄存器间的带宽、局部存储与寄存器间的带宽及全局存储与局部存储间的带宽,分别选取其中的最大值作为gpu中对应带宽的测试结果。
8、进一步地,所述将测试数据集存储到全局存储中执行n次第一gpu核函数,建立p个线程由这p个线程分别循环分段从全局存储中读取数据到寄存器中,p个线程传输的数据总量与第一gpu核函数的执行时间的比值即为全局存储与寄存器间的带宽,具体包括:
9、步骤3.1、将测试数据集由主机端传输到gpu设备端,并将测试数据集存储在全局存储中;令n的取值为1,n为第一gpu核函数的执行次数,且n不大于n;令time1的取值为0,time1为测试时间,启动计时器记录测试时间;
10、步骤3.2、启动第一gpu核函数,建立p个线程,各线程每次读取数据的数量为num1个,且num1小于size;分别为p个线程设置线程id,记为gid_p,p为线程的编号且p不大于p;为每个线程设置偏移计算变量s_p,令s_p的取值为gid_p;为每个线程设置循环执行次数k1_p,且k1_p的最大值均为k1,令k1_p的取值为1;设置数据读取的偏移常量rel1;为每个线程设置偏移索引i_p,令i_p=(s_p+rel1)$(size-1),该偏移索引用于确定该线程从全局存储中读取数据时的起始位置;
11、步骤3.3、p个线程分别从全局存储中与该线程对应的偏移索引i_p位置读取num1个数据传输到寄存器,并使用当前的偏移索引i_p更新s_p的取值,令k1_p自加1;
12、步骤3.4、若存在k1_p不大于k1的线程,则采用i_p=(s_p+rel1)$(size-1)重新计算并更新该线程的i_p取值,再执行步骤3.3;否则执行步骤3.5;
13、步骤3.5、令n自加1,若n不大于n则执行步骤3.2;否则关闭计时器记录测试时间time1的取值,采用公式gr-bd=(k1*num1*n*p*4)/time1计算gpu内全局存储与寄存器间的带宽gr-bd。
14、进一步地,所述步骤3.2中所述偏移常量rel1的取值为0、32或64。
15、进一步地,所述将测试数据集存储到局部存储中执行m次第二gpu核函数,建立q个线程由这q个线程分别循环分段从局部存储中读取数据到寄存器中,q个线程传输的数据总量与第二gpu核函数的执行时间的比值即为局部存储与寄存器间的带宽,具体包括:
16、步骤4.1、将测试数据集由主机端传输到gpu设备端,将测试数据集存储在全局存储中再将测试数据集从全局存储读取到局部存储,局部存储中偏移索引为i_q,局部存储的大小为lbsize;令m的取值为1,m为第二gpu核函数的执行次数,且m不大于m;令time2的取值为0,time2为测试时间,启动计时器记录测试时间;i_q为数据的偏移索引;
17、步骤4.2、启动第二gpu核函数,建立q个线程,各线程每次读取数据的数量为num2个,且num2小于size;分别为q个线程设置线程id,记为gid_q,q为线程的编号且q不大于q;本文档来自技高网...
【技术保护点】
1.一种基于数据分段的GPU全片存储带宽度量方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的GPU全片存储带宽度量方法,其特征在于,所述测试数据集包括多个具有不同测试数据量的测试数据集,采用多个具有不同测试数据量的测试数据集分别执行第一GPU核函数、第二GPU核函数及第三GPU核函数得到多个全局存储与寄存器间的带宽、局部存储与寄存器间的带宽及全局存储与局部存储间的带宽,分别选取其中的最大值作为GPU中对应带宽的测试结果。
3.根据权利要求1所述的GPU全片存储带宽度量方法,其特征在于,所述将测试数据集存储到全局存储中执行N次第一GPU核函数,建立P个线程由这P个线程分别循环分段从全局存储中读取数据到寄存器中,P个线程传输的数据总量与第一GPU核函数的执行时间的比值即为全局存储与寄存器间的带宽,具体包括:
4.根据权利要求3所述的GPU全片存储带宽度量方法,其特征在于,所述步骤3.2中所述偏移常量REL1的取值为0、32或64。
5.根据权利要求1所述的GPU全片存储带宽度量方法,其特征在于,所述将测试数据集存储到局部存储中
6.根据权利要求1所述的GPU全片存储带宽度量方法,其特征在于,所述局部存储中定义局部数组localbuf[i_q]用于保存数据。
7.根据权利要求5所述的GPU全片存储带宽度量方法,其特征在于,所述偏移常量REL2的取值范围为[0,15]。
8.根据权利要求1所述的GPU全片存储带宽度量方法,其特征在于,所述将测试数据集存储到全局存储中执行T次第三GPU核函数,建立R个线程由这R个线程分别从局部存储中读取数据到寄存器中,R个线程传输的数据总量与第三GPU核函数的执行时间的比值即为全局存储与局部存储间的带宽,具体包括:
...【技术特征摘要】
1.一种基于数据分段的gpu全片存储带宽度量方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的gpu全片存储带宽度量方法,其特征在于,所述测试数据集包括多个具有不同测试数据量的测试数据集,采用多个具有不同测试数据量的测试数据集分别执行第一gpu核函数、第二gpu核函数及第三gpu核函数得到多个全局存储与寄存器间的带宽、局部存储与寄存器间的带宽及全局存储与局部存储间的带宽,分别选取其中的最大值作为gpu中对应带宽的测试结果。
3.根据权利要求1所述的gpu全片存储带宽度量方法,其特征在于,所述将测试数据集存储到全局存储中执行n次第一gpu核函数,建立p个线程由这p个线程分别循环分段从全局存储中读取数据到寄存器中,p个线程传输的数据总量与第一gpu核函数的执行时间的比值即为全局存储与寄存器间的带宽,具体包括:
4.根据权利要求3所述的gpu全片存储带宽度量方法,其特征在于,所述步骤3.2中所述偏移常量rel1的取值为0、3...
【专利技术属性】
技术研发人员:邓强,杜凯,温研,刘忠新,钟阳宇,
申请(专利权)人:北京麟卓信息科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。