一种确定内存单元类型的方法及装置的制造方法

文档序号:9708140阅读:372来源:国知局
一种确定内存单元类型的方法及装置的制造方法
【技术领域】
[0001]本发明涉及计算机领域,尤其涉及一种确定内存单元类型的方法及装置。
【背景技术】
[0002]在目前的一些编程框架下,例如统一计算设备架构(Compute Unified DeviceArchitecture, CUDA)或开放运算语言(Open Computing Language, OpenCL),需要程序员根据经验确定内存单元的类型,即内存单元属于全局存储器还是属于局部存储器。而完全依赖程序员的主观经验,极容易出现误判。
[0003]所以,如何减小对内存单元类型的误判,成为目前亟待解决的问题。

【发明内容】

[0004]本发明实施例提供了一种确定内存单元类型的方法及装置,目的在于解决如何减小对内存单元类型的误判的问题。
[0005]为了实现上述目的,本发明实施例提供了以下技术方案:
[0006]本发明实施例的第一方面提供了一种确定内存单元类型的方法,包括:
[0007]判断在多线程访问模式下,内存单元被合并访问的几率是否大于第一阈值,以及在所述多线程访问模式下,在所述内存单元被访问的过程中,是否存在存储体冲突;
[0008]如果内存单元满足第一条件,则将所述内存单元的存储类型确定为全局存储,所述第一条件包括:在多线程访问模式下,所述内存单元被合并访问的几率大于第一阈值,或者,在所述多线程访问模式下,在所述内存单元被访问的过程中,存在存储体冲突;
[0009]如果所述内存单元满足第二条件,则将所述内存单元的存储类型确定为局部存储,所述第二条件包括:在所述多线程访问模式下,所述内存单元被合并访问的几率小于所述第一阈值,并且,在所述多线程访问模式下,在所述内存单元被访问的过程中,不存在存储体冲突。
[0010]在本发明实施例的第一方面的第一种实现方式中,确定在所述多线程访问模式下,所述内存单元被合并访问的几率包括:
[0011 ] 统计在半线程束中、所述内存单元被访问的次数以及被合并访问的次数;
[0012]将所述被合并访问的次数与所述被访问的次数的比值作为所述被合并访问的几率;
[0013]判断在所述多线程访问模式下,在所述内存单元被访问的过程中,是否存在存储体冲突的过程包括:
[0014]统计在所述半线程束中、在所述内存单元被访问的过程中,存储体冲突发生的次数,如果所述存储体冲突发生的次数不为零,则确定存在存储体冲突,否则,则确定不存在存储体冲突。
[0015]在本发明实施例的第一方面的第二种实现方式中,在将所述内存单元的存储类型确定为全局存储或局部存储之后,还包括:
[0016]生成分析代码,所述分析代码用于记录所述内存单元后续被访问的情况,所述后续被访问的情况至少包括以下一项:后续被合并访问的次数、后续被访问的次数。
[0017]在本发明实施例的第一方面的第三种实现方式中,还包括:
[0018]在将所述内存单元的存储类型确定为全局存储的情况下,统计所述分析代码中记录的所述内存单元被访问的次数以及被合并访问的次数;
[0019]当所述分析代码中记录的内存单元被访问的次数大于第二阈值且被合并访问的百分比小于第三阈值时,将所述内存单元的类型更改为局部存储,所述被合并访问的百分比为所述被合并访问的次数与所述被访问的次数的比值;
[0020]在将所述内存单元的存储类型确定为局部存储的情况下,统计所述分析代码中记录的所述内存单元被访问的次数以及存储体冲突发生的次数;
[0021]当分析代码中记录的所述内存单元被访问的次数大于所述第二阈值且存储体冲突发生的百分比大于第四阈值时,将所述内存单元的类型更改为全局存储,所述存储体冲突发生的百分比为所述存储体冲突发生的次数与所述被访问的次数的比值。
[0022]在本发明实施例的第一方面的第四种实现方式中,所述内存单元的初始类型包括:
[0023]预先定义的空类型。
[0024]本发明实施例的第二方面提供了一种确定内存单元类型的装置,包括:
[0025]判断模块,用于判断在多线程访问模式下,内存单元被合并访问的几率是否大于第一阈值,以及在所述多线程访问模式下,在所述内存单元被访问的过程中,是否存在存储体冲突;
[0026]第一确定模块,用于如果内存单元满足第一条件,则将所述内存单元的存储类型确定为全局存储,所述第一条件包括:在多线程访问模式下,所述内存单元被合并访问的几率大于第一阈值,或者,在所述多线程访问模式下,在所述内存单元被访问的过程中,存在存储体冲突;如果所述内存单元满足第二条件,则将所述内存单元的存储类型确定为局部存储,所述第二条件包括:在所述多线程访问模式下,所述内存单元被合并访问的几率小于所述第一阈值,并且,在所述多线程访问模式下,在所述内存单元被访问的过程中,不存在存储体冲突。
[0027]在本发明实施例的第二方面的第一种实现方式中,所述判断模块确定在所述多线程访问模式下,所述内存单元被合并访问的几率包括:
[0028]所述判断模块统计在半线程束中、所述内存单元被访问的次数以及被合并访问的次数,将所述被合并访问的次数与所述被访问的次数的比值作为所述被合并访问的几率;
[0029]所述判断模块判断在所述多线程访问模式下,在所述内存单元被访问的过程中,存在存储体冲突的过程包括:
[0030]所述判断模块统计在所述半线程束中、在所述内存单元被访问的过程中,存储体冲突发生的次数,如果所述存储体冲突发生的次数不为零,则确定存在存储体冲突,否则,则确定不存在存储体冲突。
[0031]在本发明实施例的第二方面的第二种实现方式中,还包括:
[0032]代码生成模块,用于在将所述内存单元的存储类型确定为全局存储或局部存储之后,生成分析代码,所述分析代码用于记录所述内存单元后续被访问的情况,所述后续被访问的情况至少包括以下一项:后续被合并访问的次数、后续被访问的次数。
[0033]在本发明实施例的第二方面的第三种实现方式中,还包括:
[0034]存储类型更改模块,用于在将所述内存单元的存储类型确定为全局存储的情况下,统计所述分析代码中记录的所述内存单元被访问的次数以及被合并访问的次数,当所述分析代码中记录的内存单元被访问的次数大于第二阈值且被合并访问的百分比小于第三阈值时,将所述内存单元的类型更改为局部存储,所述被合并访问的百分比为所述被合并访问的次数与所述被访问的次数的比值;
[0035]在将所述内存单元的存储类型确定为局部存储的情况下,统计所述分析代码中记录的所述内存单元被访问的次数以及存储体冲突发生的次数,当分析代码中记录的所述内存单元被访问的次数大于所述第二阈值且存储体冲突发生的百分比大于第四阈值时,将所述内存单元的类型更改为全局存储,所述存储体冲突发生的百分比为所述存储体冲突发生的次数与所述被访问的次数的比值。
[0036]在本发明实施例的第二方面的第四种实现方式中,还包括:
[0037]第二确定模块,用于在所述判断模块判断在多线程访问模式下,内存单元被合并访问的几率是否大于第一阈值,以及在所述多线程访问模式下,在所述内存单元被访问的过程中,是否存在存储体冲突之前,确定内存单元的类型为预先定义的空类型。本发明实施例提供的确定内存单元类型的方法及装置,将在多线程访问模式下,内存单元被合并访问的几率,以及在多线程访问模式下,在所述内存单元被访问的过程中,是否存在存储体冲突,作为确定内存单元类型的依据,因为内存单元被合并访问的几率以及是否存在存储体冲突均为内存单元在多线程访问模式下产生的客观参数,而不依赖程序员的主观经验,所以,以客观参数作为依据确定内存单元的类型,能够减小误判。
【附图说明】
[0038]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0039]图1为本发明实施例公开的一种确定内存单元类型的方法的流程图;
[0040]图2为本发明实施例公开的又一种确定内存单元类型的方法的流程图;
[0041]图3为本发明实施例公开的一种确定内存单元类型的装置的结构示意图。
【具体实施方式】
[0042]本发明实施例公开了一种确定内存单元类型的方法,可以应用于图形处理器(Graphic Processing Unit, GPU)应用程序通过OpenCL/CUDA编译平台在通用计算图形处理器(General Purpose Computing on Graphics Processing Units, GPGPU)上运行的场旦
ο
[0043]本发明实施例所述的方法,在内存单元满足第一条件时,将所述内存单元的存储类型确定为全局存储,如果所述内存单元满足第二条件,则将所述内存单元的存储类型确定为局部存储,其中,所述第一条件
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1