System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种基于Numba的大规模实例符号模型误差计算方法技术_技高网

一种基于Numba的大规模实例符号模型误差计算方法技术

技术编号:44453291 阅读:0 留言:0更新日期:2025-02-28 18:58
本发明专利技术公开了一种基于Numba的大规模实例符号模型误差计算方法,包括:模型转换与表示、误差计算、内存和线程组织以及误差归并。本发明专利技术将模型转化为逆波兰式形式,并以Numba数据格式表示,利用数组模拟栈对单条实例数据完成误差计算,组织了多级内存提高访问效率,设计高并行粒度的线程分配,两次误差归并快速完成所有误差求和。本发明专利技术提供了Python环境下的符号模型快速误差计算方法,充分利用了GPU的CUDA核心资源,大幅提高了符号模型评价效率,为相关领域提供支持。

【技术实现步骤摘要】

本专利技术涉及数据科学和高性能计算领域,具体涉及一种基于numba的大规模实例符号模型误差计算方法,该方法利用numba实现符号模型的快速误差计算。


技术介绍

1、符号模型是一种用于表示符号操作的模型,常见形式为数学表达式和方程,广泛应用于科研和工程中的数据描述与预测,包括回归分析、运动控制、数理规律表示等。模型优化、模型比较时需要计算预测模型与真实数据或真实模型的误差,当模型数量大、实例数据多时计算很慢,尤其在符号回归、高科解释性研究中十分耗时,严重影响计算效率。

2、随着大数据技术和高性能计算的发展,学者们设计了各种同构并行和异构并行的符号模型误差计算方法。符号模型的常用误差包括和方差、均方误差、均方根误差、决定系数等,都包括单个实例误差计算、误差求和等步骤。同构并行方法创建多个线程,并行计算不同实例数据的误差再进行求和,在cpu物理核心的数量和特性限制下,加速效果受限。异构并行方法将误差计算及求和部署在单指令流多数据流架构的gpu上,与同构并行方法类似,但充分利用了gpu多核心优势,加速效果显著。目前的异构并行算法多利用基于c语言的opencl和cuda获取gpu计算资源,对编码能力要求较高,数据科学中广泛使用python语言,目前有利用tensorflow库向量化的方式对python语言环境下的误差计算加速,将问题复杂化,并且并行粒度与计算流程并行化不足。


技术实现思路

1、本专利技术的目的是提供一种基于numba的大规模实例符号模型误差计算方法,用以提高当前异构并行符号模型误差计算的并行化程度,从而提高算法效率。

2、为了实现上述任务,本专利技术采用以下技术方案:

3、一种基于numba的大规模实例符号模型误差计算方法,包括:

4、在numba环境下,将基于语法树编码的符号模型进行后续遍历,得到序列化的逆波兰式,然后根据对应关系将逆波兰式表示为数组;然后将待进行计算的实例数据和数组形式的逆波兰式从主机内存发送至gpu,分别存储在全局内存和常量内存中;

5、申请二维的网格结构和二维的块结构,基于线程在块结构中的位置以及块结构在网格中的位置,为每个线程进行数据索引的分配,为实例数据中的每条数据分配线程,在共享内存中为每个线程分配模拟栈;

6、对于数组形式的逆波兰式,利用每条数据分配的线程将每条数据代入逆波兰式分别进行数据误差的计算;按顺序对逆波兰式中不同结点类型执行不同的栈操作,模拟栈的栈底数值即为逆波兰式的输出;基于该输出和每条数据的实际输出,得到数据误差;

7、当所有线程的数据误差均计算完毕后,进行两次误差归并处理:第一次误差归并对每个块结构中所有线程计算的数据误差并行求和存储于该块结构的第一个模拟栈作为该块结构的误差和;第二次误差归先将每个块结构的误差和复制至已分配的全局内存,并进行逐步求和,得到最终误差值并存储于网格结构中第一个模拟栈的栈底,最后将误差值发送至主机。

8、进一步地,所述对应关系为符号模型中节点类型与数组中常量数据的对应关系;节点类型包括加减乘除等运算符,常量数据为整数。

9、进一步地,全局内存、常量内存每个线程都可以访问,共享内存仅同一个块结构内的线程可以访问。

10、进一步地,设置网格结构为(gd.x,gd.y),其中每一个块结构为(bd.x,bd.y),某线程在该块结构中的位置为(tid.x,tid.y),该块在网格中的位置为(bid.x,bid.y),本专利技术为该线程分配的数据索引为:

11、id=(bid.y×gd.x+bid.x)×(bd.x×bd.y)+tid.y×bd.x+tid.x

12、其中,gd.x,gd.y为网格结构的x、y坐标位置,bd.x,bd.y为块结构的x、y坐标位置,tid.x,tid.y为线程在块结构中的x、y坐标位置,bid.x,bid.y为块结构在网格结构中的x、y坐标位置;

13、在共享内存区为每个线程分配模拟栈,设逆波兰式program长度为lmax,则模型栈的数组大小设为同时在本地内存区分配栈索引,在全局内存分配大小为的数组为第二次误差归并提供支持;n为实例数据中数据的数量。

14、进一步地,每个线程按照以下规则进行计算:

15、对于每条数据xi中的变量和常量值直接压栈,对于一元操作符直接对栈顶元素计算,二元操作符将栈顶两个元素作为输入计算并覆盖,栈底数据即为每条数据经过逆波兰式的输出,再计算该输出与对应实际输出yi的差值平方,即为均方根误差。

16、进一步地,在第一次误差归并时,每个块结构执行相同操作,根据块结构内线程索引和步长控制线程对误差求和,步长变化为最终每个块的第一个线程对应的模拟栈的栈底为块误差和;其中k满足

17、进一步地,在第二次误差归并,首先将每个块结构的误差和复制至已分配的全局内存,根据步长{2k,2k-1,…,1}逐步求和,最终总的误差值并存储于网格结构中第一个模拟栈的栈底。

18、一种计算设备,包括处理器、存储器以及存储在所述存储器中的计算机程序;处理器执行计算机程序时,实现所述基于numba的大规模实例符号模型误差计算方法。

19、一种计算机可读存储介质,所述介质中存储有计算机程序;计算机程序被处理器执行时,实现所述基于numba的大规模实例符号模型误差计算方法。

20、与现有技术相比,本专利技术具有以下技术特点:

21、1.本专利技术提供了基于numba库的符号模型表示方法,利用模拟栈的输出计算方法,为python环境下获取nvidia gpu的cuda资源提供了符号模型误差计算范式,可以被广泛用于各种领域的符号模型评估。

22、2.本专利技术构造了高并行粒度的大规模实例数据线程分配方式,两次误差归并使得误差计算全过程并行化,可用于其他异构符号模型误差计算中,从而提高算法的整体效率。

本文档来自技高网...

【技术保护点】

1.一种基于Numba的大规模实例符号模型误差计算方法,其特征在于,包括:

2.根据权利要求1所述的基于Numba的大规模实例符号模型误差计算方法,其特征在于,所述对应关系为符号模型中节点类型与数组中常量数据的对应关系;节点类型包括加减乘除等运算符,常量数据为整数。

3.根据权利要求1所述的基于Numba的大规模实例符号模型误差计算方法,其特征在于,全局内存、常量内存每个线程都可以访问,共享内存仅同一个块结构内的线程可以访问。

4.根据权利要求1所述的基于Numba的大规模实例符号模型误差计算方法,其特征在于,设置网格结构为(gD.x,gD.y),其中每一个块结构为(bD.x,bD.y),某线程在该块结构中的位置为(tId.x,tId.y),该块在网格中的位置为(bId.x,bId.y),本专利技术为该线程分配的数据索引为:

5.根据权利要求1所述的基于Numba的大规模实例符号模型误差计算方法,其特征在于,每个线程按照以下规则进行计算:

6.根据权利要求1所述的基于Numba的大规模实例符号模型误差计算方法,其特征在于,在第一次误差归并时,每个块结构执行相同操作,根据块结构内线程索引和步长控制线程对误差求和,步长变化为最终每个块的第一个线程对应的模拟栈的栈底为块误差和;其中k满足

7.根据权利要求1所述的基于Numba的大规模实例符号模型误差计算方法,其特征在于,在第二次误差归并,首先将每个块结构的误差和复制至已分配的全局内存,根据步长{2k,2k-1,…,1}逐步求和,最终总的误差值并存储于网格结构中第一个模拟栈的栈底。

8.一种计算设备,包括处理器、存储器以及存储在所述存储器中的计算机程序;其特征在于,处理器执行计算机程序时,实现根据权利要求1-7中任一项所述基于Numba的大规模实例符号模型误差计算方法。

9.一种计算机可读存储介质,所述介质中存储有计算机程序;其特征在于,计算机程序被处理器执行时,实现根据权利要求1-7中任一项所述基于Numba的大规模实例符号模型误差计算方法。

...

【技术特征摘要】

1.一种基于numba的大规模实例符号模型误差计算方法,其特征在于,包括:

2.根据权利要求1所述的基于numba的大规模实例符号模型误差计算方法,其特征在于,所述对应关系为符号模型中节点类型与数组中常量数据的对应关系;节点类型包括加减乘除等运算符,常量数据为整数。

3.根据权利要求1所述的基于numba的大规模实例符号模型误差计算方法,其特征在于,全局内存、常量内存每个线程都可以访问,共享内存仅同一个块结构内的线程可以访问。

4.根据权利要求1所述的基于numba的大规模实例符号模型误差计算方法,其特征在于,设置网格结构为(gd.x,gd.y),其中每一个块结构为(bd.x,bd.y),某线程在该块结构中的位置为(tid.x,tid.y),该块在网格中的位置为(bid.x,bid.y),本发明为该线程分配的数据索引为:

5.根据权利要求1所述的基于numba的大规模实例符号模型误差计算方法,其特征在于,每个线程按照以下规则进行计算:

<...

【专利技术属性】
技术研发人员:苏照兵鲁特刚张成熊涛吕亚泽吴永琪秦鹏飞林文琦
申请(专利权)人:西北机电工程研究所
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1