CN116841564B - 一种数据处理方法、装置、设备以及计算机可读存储介质 - Google Patents

一种数据处理方法、装置、设备以及计算机可读存储介质 Download PDF

Info

Publication number
CN116841564B
CN116841564B CN202311097765.7A CN202311097765A CN116841564B CN 116841564 B CN116841564 B CN 116841564B CN 202311097765 A CN202311097765 A CN 202311097765A CN 116841564 B CN116841564 B CN 116841564B
Authority
CN
China
Prior art keywords
loop
circulation
block
code
instruction
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202311097765.7A
Other languages
English (en)
Other versions
CN116841564A (zh
Inventor
徐心愿
蒋荣琳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202311097765.7A priority Critical patent/CN116841564B/zh
Publication of CN116841564A publication Critical patent/CN116841564A/zh
Application granted granted Critical
Publication of CN116841564B publication Critical patent/CN116841564B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/451Code distribution
    • G06F8/452Loops

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本申请公开了一种数据处理方法、装置、设备以及计算机可读存储介质,该方法包括:若软件循环代码满足循环优化条件,则对软件循环代码中的循环变量进行分析处理,得到循环次数;若循环次数具有收敛属性,则在软件循环代码中获取起始指令以及终止指令;起始指令是循环体的首条指令,终止指令是循环体的末条指令;对起始指令进行标记处理,得到起始标记,对终止指令进行标记处理,得到终止标记;根据循环次数、起始标记以及终止标记,生成硬件循环指令;硬件循环指令用于触发芯片执行软件循环代码所指示的循环逻辑。采用本申请,可以提高循环的执行效率。本申请实施例可应用于云技术、人工智能、智慧交通、辅助驾驶、音视频等各种场景。

Description

一种数据处理方法、装置、设备以及计算机可读存储介质
技术领域
本申请涉及互联网技术领域,尤其涉及一种数据处理方法、装置、设备以及计算机可读存储介质。
背景技术
循环是编程中最常见的语法之一,通常也是程序中的热点代码。尤其在计算密集型的业务场景中(例如大数据处理、音视频处理、人工智能领域),大量数据存取、数据计算代码在循环中重复执行,是业务程序中的核心代码,也是执行耗时最长的代码。
现有技术中,技术人员利用计算机程序设计语言(例如C/C++语言)编写的循环源码经过编译器编译后,可以生成软件循环代码(简称为软件循环),但软件循环代码无法触发硬件芯片中的硬件指令,进而无法进行硬件循环,故无法利用硬件芯片的硬件循环能力。明显地,现有技术中的软件循环执行效率低下。
发明内容
本申请实施例提供一种数据处理方法、装置、设备以及计算机可读存储介质,可以提高循环的执行效率。
本申请实施例一方面提供了一种数据处理方法,包括:
获取软件循环代码,若软件循环代码满足循环优化条件,则对软件循环代码中的循环变量进行分析处理,得到循环次数;
若循环次数具有收敛属性,则在软件循环代码中获取起始指令以及终止指令;起始指令是软件循环代码中的循环体的首条指令,终止指令是软件循环代码中的循环体的末条指令;
对起始指令进行标记处理,得到起始标记,对终止指令进行标记处理,得到终止标记;
根据循环次数、起始标记以及终止标记,生成硬件循环指令;硬件循环指令用于触发芯片执行软件循环代码所指示的循环逻辑。
本申请实施例一方面提供了一种数据处理装置,包括:
第一处理模块,用于获取软件循环代码,若软件循环代码满足循环优化条件,则对软件循环代码中的循环变量进行分析处理,得到循环次数;
第一获取模块,用于若循环次数具有收敛属性,则在软件循环代码中获取起始指令以及终止指令;起始指令是软件循环代码中的循环体的首条指令,终止指令是软件循环代码中的循环体的末条指令;
第二处理模块,用于对起始指令进行标记处理,得到起始标记,对终止指令进行标记处理,得到终止标记;
第一生成模块,用于根据循环次数、起始标记以及终止标记,生成硬件循环指令;硬件循环指令用于触发芯片执行软件循环代码所指示的循环逻辑。
其中,数据处理装置,还包括:
第二生成模块,用于生成软件循环代码对应的循环结构,在循环结构中,统计循环入口块、循环回跳块以及循环跳出块分别对应的数量;
第二获取模块,用于若循环入口块、循环回跳块以及循环跳出块分别对应的数量均小于数量阈值,则在软件循环代码中,获取与循环变量相关联的循环变量代码;
第一确定模块,用于对循环变量代码进行分析处理,得到代码分析结果,根据代码分析结果,确定软件循环代码以及循环优化条件之间的满足关系;
第二确定模块,用于若循环入口块、循环回跳块以及循环跳出块分别对应的数量中的至少一个数量等于或大于数量阈值,则确定软件循环代码不满足循环优化条件。
其中,第一确定模块,包括:
代码检查单元,用于对循环变量代码进行内存读取检查操作,得到第一检查结果,对循环变量代码进行异常退出检查操作,得到第二检查结果;
第一确定单元,用于将第一检查结果以及第二检测结果,确定为代码分析结果;
则第一确定模块,包括:
第二确定单元,用于若第一检查结果指示循环变量代码存在内存读取操作,则确定软件循环代码不满足循环优化条件;
第三确定单元,用于若第二检查结果指示循环变量代码存在异常退出操作,则确定软件循环代码不满足循环优化条件;
第四确定单元,用于若第一检查结果指示循环变量代码不存在内存读取操作,且第二检测结果指示循环变量代码不存在异常退出操作,则确定软件循环代码满足循环优化条件。
其中,第一处理模块,包括:
数值获取单元,用于在软件循环代码中,获取循环变量的循环初始值、循环变量的循环终止值,以及循环变量对应的循环步长;
第五确定单元,用于确定循环终止值以及循环初始值之间的循环差值,确定循环差值以及循环步长之间的循环比值,将循环比值确定为循环次数。
其中,第一处理模块,还包括:
第一生成单元,用于获取软件循环代码对应的循环结构,对循环结构进行规范处理,得到规范循环结构;
则数值获取单元,具体用于在规范循环结构中,获取循环变量的循环初始值、循环变量的循环终止值,以及循环变量对应的循环步长。
其中,循环结构包括循环起始块、循环体块、循环跳出块、循环回跳块以及循环外块;
第一生成单元,包括:
第一处理子单元,用于在循环结构中,将循环起始块以及循环跳出块进行合并处理,得到循环合并块;
第一更新子单元,用于将从循环起始块指向至循环体块的第一连接线,更新为从循环合并块指向至循环体块;
第二更新子单元,用于将从循环体块指向至循环跳出块的第二连接线,更新为从循环体块指向至循环回跳块;
第三更新子单元,用于将从循环跳出块指向至循环回跳块的第三连接线进行删除处理,将从循环跳出块指向至循环外块的第四连接线,更新为从循环合并块指向至循环外块;
第四更新子单元,用于将从循环回跳块指向至循环起始块的第五连接线,更新为从循环回跳块指向至循环合并块;
第一确定子单元,用于将包括循环合并块、更新后的第一连接线、更新后的第二连接线、更新后的第四连接线以及更新后的第五连接线的循环结构,确定为规范循环结构;规范循环结构不包括第三连接线。
其中,第一生成单元,还包括:
第二处理子单元,用于在循环合并块中,对循环变量进行赋值处理,得到赋值后的循环变量;其中,若赋值处理属于首次赋值类型,则赋值后的循环变量为循环初始值;若赋值处理不属于首次赋值类型,则赋值后的循环变量为循环回跳块基于循环步长对循环变量进行更新后的循环变量新值;
第一跳转子单元,用于若赋值后的循环变量满足循环继续条件,则从循环合并块跳转至循环体块;
第二跳转子单元,用于若赋值后的循环变量不满足循环继续条件,则从循环合并块跳转至循环外块。
其中,第一生成单元,还包括:
数值对比子单元,用于将赋值后的循环变量以及循环终止值进行对比;
第二确定子单元,用于若赋值后的循环变量小于循环终止值,则确定赋值后的循环变量满足循环继续条件;
第三确定子单元,用于若赋值后的循环变量等于或大于循环终止值,则确定赋值后的循环变量不满足循环继续条件。
其中,第一处理模块,还包括:
第一处理单元,用于对规范循环结构进行优化处理,得到硬件循环结构;
第二处理单元,用于根据硬件循环结构,对软件循环代码中的冗余指令进行删除处理,得到优化软件循环代码;
则第一获取模块,具体用于在优化软件循环代码中获取起始指令以及终止指令。
其中,规范循环结构包括循环进入块、循环合并块、循环体块、循环回跳块以及循环外块;
第一处理单元,包括:
第三处理子单元,用于在规范循环结构中,将循环合并块中的循环跳出块进行删除处理,得到循环待合并块;
第四处理子单元,用于将循环体块以及循环待合并块进行合并处理,得到循环合并体块;
第五更新子单元,用于将从循环进入块指向至循环合并块的第六连接线,更新为从循环进入块指向至循环合并体块;
第六更新子单元,用于将从循环合并块指向至循环外块的第四连接线,更新为从循环合并体块指向至循环外块;
第七更新子单元,用于将从循环合并块指向至循环体块的第一连接线,更新为循环合并体块的自连接线;
第五处理子单元,用于将循环回跳块以及与循环回跳块相关联的连接线均进行删除处理;
第四确定子单元,用于将包括循环合并体块、更新后的第六连接线、更新后的第四连接线以及更新后的第一连接线的规范循环结构,确定为硬件循环结构;硬件循环结构不包括循环回跳块以及与循环回跳块相关联的连接线。
其中,第一生成模块,包括:
第二生成单元,用于根据循环次数、起始标记以及终止标记,生成待定位硬件循环指令;
第三处理单元,用于对待定位硬件循环结构中的起始标识进行重定位处理,得到起始地址,对待定位硬件循环结构中的终止标识进行重定位处理,得到终止地址;
第四处理单元,用于通过起始地址以及终止地址,对待定位硬件循环结构中的起始标识以及终止标识进行更新处理,得到硬件循环指令。
本申请一方面提供了一种计算机设备,包括:处理器、存储器、网络接口;
上述处理器与上述存储器、上述网络接口相连,其中,上述网络接口用于提供数据通信功能,上述存储器用于存储计算机程序,上述处理器用于调用上述计算机程序,以使得计算机设备执行本申请实施例中的方法。
本申请实施例一方面提供了一种计算机可读存储介质,上述计算机可读存储介质中存储有计算机程序,上述计算机程序适于由处理器加载并执行本申请实施例中的方法。
本申请实施例一方面提供了一种计算机程序产品,该计算机程序产品包括计算机程序,该计算机程序存储在计算机可读存储介质中;计算机设备的处理器从计算机可读存储介质读取该计算机程序,处理器执行该计算机程序,使得该计算机设备执行本申请实施例中的方法。
在本申请实施例中,若软件循环代码满足循环优化条件,则计算机设备可以对软件循环代码中的循环变量进行分析处理,得到循环次数;进一步,若循环次数具有收敛属性,则计算机设备可以在软件循环代码中获取起始指令以及终止指令;进一步,计算机设备可以对起始指令进行标记处理,得到起始标记,可以对终止指令进行标记处理,得到终止标记;进一步,根据循环次数、起始标记以及终止标记,计算机设备可以生成硬件循环指令;硬件循环指令用于触发芯片执行软件循环代码所指示的循环逻辑。上述可知,本申请提供一种将软件循环优化成硬件循环的编译优化方法,通过该方法,可以获取到硬件循环的三要素,即循环次数、循环起始以及循环终止,故可以生成硬件循环指令,通过硬件循环指令,可以提高循环的执行效率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种系统架构示意图;
图2是本申请实施例提供的一种数据处理方法的流程示意图一;
图3是本申请实施例提供的一种数据处理的场景示意图一;
图4是本申请实施例提供的一种数据处理方法的流程示意图二;
图5是本申请实施例提供的一种数据处理的场景示意图二;
图6是本申请实施例提供的一种数据处理的场景示意图三;
图7是本申请实施例提供的一种数据处理方法的流程示意图三;
图8是本申请实施例提供的一种硬件循环结构的示意图;
图9是本申请实施例提供的一种循环优化方法的模块示意图;
图10是本申请实施例提供的一种基于LLVM编译器所实现的循环优化模块示意图;
图11是本申请实施例提供的一种利用基本块标记替代循环起始点/终止点标记的示意图;
图12是本申请实施例提供的一种数据处理装置的结构示意图;
图13是本申请实施例提供的一种计算机设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为便于理解,首先对相关概念进行阐述。
人工智能(Artificial Intelligence,AI)是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。换句话说,人工智能是计算机科学的一个综合技术,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。人工智能也就是研究各种智能机器的设计原理与实现方法,使机器具有感知、推理与决策的功能。
人工智能技术是一门综合学科,涉及领域广泛,既有硬件层面的技术也有软件层面的技术。人工智能基础技术一般包括如传感器、专用人工智能芯片、云计算、分布式存储、大数据处理技术、操作/交互系统、机电一体化等技术。人工智能软件技术主要包括计算机视觉技术、语音处理技术、自然语言处理技术以及机器学习/深度学习、自动驾驶、智慧交通等几大方向。
机器学习(Machine Learning,ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。机器学习是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。机器学习和深度学习通常包括人工神经网络、置信网络、强化学习、迁移学习、归纳学习、式教学习等技术。
本申请实施例提供的方案可应用于云技术、人工智能、智慧交通、辅助驾驶、音视频等各种场景,例如所涉及到的人工智能的机器学习可以指,本申请中的硬件循环指令可以是用于执行模型任务的指令,该模型可以是通过机器学习得到。具体实施过程请参见以下实施例。
请参见图1,图1是本申请实施例提供的一种系统架构示意图。如图1所示,该系统可以包括业务服务器100以及终端设备集群。终端设备集群可以包括:终端设备200a、终端设备200b、终端设备200c、…、终端设备200n,可以理解的是,上述系统可以包括一个或者多个终端设备,本申请不对终端设备的数量进行限制。
其中,终端设备集群之间可以存在通信连接,例如终端设备200a与终端设备200b之间存在通信连接,终端设备200a与终端设备200c之间存在通信连接。同时,终端设备集群中的任一终端设备可以与业务服务器100存在通信连接,例如终端设备200a与业务服务器100之间存在通信连接,其中,上述通信连接不限定连接方式,可以通过有线通信方式进行直接或间接地连接,也可以通过无线通信方式进行直接或间接地连接,还可以通过其它方式,本申请在此不做限制。
应当理解,如图1所示的终端设备集群中的每个终端设备均可以安装有应用客户端,当该应用客户端运行于各终端设备中时,可以分别与上述图1所示的业务服务器100进行数据交互,即上述的通信连接。其中,该应用客户端可以为视频应用、便捷生活应用、支付应用、理财应用、游戏应用、购物应用、小说应用、浏览器等具有循环优化功能的应用客户端。其中,该应用客户端可以为独立的客户端,也可以为集成在某客户端(例如,视频客户端以及出行客户端等)中的嵌入式子客户端,在此不做限定。
以视频应用为例,业务服务器100可以为包括视频应用对应的后台服务器、数据处理服务器等多个服务器的集合,因此,每个终端设备均可以通过该视频应用对应的应用客户端,与业务服务器100进行数据传输,例如,每个终端设备均可以通过视频应用的应用客户端,将视频识别请求上传至业务服务器100;业务服务器100可以预先对软件循环代码进行编译优化处理,得到硬件循环指令,将视频识别请求所请求识别的视频作为硬件循环指令的输入数据,通过硬件循环指令,触发自身(即业务服务器100)的芯片执行软件循环代码所指示的循环逻辑,可以得到视频识别请求对应的业务结果,将业务结果返回给终端设备或上传至云端服务器。
可以理解的是,在本申请的具体实施方式中,涉及到用户信息(例如软件循环代码以及循环结构)等相关的数据,当本申请中的实施例运用到具体产品或技术中时,需要获得用户许可或者同意,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
为便于后续理解和说明,本申请实施例可以在图1所示的终端设备集群中选择一个终端设备示例,例如以终端设备200a示例描述。当获取到软件循环代码,并接收到针对软件循环代码的循环优化指令时,终端设备200a可以发送循环优化请求至业务服务器100。其中,软件循环代码是一个包含循环语句的代码,本申请实施例不对软件循环代码具体用于完成的任务进行限定,可以根据实际应用场景进行设定,包括但不限于大数据处理、音视频处理、人工智能领域。循环优化指令是指对软件循环代码进行优化的指令。
进一步,业务服务器100接收终端设备200a发送的循环优化请求,根据循环优化请求,业务服务器100可以获取软件循环代码。本申请实施例不对业务服务器100获取软件循环代码的方式进行限定,一种可行的获取方式是终端设备200a方式的循环优化请求中携带软件循环代码;另一种可行的获取方式是终端设备200a方式的循环优化请求中携带软件循环代码的代码标识,故业务服务器100可以根据代码标识从区块链中获取软件循环代码。
进一步,业务服务器100对软件循环代码中与循环变量相关联的循环变量代码进行解析(分析)处理,可以得到代码分析结果;若代码分析结果指示软件循环代码满足循环优化条件,则业务服务器100可以对软件循环代码中的循环变量进行分析处理,得到循环次数。其中,本申请实施例暂不对循环变量代码的解析过程以及循环变量的分析过程展开描述,请参见下文图2以及图4所分别对应的实施例中的描述。
进一步,若循环次数具有收敛属性,则业务服务器100可以在软件循环代码中获取起始指令以及终止指令;其中,起始指令是软件循环代码中的循环体的首条指令,终止指令是软件循环代码中的循环体的末条指令。业务服务器100对起始指令进行标记处理,可以得到起始标记,对终止指令进行标记处理,可以得到终止标记;进一步,根据循环次数、起始标记以及终止标记,业务服务器100可以生成硬件循环指令;硬件循环指令用于触发业务服务器100所包含的芯片执行软件循环代码所指示的循环逻辑。可以理解的是,硬件循环指令与软件循环代码分别对应的业务功能相同,但业务服务器100运行软件循环代码耗时长,而执行硬件循环指令可以利用硬件(即芯片)的能力,故可以提高循环的执行效率。
后续,业务服务器100可以得到响应于硬件循环指令的业务结果,将该业务结果发送至终端设备200a。终端设备200a接收到业务服务器100发送的业务结果后,可以在其对应的屏幕上显示该业务结果。
可选的,若终端设备200a本地包含有针对计算密集型业务而设计的硬件芯片,则业务服务器100可以将硬件循环指令发送至终端设备200a,故终端设备200a可以在本地通过自身的硬件芯片响应硬件循环指令,故可以生成业务结果。
可选的,若终端设备200a本地安装有用于实现软件循环优化为硬件循环的编译优化器,那么在获取到针对软件循环代码的循环优化指令时,终端设备200a可以在本地对软件循环代码进行循环优化处理,得到硬件循环指令。可以理解的是,终端设备200a生成硬件循环指令的过程,与业务服务器100生成硬件循环指令的过程相同,故此处不进行赘述。后续,终端设备200a可以将硬件循环指令发送至业务服务器100,故业务服务器100可以响应该硬件循环指令,生成业务结果,可以理解的是,后续的处理过程,与业务服务器100所处理的过程相同,故不进行赘述。
可选的,若终端设备200a的本地包含有针对计算密集型业务而设计的硬件芯片,且本地安装有用于实现软件循环优化为硬件循环的编译优化器,那么在获取到针对软件循环代码的循环优化指令时,终端设备200a可以在本地确定软件循环代码是否满足循环优化条件,在软件循环代码满足循环优化条件时,终端设备200a可以对软件循环代码中的循环变量进行分析处理,得到循环次数;可以理解的是,后续的处理过程,与业务服务器100所处理的过程相同,故不进行赘述。
本申请提供一种将软件循环优化成硬件循环的编译优化方法,通过该方法,可以获取到硬件循环的三要素,即循环次数、循环起始以及循环终止,故可以生成硬件循环指令,通过硬件循环指令,可以提高循环的执行效率。
需要说明的是,上述业务服务器100、终端设备200a、终端设备200b、终端设备200c...、终端设备200n均可以为区块链网络中的区块链节点,全文叙述的数据(例如软件循环代码以及硬件循环指令)可以进行存储,存储方式可以是区块链节点根据数据生成区块,并将区块添加至区块链中进行存储的方式。
区块链是一种分布式数据存储、点对点传输、共识机制以及加密算法等计算机技术的新型应用模式,主要用于对数据按时间顺序进行整理,并加密成账本,使其不可被篡改和伪造,同时可进行数据的验证、存储和更新。区块链本质上是一个去中心化的数据库,该数据库中的每个节点均存储一条相同的区块链,区块链网络可以将节点区分为核心节点、数据节点以及轻节点。核心节点、数据节点以及轻节点共同组成区块链节点。
其中核心节点负责区块链全网的共识,也就是说核心节点为区块链网络中的共识节点。对于区块链网络中的交易数据被写入账本的流程可以为,区块链网络中的数据节点或轻节点获取到交易数据,将交易数据在区块链网络中传递(也就是节点以接力棒的方式进行传递),直到共识节点收到该交易数据,共识节点再将该交易数据打包进区块,对该区块执行共识,待共识完成后将该交易数据写入账本。
此处以软件循环代码以及硬件循环指令示例交易数据,业务服务器100(区块链节点)在通过对交易数据的共识后,根据交易数据生成区块,将区块存储至区块链网络中;而对于交易数据(即软件循环代码以及硬件循环指令)的读取,则可以由区块链节点在区块链网络中,获取到包含该交易数据的区块,进一步,在区块中获取交易数据。
可以理解的是,本申请实施例提供的方法可以由计算机设备执行,计算机设备包括但不限于终端设备或业务服务器。其中,业务服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云数据库、云服务、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。终端设备包括但不限于手机、电脑、智能语音交互设备、智能家电、车载终端、飞行器等。其中,终端设备和业务服务器可以通过有线或无线方式进行直接或间接地连接,本申请实施例在此不做限制。
上述系统架构可以应用于大数据处理、音视频处理、人工智能领域等场景,这里将不对具体的业务场景进行一一列举。
进一步地,请参见图2,图2是本申请实施例提供的一种数据处理方法的流程示意图一。本申请实施例可应用于各种场景,包括但不限于云技术、人工智能、智慧交通、辅助驾驶、自动驾驶等。该数据处理方法可以由业务服务器(例如,上述图1所示的业务服务器100)执行,也可以由终端设备(例如,上述图1所示的终端设备200a)执行,还可以由业务服务器和终端设备交互执行。为便于理解,本申请实施例以该方法由终端设备执行为例进行说明。如图2所示,该数据处理方法至少可以包括以下步骤S101-步骤S104。
步骤S101,获取软件循环代码,若软件循环代码满足循环优化条件,则对软件循环代码中的循环变量进行分析处理,得到循环次数。
具体的,在软件循环代码中,获取循环变量的循环初始值、循环变量的循环终止值,以及循环变量对应的循环步长;确定循环终止值以及循环初始值之间的循环差值,确定循环差值以及循环步长之间的循环比值,将循环比值确定为循环次数。
本申请实施例不对软件循环代码的具体内容进行限定,可以根据实际应用场景进行设定,例如软件循环代码用于完成AI任务、用于完成大数据处理任务、用于完成音视频处理任务。
软件循环代码属于可以被编译得到的代码,是一种循环代码,例如通过C语言编写的包括循环语句的源代码经过编译,可以得到软件循环代码,其中,循环语句可以为for循环(一种循环语句)、do while循环(一种循环语句)或者while循环(一种循环语句)等。举个例子,循环源代码(也称作循环源码)可以包括如下:for(v=0;v<10;v++) {…},其中,{…}内的就是循环源码的循环体,循环体中可以包含若干个指令,该循环表达的意思就是循环变量v的循环初始值为0,每对循环体循环执行一次,循环变量v的值就加1,不断对循环体进行循环执行,直到循环变量v不小于10(即循环终止值),就停止循环。
请一并参见图3,图3是本申请实施例提供的一种数据处理的场景示意图一。如图3所示,终端设备获取软件循环代码30a,本申请实施例暂不对软件循环代码30a以及循环优化条件之间的满足关系的确定过程展开描述,请参见下文图4所对应的实施例中步骤S201-步骤S204的描述。
本申请实施例设定软件循环代码30a满足循环优化条件,故终端设备在软件循环代码30a中,获取循环变量的循环初始值、循环变量的循环终止值,以及循环变量对应的循环步长。
如图3所示,循环变量v的循环初始值(图3简称为初始值)等于0,循环变量v的循环终止值(图3简称为终止值)等于10,循环变量对应的循环步长(图3简称为步长)等于1。终端设备确定循环终止值以及循环初始值之间的循环差值,图3示例循环差值等于10;进一步,确定循环差值以及循环步长之间的循环比值,图3示例循环比值等于10,故终端设备可以确定循环次数等于10。上述过程,可以通过如下公式(1)表示:
(1)
其中,公式(1)中的表示循环次数,/>表示循环变量v的循环终止值,/>表示循环变量v的循环初始值,/>表示循环步长。
在本申请实施例中,收敛属性是指有限正整数属性。实际应用时,循环次数可能具有收敛属性,如图3所示,循环次数等于10,循环次数也可能不具有收敛属性,例如循环步长可能为0,此时,循环次数无限大。对于具有收敛属性的循环次数,终端设备执行步骤S102-步骤S104,对于不具有收敛属性的循环次数,终端设备保持软件循环代码,并退出软件循环代码的优化处理。
步骤S102,若循环次数具有收敛属性,则在软件循环代码中获取起始指令以及终止指令;起始指令是软件循环代码中的循环体的首条指令,终止指令是软件循环代码中的循环体的末条指令。
具体的,若循环次数具有收敛属性,那么终端设备在软件循环代码中获取循环体,如图3所示,其中,循环体30b是指软件循环代码30a中被重复执行的语句,在循环体30b中确定起始指令(也可以称为首条指令),以及终止指令(也可以称为末条指令),图3以aaaa1示例起始指令,以aaaa2示例终止指令。
其中,软件循环代码中的循环体与上文描述的循环源码中的循环体分别对应的含义以及作用是相同的,区别在于表达方式不同,循环源码中的循环体是通过计算机程序设计语言(例如C语言)所编写的,软件循环代码中的循环体是对循环源码中的循环体进行编译所得到的,即软件循环代码中的循环体的表达是不同于上述示例的C语言的另一种语言。
本申请实施例不限定指令架构,可针对多种具有硬件循环能力的硬件平台实施编译优化,故不限定软件循环代码的表达方式,进而不限定软件循环代码中的循环体的表达方式。
步骤S103,对起始指令进行标记处理,得到起始标记,对终止指令进行标记处理,得到终止标记。
具体的,请再参见图3,终端设备对起始指令aaaa1进行标记处理,得到起始标记,对终止指令aaaa2进行标记处理,得到终止标记。本申请所示例不对标记方式进行限定,可以根据实际应用场景中的编译器框架进行设定。
步骤S104,根据循环次数、起始标记以及终止标记,生成硬件循环指令;硬件循环指令用于触发芯片执行软件循环代码所指示的循环逻辑。
具体的,根据循环次数、起始标记以及终止标记,生成待定位硬件循环指令;对待定位硬件循环结构中的起始标识进行重定位处理,得到起始地址,对待定位硬件循环结构中的终止标识进行重定位处理,得到终止地址;通过起始地址以及终止地址,对待定位硬件循环结构中的起始标识以及终止标识进行更新处理,得到硬件循环指令。
通过上述步骤S101-步骤S103,终端设备可以收集到生成硬件循环指令的三要素,即循环次数、循环起始以及循环终止。请再参见图3,终端设备生成包括循环次数、起始标记以及终止标记的待定位硬件循环指令30c,待定位硬件循环指令30c可以表示为如下:
其中,式中的表示循环,/>表示起始标记,/>表示终止标记,/>表示循环次数。
硬件循环指令需要收集三个必备的循环信息并放入寄存器中,三个必备信息如下:1、循环起始点;2、循环终止点;3、循环次数。循环起始点与循环终止点一般由指令地址(Program Counter ,简称PC)来表示,故如图3所示,终端设备对待定位硬件循环指令30c中的起始标记以及终止标记分别进行重定位处理,得到起始标记的起始地址以及终止标记的终止地址,进而可以生成包括循环次数、起始地址以及终止地址的硬件循环指令30d,硬件循环指令30d可以表示为如下:
上述表示是一种通用表达,旨在展示硬件循环需要的各类循环信息,实际硬件循环指令可以存在多种变体,其中,LOOP代表硬件中的硬件循环指令,START_PC为循环起始地址,END_PC为循环终止地址,START_PC与END_PC之间为循环体,LOOP_COUNT为循环体重复执行的次数。
对软件循环代码进行优化处理,得到硬件循环指令的过程,与触发芯片执行硬件循环指令的过程处于两个不同的阶段,故终端设备可以包含有特定芯片,特定芯片是指可以运行硬件循环指令的芯片。此时,终端设备可以执行硬件循环指令,得到执行结果(即上文的业务结果);可选的,终端设备可以不包含芯片,此时,终端设备可以将硬件循环指令发送至包含有上述特定芯片的业务服务器,故业务服务器可以执行硬件循环指令,得到执行结果。可以理解的是,在芯片执行软件循环代码所得到的执行结果,与在芯片执行硬件循环指令所得到的执行结果是相同的,区别在于后者可以提高循环的执行效率。
在本申请实施例中,若软件循环代码满足循环优化条件,则计算机设备可以对软件循环代码中的循环变量进行分析处理,得到循环次数;进一步,若循环次数具有收敛属性,则计算机设备可以在软件循环代码中获取起始指令以及终止指令;进一步,计算机设备可以对起始指令进行标记处理,得到起始标记,可以对终止指令进行标记处理,得到终止标记;进一步,根据循环次数、起始标记以及终止标记,计算机设备可以生成硬件循环指令;硬件循环指令用于触发芯片执行软件循环代码所指示的循环逻辑。上述可知,本申请提供一种将软件循环优化成硬件循环的编译优化方法,通过该方法,可以获取到硬件循环的三要素,即循环次数、循环起始以及循环终止,故可以生成硬件循环指令,通过硬件循环指令,可以提高循环的执行效率。
请参见图4,图4是本申请实施例提供的一种数据处理方法的流程示意图二。该方法可以由业务服务器(例如,上述图1所示的业务服务器100)执行,也可以由终端设备(例如,上述图1所示的终端设备200a)执行,还可以由业务服务器和终端设备交互执行。为便于理解,本申请实施例以该方法由终端设备执行为例进行说明。如图4所示,该方法至少可以包括以下步骤S201-步骤S208。
步骤S201,获取软件循环代码,生成软件循环代码对应的循环结构,在循环结构中,统计循环入口块、循环回跳块以及循环跳出块分别对应的数量。
具体的,请一并参见图5,图5是本申请实施例提供的一种数据处理的场景示意图二。如图5所示,终端设备生成软件循环代码50a对应的循环结构50b。循环结构50b中的每一个方框均是一个基本块(Basic Block,简称BB),例如图5中的循环进入块(Entering)1、循环起始块(Header)、循环回跳块1(Latch)、循环跳出块(Exiting)1以及循环外块(Exit)1等。连接线代表基本块中包含跳转指令,可跳转到指向的基本块,例如图5所示例的连接线502b,表示循环体块(Body)可跳转至循环跳出块2。
其中,Entering是循环(例如图5中的虚线区域501b)的入口,本身不参与循环,不重复执行,但是有一个连接线指向循环,可以跳转进入循环。Header是循环中的一种基本块,包含循环的起始点。
Latch是循环中的一种基本块,其特征是内部包含跳转到Header的跳转指令,即图5中的连接线503b,这种跳转指令称为回跳指令(backage instruction)。
Exiting是循环中的基本块,特征是含有一条跳出循环的指令(exitinstruction)。
Body表示循环体,其由一个或多个基本块组成。Header、Latch、Exiting是循环中特殊的基本块,与Body一起组成一个循环。
Exit是循环外的基本块,是Exiting中的跳出指令的跳转对象。一般,程序由Entering进入循环,由Header开始执行循环,经由Body执行到Exiting,若循环需重复执行,则跳转至Latch,回跳至Header继续执行,否则跳转至Exit退出循环。
请再参见图5,终端设备在循环结构50b中,统计循环入口块、循环回跳块以及循环跳出块分别对应的数量。
步骤S202,若循环入口块、循环回跳块以及循环跳出块分别对应的数量中的至少一个数量等于或大于数量阈值,则确定软件循环代码不满足循环优化条件。
具体的,可以理解的是,软件循环代码包括循环体以及循环条件,故软件循环代码对应的循环结构包括至少一个循环进入块、至少一个循环回跳块,以及至少一个循环跳出块,即循环入口块、循环回跳块以及循环跳出块分别对应的数量均等于或大于1。
终端设备获取到软件循环代码后,将判断软件循环代码是否满足循环优化条件,循环优化条件包括如下:1、循环只存在一个入口,软件循环程序(即软件循环代码)中仅有一种进入循环的条件,满足条件即进入循环,不存在另一种执行循环体的方式;2、循环仅有一个出口,循环执行过程中,满足条件可以退出循环,不存在其他退出循环的可能性;3、循环重复执行的次数是可以被计算出的固定值,即具有收敛属性,不随该循环执行状态而变化,不随内存状态而变化。
只有满足循环优化条件的软件循环才能生成硬件循环,不满足条件的软件循环保持软件循环。故终端设备将检查循环结构,上述条件1以及条件2在循环(Loop)结构上的表现为:1、 Loop有且仅有一个Entering(此时,entering也被称为preheader);2、Loop有且仅有一个Exiting;3、Loop有且仅有一个Latch。故本申请实施例的数量阈值为2。
如图5所示例,循环入口块、循环回跳块以及循环跳出块分别对应的数量均为2,此时,终端设备可以确定软件循环代码50a不满足循环优化条件。
步骤S203,若循环入口块、循环回跳块以及循环跳出块分别对应的数量均小于数量阈值,则在软件循环代码中,获取与循环变量相关联的循环变量代码。
具体的,请一并参见图6,图6是本申请实施例提供的一种数据处理的场景示意图三。如图6所示,终端设备可以生成软件循环代码50c的循环结构50d,其中,循环结构50d中每个基本块的作用,请参见上文图5中的对应的基本块的描述,此处不进行赘述。
进一步,终端设备统计图6所示例的循环结构50d中的循环入口块、循环回跳块以及循环跳出块分别对应的数量;明显地,循环入口块、循环回跳块以及循环跳出块分别对应的数量均为1,即均小于数量阈值2,故终端设备在软件循环代码50c中,获取与循环变量相关联的循环变量代码。
步骤S204,对循环变量代码进行分析处理,得到代码分析结果,根据代码分析结果,确定软件循环代码以及循环优化条件之间的满足关系。
具体的,对循环变量代码进行内存读取检查操作,得到第一检查结果,对循环变量代码进行异常退出检查操作,得到第二检查结果;将第一检查结果以及第二检测结果,确定为代码分析结果。若第一检查结果指示循环变量代码存在内存读取操作,则确定软件循环代码不满足循环优化条件;若第二检查结果指示循环变量代码存在异常退出操作,则确定软件循环代码不满足循环优化条件;若第一检查结果指示循环变量代码不存在内存读取操作,且第二检测结果指示循环变量代码不存在异常退出操作,则确定软件循环代码满足循环优化条件。
本申请实施例不对软件循环代码的具体内容进行限定,则不对软件循环代码中与循环变量相关的语句(即循环变量代码)进行限定,从而不对循环变量代码的分析方式进行限定,可以根据实际应用场景中的循环变量代码的内容进行设定。
本申请实施例提出两种分析方法,第一是对循环变量代码进行内存读取检查操作,得到第一检查结果;第二是对循环变量代码进行异常退出检查操作,得到第二检查结果。若第一检查结果为循环变量代码存在内存读取操作,则终端设备可以确定软件循环代码不满足循环优化条件;若第二检查结果指示循环变量代码存在异常退出操作,则终端设备确定软件循环代码不满足循环优化条件;若第一检查结果指示循环变量代码不存在内存读取操作,且第二检测结果指示循环变量代码不存在异常退出操作,则终端设备可以确定软件循环代码满足循环优化条件。
步骤S205,若软件循环代码满足循环优化条件,则对软件循环代码中的循环变量进行分析处理,得到循环次数。
步骤S206,若循环次数具有收敛属性,则在软件循环代码中获取起始指令以及终止指令;起始指令是软件循环代码中的循环体的首条指令,终止指令是软件循环代码中的循环体的末条指令。
步骤S207,对起始指令进行标记处理,得到起始标记,对终止指令进行标记处理,得到终止标记。
步骤S208,根据循环次数、起始标记以及终止标记,生成硬件循环指令;硬件循环指令用于触发芯片执行软件循环代码所指示的循环逻辑。
其中,步骤S205-步骤S208的具体实现过程,请参见上文图2所对应的实施例中的步骤S102-步骤S104,此处不进行赘述。
可以理解的是,软件循环(即软件循环代码)无法利用硬件芯片的循环能力。本申请实施例提供了一种将软件循环优化成硬件循环的优化方法,在编译器中插入循环优化装置,利用本优化方法即可将软件循环优化成硬件循环。本方法通用性强,不限定针对某一硬件芯片。不同硬件的硬循环指令略有不同,但使用本优化方法依然可以获得硬件循环需要的所有信息,并将软件循环转换成硬件循环。
在本申请实施例中,若软件循环代码满足循环优化条件,则计算机设备可以对软件循环代码中的循环变量进行分析处理,得到循环次数;进一步,若循环次数具有收敛属性,则计算机设备可以在软件循环代码中获取起始指令以及终止指令;进一步,计算机设备可以对起始指令进行标记处理,得到起始标记,可以对终止指令进行标记处理,得到终止标记;进一步,根据循环次数、起始标记以及终止标记,计算机设备可以生成硬件循环指令;硬件循环指令用于触发芯片执行软件循环代码所指示的循环逻辑。上述可知,本申请提供一种将软件循环优化成硬件循环的编译优化方法,通过该方法,可以获取到硬件循环的三要素,即循环次数、循环起始以及循环终止,故可以生成硬件循环指令,通过硬件循环指令,可以提高循环的执行效率。
进一步地,请参见图7,图7是本申请实施例提供的一种数据处理方法的流程示意图三。该数据处理方法可以由业务服务器(例如,上述图1所示的业务服务器100)执行,也可以由终端设备(例如,上述图1所示的终端设备200a)执行,还可以由业务服务器和终端设备交互执行。为便于理解,本申请实施例以该方法由业务服务器执行为例进行说明。如图7所示,该数据处理方法至少可以包括以下步骤S301-步骤S306。
步骤S301,获取软件循环代码,若软件循环代码满足循环优化条件,则获取软件循环代码对应的循环结构,对循环结构进行规范处理,得到规范循环结构,对规范循环结构中的循环变量进行分析处理,得到循环次数。
具体的,循环结构包括循环起始块、循环体块、循环跳出块、循环回跳块以及循环外块;在循环结构中,将循环起始块以及循环跳出块进行合并处理,得到循环合并块;将从循环起始块指向至循环体块的第一连接线,更新为从循环合并块指向至循环体块;将从循环体块指向至循环跳出块的第二连接线,更新为从循环体块指向至循环回跳块;将从循环跳出块指向至循环回跳块的第三连接线进行删除处理,将从循环跳出块指向至循环外块的第四连接线,更新为从循环合并块指向至循环外块;将从循环回跳块指向至循环起始块的第五连接线,更新为从循环回跳块指向至循环合并块;将包括循环合并块、更新后的第一连接线、更新后的第二连接线、更新后的第四连接线以及更新后的第五连接线的循环结构,确定为规范循环结构;规范循环结构不包括第三连接线。
步骤S301还包括:在循环合并块中,对循环变量进行赋值处理,得到赋值后的循环变量;其中,若赋值处理属于首次赋值类型,则赋值后的循环变量为循环初始值;若赋值处理不属于首次赋值类型,则赋值后的循环变量为循环回跳块基于循环步长对循环变量进行更新后的循环变量新值;若赋值后的循环变量满足循环继续条件,则从循环合并块跳转至循环体块;若赋值后的循环变量不满足循环继续条件,则从循环合并块跳转至循环外块。
步骤S301还包括:将赋值后的循环变量以及循环终止值进行对比;若赋值后的循环变量小于循环终止值,则确定赋值后的循环变量满足循环继续条件;若赋值后的循环变量等于或大于循环终止值,则确定赋值后的循环变量不满足循环继续条件。在规范循环结构中,获取循环变量的循环初始值、循环变量的循环终止值,以及循环变量对应的循环步长;确定循环终止值以及循环初始值之间的循环差值,确定循环差值以及循环步长之间的循环比值,将循环比值确定为循环次数。
其中,软件循环代码以及循环优化条件之间的满足关系的确定,请参见上文图4所对应的实施例中步骤S201-S204的描述,此处不进行赘述。
计算机程序设计语言中,例如C/C++语言,软件循环可以有多种表达,如for循环、while循环、do-while循环,其循环结构也复杂多变,故需要对Loop结构进行规范化,即统一化。使用统一的,规范化的循环结构可以简化后续的优化。
请再参见图6,图6示例的循环结构50d包括循环进入块、循环起始块、循环体块、循环跳出块、循环回跳块以及循环外块,除了循环进入块以及循环外块之外,循环结构50d中的剩余基本块均属于循环,如图6中的虚线区域501d所示。
在循环结构50d中,循环进入块以及循环起始块之间存在连接线502d,连接线502d用于表明从循环进入块跳转进入循环,具体为跳转进入循环的循环起始块;循环起始块以及循环体块之间存在连接线503d,即上文表述的第一连接线;循环体块以及循环跳出块之间存在连接线504d,即上文表述的第二连接线;循环跳出块以及循环回跳块之间存在连接线505d,即上文表述的第三连接线;循环回跳块以及循环起始块之间存在连接线506d,即上文表述的第五连接线;循环跳出块以及循环外块之间存在连接线507d,即上文表述的第四连接线。
请再参见图6,业务服务器将循环结构50d转化为规范循环结构50e,其中,循环结构50d以及规范循环结构50e均为软件循环结构。对循环结构50d进行规范处理,得到规范循环结构50e的具体过程可以包括:在循环结构50d中,将循环起始块以及循环跳出块进行合并处理,得到循环合并块,如图6中的基本块502e;业务服务器将循环结构50d中的从循环起始块指向至循环体块的第一连接线,更新为从循环合并块指向至循环体块,即将循环结构50d中的503d更新为规范循环结构50e中的连接线503e;将循环结构50d中的从循环体块指向至循环跳出块的第二连接线,更新为从循环体块指向至循环回跳块,即业务服务器将循环结构50d中的连接线504d更新为规范循环结构50e中的504e;业务服务器将循环结构50d中的从循环跳出块指向至循环回跳块的第三连接线进行删除处理,即将循环结构50d中的连接线505d进行删减处理;将循环结构50d中的从循环跳出块指向至循环外块的第四连接线,更新为从循环合并块指向至循环外块,即业务服务器将循环结构50d中的连接线507d更新为规范循环结构50e中的连接线505e;将循环结构50d中的从循环回跳块指向至循环起始块的第五连接线,更新为从循环回跳块指向至循环合并块,即将循环结构50d中的连接线506d更新为规范循环结构50e中的连接线506e;经过上述操作后,业务服务器可以将包括循环合并块、更新后的第一连接线(即连接线503e)、更新后的第二连接线(即连接线504e)、更新后的第四连接线(即连接线505e)以及更新后的第五连接线(即连接线506e)的循环结构,确定为规范循环结构50e。
其中,规范循环结构50e中的循环合并块可以包括如下代码1:
Header/exiting:
loop_v赋值,是否初次循环,是:loop_v = init_v,否:loop_v = new_v
判断是否继续循环,loop_v<end_v:是,loop_v≥end_v:否
规范循环结构50e中的循环回跳块可以包括如下代码2:
latch:
new_v= loop_v+step
回跳至header
请结合代码1以及代码2,在规范循环结构50e中,由循环进入块(此时,Entering也可以称作Preheader)进入循环,即图6中的虚线区域501e,由Header开始循环,在Header中对循环变量v进行赋值,如果是初次循环,此时赋值处理为首次赋值处理,则赋值处理属于首次赋值类型,循环变量v等于循环初始值(init_v);如果不是初次循环,此时赋值处理为非首次赋值处理,则赋值处理不属于首次赋值类型,循环变量等于循环新值(new_v)。
进一步,业务服务器判断循环变量值是否满足循环继续条件,循环继续条件可以根据实际应用场景进行设定,本申请实施例示例递增的循环(指循环变量值在循环中单调递增)。进一步,业务服务器判断赋值后的循环变量是否小于循环终止值,若循环变量小于循环终止值,则跳转至循环体块继续执行;若循环变量等于或大于循环终止值,则跳转至循环外块退出循环。
Body执行完循环体后,跳转至循环回跳块,循环回跳块对循环变量进行更新处理,例如将循环变量加上循环步长(step),得到循环变量新值,随后回跳至循环起始块。
步骤S302,若循环次数具有收敛属性,则对规范循环结构进行优化处理,得到硬件循环结构。
具体的,规范循环结构包括循环进入块、循环合并块、循环体块、循环回跳块以及循环外块;在规范循环结构中,将循环合并块中的循环跳出块进行删除处理,得到循环待合并块;将循环体块以及循环待合并块进行合并处理,得到循环合并体块;将从循环进入块指向至循环合并块的第六连接线,更新为从循环进入块指向至循环合并体块;将从循环合并块指向至循环外块的第四连接线,更新为从循环合并体块指向至循环外块;将从循环合并块指向至循环体块的第一连接线,更新为循环合并体块的自连接线;将循环回跳块以及与循环回跳块相关联的连接线均进行删除处理;将包括循环合并体块、更新后的第六连接线、更新后的第四连接线以及更新后的第一连接线的规范循环结构,确定为硬件循环结构;硬件循环结构不包括循环回跳块以及与循环回跳块相关联的连接线。
可以理解的是,如果没有经过特殊优化,程序员利用C/C++语言编写的循环经过编译器编译后,只能生成软件循环,无法利用硬件循环的能力,故需要对软件循环进行转化,得到硬件循环。为了提高转化效率,即优化效率,本申请实施例提出对软件循环的循环结构进行规范化处理,故可以得到规范循环结构,该过程请参见上文步骤S301的描述,在本步骤中,进一步对规范循环结构进行优化处理,请一并参见图6以及图8,图8是本申请实施例提供的一种硬件循环结构的示意图。业务服务器在规范循环结构50e中,将循环合并块中的循环跳出块进行删除处理,得到循环待合并块;将循环体块以及循环待合并块进行合并处理,得到图8中的循环合并体块501f。
进一步,业务服务器将规范循环结构50e中的从循环进入块指向至循环合并块的第六连接线,更新为从循环进入块指向至循环合并体块,即将规范循环结构50e中的连接线507e更新为图8中的连接线502f。业务服务器将规范循环结构50e中的从循环合并块指向至循环外块的第四连接线,更新为从循环合并体块指向至循环外块,即将规范循环结构50e中的连接线505e更新为图8中的连接线503f。业务服务器将从循环合并块指向至循环体块的第一连接线,更新为循环合并体块的自连接线,即将规范循环结构50e中的连接线503e更新为图8中的连接线504f。将循环回跳块以及与循环回跳块相关联的连接线均进行删除处理,例如将规范循环结构中的连接线504e以及连接线506e均删除;经过上述操作,业务服务器可以得到图8所示例的硬件循环结构50f。
步骤S303,根据硬件循环结构,对软件循环代码中的冗余指令进行删除处理,得到优化软件循环代码。
具体的,在硬件循环中,Header、Body组成循环体,软件循环代码经过Preheader进入循环后,循环的重复执行、退出等均由硬件控制,循环中不再需要Latch、Exiting等基本块,故而软件循环中的循环参数赋值、计算指令,判断指令,跳转指令等均成为冗余指令。在本步骤消除冗余指令,可进一步提高循环的执行效率。
其中,硬件循环中的循环体的功能与循环源码中的循环体的功能以及软件循环代码中的循环体的功能相同,区别也是表达方式不同。
步骤S304,在优化软件循环代码中获取起始指令以及终止指令;起始指令是软件循环代码中的循环体的首条指令,终止指令是软件循环代码中的循环体的末条指令。
具体的,上文图2以及图4分别对应的实施例中,执行主体是在软件循环代码中获取起始指令以及终止指令,本申请实施例通过步骤S303,可以到优化软件循环代码,即消除冗余指令之后的软件循环代码,故通过本步骤,可以提高循环指令(包括起始指令以及终止指令)的获取效率。
步骤S305,对起始指令进行标记处理,得到起始标记,对终止指令进行标记处理,得到终止标记。
步骤S306,根据循环次数、起始标记以及终止标记,生成硬件循环指令;硬件循环指令用于触发芯片执行软件循环代码所指示的循环逻辑。
其中,步骤S305-步骤S306的具体实现过程,请参见上文图2所对应的实施例中的步骤S103-步骤S104,此处不进行赘述。
结合图2、图4以及图7,请一并参见图9,图9是本申请实施例提供的一种循环优化方法的模块示意图。如图9所示,该循环优化方法由六个模块组成。软件循环代码输入该循环优化方法后,首先进入循环分析模块,在循环分析模块中,只有满足循环优化条件的软件循环才可以进行优化,不可优化的软件循环结束循环优化。可优化的软件循环输入至循环规范模块,循环规范模块输出规范循环结构至循环次数计算模块。循环次数计算模块确定循环变量是否可以计算,循环次数不可计算的循环结束循环优化,循环次数可计算的循环继续进行优化。经过冗余指令消除模块,可以得到硬件循环结构;循环起始点与终止点标记模块可以标记起始指令以及终止指令;硬件循环指令生成模块可以生成待定位硬件循环指令;重定位模块可以生成最终的硬件循环,即硬件循环指令。
其中,循环起始点与终止点标记模块在精简指令集计算机(Reduced InstructionSet Computer,简称RISC)架构、复杂指令系统计算机(Complex Instruction SetComputer,简称CISC)架构中,是找到循环体的起始指令以及终止指令,在超长指令字(VeryLong Instruction Word,简称VLIW)架构中,是找到起始指令包(也可以称作首条指令包),以及终止指令包(也可以称作末条指令包),在本申请实施例中,统称为起始指令以及终止指令。
本申请实施例公开了一种将软件循环优化成硬件循环的通用编译优化方法,在编译器中插入优化模块,使用该循环优化方法,可以分析并收集硬件循环需要的循环信息(即循环次数、循环起始点以及循环终止点),将软件循环优化成硬件循环,利用硬件循环指令最大限度提升循环的执行效率。此外,本优化方法通用性强,不限制指令架构(CISC、RISC、VLIW等),可针对多种具有硬件循环能力的硬件平台实施编译优化。
采用本申请,软件循环可以被优化成硬件循环,生成的硬件循环指令可以触发硬件芯片上的硬件循环能力,从而提升循环的执行效率。常用来运行云技术、人工智能、智慧交通、辅助驾驶、音视频处理等业务的硬件芯片,大多具有硬件循环能力。硬件循环可以提高循环效率的因素主要有两个:
1、硬件循环指令将循环体的代码范围(即循环起始、终止地址之间的代码)给与硬件,则硬件可以一次性加载循环体,无需在循环重复执行过程中进行代码加载、换页等耗时操作。硬件循环将循环次数给与硬件,则循环的重复执行由硬件直接控制,硬件无需在一次循环结束到下一次循环开始之间进行分支预测等耗时操作,即硬件循环可以提高硬件在循环执行时的分支命中率与指令命中率,从而可以提高循环执行的效率。
2、硬件循环的重复执行与退出均由硬件控制,故而软件循环中用来控制循环的循环参数赋值、计算指令,判断指令,回跳指令等(如代码1、代码2中展示的指令)均成为冗余指令,可以删除。明显地,硬件循环中的循环体的指令数减少,故循环执行效率变高。
一个具体的应用如下:将本申请的实施例用于文字识别(OpticalCharacterRecognition ,简称OCR)网络模型代码的优化,实施本优化后,网络模型实际运行时间减少1%。
本申请应用的一个具体实施例如下:
本实施例在 LLVM编译器框架中实现,请一并参见图10,图10是本申请实施例提供的一种基于LLVM编译器所实现的循环优化模块示意图。如图 10所示,循环优化的系列步骤在LLVM的中端(Intermediate Representation (简称IR)阶段)、后端(MachineIntermediate Representation(简称MIR)阶段)、汇编器阶段分别实现。LLVM编译器接收到循环源码后,先对其进行编译,得到第一中间表达,例如循环源码是由C语言编写的,第一中间表达是不同于C语言的程序。
循环分析模块在LLVM中端实现,LLVM将所有循环用第一中间表达对应的语言进行表达,并已有内部数据结构(例如LoopInfo)等用于表达循环结构。在中端插入循环分析模块即可对循环进行分析,过滤不可优化的循环。
循环规范模块可以复用LLVM中端已经实现的循环化简模块(Loop SimplifyPass)、循环规范化模块(Loop Canonical Pass)以及循环折叠(Loop Rotate Pass)模块的能力,调用上述优化模块即可实现循环规范化。
循环次数计算模块,在中端创建模块分析循环变量的变化情况,进而分析循环次数的可计算性并计算循环次数。进一步,IR阶段对第一中间表达进行编译,得到第二中间表达,将第二中间表达输入MIR阶段。
冗余指令消除模块、循环起始点与终止点标记模块与硬件循环指令生成模块可以合并实现。在后端创建模块,首先删除冗余的MIR(即消除冗余指令),其次,找出循环起始点与终止点指令。请一并参见图11,图11是本申请实施例提供的一种利用基本块标记替代循环起始点/终止点标记的示意图。如图 11所示,为了配合LLVM的指令标记与重定位方法,指令的标记需要打在基本块上。首先利用Header基本块的标记替代循环起始点标记,其次将循环终止点单独分离到一个基本块中(例如图11中的终止基本块),利用终止基本块的标记替代循环终止点标记。最后,创建新指令(即创建一条新的MIR)表达硬循环指令即可。
请再参见图11,重定位模块可以直接借助LLVM汇编器中重定位模块实现。仅需在LLVM的重定位模块中加入上述两个标记(label)的信息,LLVM即可计算出label的PC值。
在本申请实施例中,若软件循环代码满足循环优化条件,则计算机设备可以对软件循环代码中的循环变量进行分析处理,得到循环次数;进一步,若循环次数具有收敛属性,则计算机设备可以在软件循环代码中获取起始指令以及终止指令;进一步,计算机设备可以对起始指令进行标记处理,得到起始标记,可以对终止指令进行标记处理,得到终止标记;进一步,根据循环次数、起始标记以及终止标记,计算机设备可以生成硬件循环指令;硬件循环指令用于触发芯片执行软件循环代码所指示的循环逻辑。上述可知,本申请提供一种将软件循环优化成硬件循环的编译优化方法,通过该方法,可以获取到硬件循环的三要素,即循环次数、循环起始以及循环终止,故可以生成硬件循环指令,通过硬件循环指令,可以提高循环的执行效率。
进一步地,请参见图12,图12是本申请实施例提供的一种数据处理装置的结构示意图。上述数据处理装置1可以是运行于计算机设备中的一个计算机程序(包括程序代码),例如该数据处理装置1为一个应用软件;数据处理装置1可以用于执行本申请实施例提供的方法中的相应步骤。如图12所示,该数据处理装置1可以包括:第一处理模块11、第一获取模块12、第二处理模块13以及第一生成模块14。
第一处理模块11,用于获取软件循环代码,若软件循环代码满足循环优化条件,则对软件循环代码中的循环变量进行分析处理,得到循环次数;
第一获取模块12,用于若循环次数具有收敛属性,则在软件循环代码中获取起始指令以及终止指令;起始指令是软件循环代码中的循环体的首条指令,终止指令是软件循环代码中的循环体的末条指令;
第二处理模块13,用于对起始指令进行标记处理,得到起始标记,对终止指令进行标记处理,得到终止标记;
第一生成模块14,用于根据循环次数、起始标记以及终止标记,生成硬件循环指令;硬件循环指令用于触发芯片执行软件循环代码所指示的循环逻辑。
其中,第一处理模块11、第一获取模块12、第二处理模块13以及第一生成模块14的具体功能实现方式,可以参见上述图2对应实施例中的步骤S101-步骤S104,这里不再进行赘述。
再请参见图12,数据处理装置1还可以包括:第二生成模块15、第二获取模块16、第一确定模块17以及第二确定模块18。
第二生成模块15,用于生成软件循环代码对应的循环结构,在循环结构中,统计循环入口块、循环回跳块以及循环跳出块分别对应的数量;
第二获取模块16,用于若循环入口块、循环回跳块以及循环跳出块分别对应的数量均小于数量阈值,则在软件循环代码中,获取与循环变量相关联的循环变量代码;
第一确定模块17,用于对循环变量代码进行分析处理,得到代码分析结果,根据代码分析结果,确定软件循环代码以及循环优化条件之间的满足关系;
第二确定模块18,用于若循环入口块、循环回跳块以及循环跳出块分别对应的数量中的至少一个数量等于或大于数量阈值,则确定软件循环代码不满足循环优化条件。
其中,第二生成模块15、第二获取模块16、第一确定模块17以及第二确定模块18的具体功能实现方式,可以参见上述图4对应实施例中的步骤S201-步骤S204,这里不再进行赘述。
再请参见图12,第一确定模块17可以包括:代码检查单元171以及第一确定单元172。
代码检查单元171,用于对循环变量代码进行内存读取检查操作,得到第一检查结果,对循环变量代码进行异常退出检查操作,得到第二检查结果;
第一确定单元172,用于将第一检查结果以及第二检测结果,确定为代码分析结果;
则第一确定模块17可以包括:第二确定单元173、第三确定单元174以及第四确定单元175。
第二确定单元173,用于若第一检查结果指示循环变量代码存在内存读取操作,则确定软件循环代码不满足循环优化条件;
第三确定单元174,用于若第二检查结果指示循环变量代码存在异常退出操作,则确定软件循环代码不满足循环优化条件;
第四确定单元175,用于若第一检查结果指示循环变量代码不存在内存读取操作,且第二检测结果指示循环变量代码不存在异常退出操作,则确定软件循环代码满足循环优化条件。
其中,代码检查单元171、第一确定单元172、第二确定单元173、第三确定单元174以及第四确定单元175的具体功能实现方式,可以参见上述图4对应实施例中的步骤S203,这里不再进行赘述。
再请参见图12,第一处理模块11可以包括:数值获取单元111以及第五确定单元112。
数值获取单元111,用于在软件循环代码中,获取循环变量的循环初始值、循环变量的循环终止值,以及循环变量对应的循环步长;
第五确定单元112,用于确定循环终止值以及循环初始值之间的循环差值,确定循环差值以及循环步长之间的循环比值,将循环比值确定为循环次数。
其中,数值获取单元111以及第五确定单元112的具体功能实现方式,可以参见上述图2对应实施例中的步骤S101,这里不再进行赘述。
再请参见图12,第一处理模块11还可以包括:第一生成单元113。
第一生成单元113,用于获取软件循环代码对应的循环结构,对循环结构进行规范处理,得到规范循环结构;
则数值获取单元111,具体用于在规范循环结构中,获取循环变量的循环初始值、循环变量的循环终止值,以及循环变量对应的循环步长。
其中,第一生成单元113以及数值获取单元111的具体功能实现方式,可以参见上述图7对应实施例中的步骤S301,这里不再进行赘述。
再请参见图12,循环结构包括循环起始块、循环体块、循环跳出块、循环回跳块以及循环外块;
第一生成单元113可以包括:第一处理子单元1131、第一更新子单元1132、第二更新子单元1133、第三更新子单元1134、第四更新子单元1135以及第一确定子单元1136。
第一处理子单元1131,用于在循环结构中,将循环起始块以及循环跳出块进行合并处理,得到循环合并块;
第一更新子单元1132,用于将从循环起始块指向至循环体块的第一连接线,更新为从循环合并块指向至循环体块;
第二更新子单元1133,用于将从循环体块指向至循环跳出块的第二连接线,更新为从循环体块指向至循环回跳块;
第三更新子单元1134,用于将从循环跳出块指向至循环回跳块的第三连接线进行删除处理,将从循环跳出块指向至循环外块的第四连接线,更新为从循环合并块指向至循环外块;
第四更新子单元1135,用于将从循环回跳块指向至循环起始块的第五连接线,更新为从循环回跳块指向至循环合并块;
第一确定子单元1136,用于将包括循环合并块、更新后的第一连接线、更新后的第二连接线、更新后的第四连接线以及更新后的第五连接线的循环结构,确定为规范循环结构;规范循环结构不包括第三连接线。
其中,第一处理子单元1131、第一更新子单元1132、第二更新子单元1133、第三更新子单元1134、第四更新子单元1135以及第一确定子单元1136的具体功能实现方式,可以参见上述图7对应实施例中的步骤S301,这里不再进行赘述。
再请参见图12,第一生成单元113还可以包括:第二处理子单元1137、第一跳转子单元1138以及第二跳转子单元1139。
第二处理子单元1137,用于在循环合并块中,对循环变量进行赋值处理,得到赋值后的循环变量;其中,若赋值处理属于首次赋值类型,则赋值后的循环变量为循环初始值;若赋值处理不属于首次赋值类型,则赋值后的循环变量为循环回跳块基于循环步长对循环变量进行更新后的循环变量新值;
第一跳转子单元1138,用于若赋值后的循环变量满足循环继续条件,则从循环合并块跳转至循环体块;
第二跳转子单元1139,用于若赋值后的循环变量不满足循环继续条件,则从循环合并块跳转至循环外块。
其中,第二处理子单元1137、第一跳转子单元1138以及第二跳转子单元1139的具体功能实现方式,可以参见上述图7对应实施例中的步骤S301,这里不再进行赘述。
再请参见图12,第一生成单元113还可以包括:数值对比子单元2130、第二确定子单元2131以及第三确定子单元2132。
数值对比子单元2130,用于将赋值后的循环变量以及循环终止值进行对比;
第二确定子单元2131,用于若赋值后的循环变量小于循环终止值,则确定赋值后的循环变量满足循环继续条件;
第三确定子单元2132,用于若赋值后的循环变量等于或大于循环终止值,则确定赋值后的循环变量不满足循环继续条件。
其中,数值对比子单元2130、第二确定子单元2131以及第三确定子单元2132的具体功能实现方式,可以参见上述图7对应实施例中的步骤S301,这里不再进行赘述。
再请参见图12,第一处理模块11还可以包括:第一处理单元114以及第二处理单元115。
第一处理单元114,用于对规范循环结构进行优化处理,得到硬件循环结构;
第二处理单元115,用于根据硬件循环结构,对软件循环代码中的冗余指令进行删除处理,得到优化软件循环代码;
则第一获取模块12,具体用于在优化软件循环代码中获取起始指令以及终止指令。
其中,第一处理单元114、第二处理单元115以及第一获取模块12的具体功能实现方式,可以参见上述图7对应实施例中的步骤S302-步骤S304,这里不再进行赘述。
再请参见图12,规范循环结构包括循环进入块、循环合并块、循环体块、循环回跳块以及循环外块;
第一处理单元114可以包括:第三处理子单元1141、第四处理子单元1142、第五更新子单元1143、第六更新子单元1144、第七更新子单元1145、第五处理子单元1146以及第四确定子单元1147。
第三处理子单元1141,用于在规范循环结构中,将循环合并块中的循环跳出块进行删除处理,得到循环待合并块;
第四处理子单元1142,用于将循环体块以及循环待合并块进行合并处理,得到循环合并体块;
第五更新子单元1143,用于将从循环进入块指向至循环合并块的第六连接线,更新为从循环进入块指向至循环合并体块;
第六更新子单元1144,用于将从循环合并块指向至循环外块的第四连接线,更新为从循环合并体块指向至循环外块;
第七更新子单元1145,用于将从循环合并块指向至循环体块的第一连接线,更新为循环合并体块的自连接线;
第五处理子单元1146,用于将循环回跳块以及与循环回跳块相关联的连接线均进行删除处理;
第四确定子单元1147,用于将包括循环合并体块、更新后的第六连接线、更新后的第四连接线以及更新后的第一连接线的规范循环结构,确定为硬件循环结构;硬件循环结构不包括循环回跳块以及与循环回跳块相关联的连接线。
其中,第三处理子单元1141、第四处理子单元1142、第五更新子单元1143、第六更新子单元1144、第七更新子单元1145、第五处理子单元1146以及第四确定子单元1147的具体功能实现方式,可以参见上述图7对应实施例中的步骤S302,这里不再进行赘述。
再请参见图12,第一生成模块14可以包括:第二生成单元141、第三处理单元142以及第四处理单元143。
第二生成单元141,用于根据循环次数、起始标记以及终止标记,生成待定位硬件循环指令;
第三处理单元142,用于对待定位硬件循环结构中的起始标识进行重定位处理,得到起始地址,对待定位硬件循环结构中的终止标识进行重定位处理,得到终止地址;
第四处理单元143,用于通过起始地址以及终止地址,对待定位硬件循环结构中的起始标识以及终止标识进行更新处理,得到硬件循环指令。
其中,第二生成单元141、第三处理单元142以及第四处理单元143的具体功能实现方式,可以参见上述图2对应实施例中的步骤S104,这里不再进行赘述。
在本申请实施例中,若软件循环代码满足循环优化条件,则计算机设备可以对软件循环代码中的循环变量进行分析处理,得到循环次数;进一步,若循环次数具有收敛属性,则计算机设备可以在软件循环代码中获取起始指令以及终止指令;进一步,计算机设备可以对起始指令进行标记处理,得到起始标记,可以对终止指令进行标记处理,得到终止标记;进一步,根据循环次数、起始标记以及终止标记,计算机设备可以生成硬件循环指令;硬件循环指令用于触发芯片执行软件循环代码所指示的循环逻辑。上述可知,本申请提供一种将软件循环优化成硬件循环的编译优化方法,通过该方法,可以获取到硬件循环的三要素,即循环次数、循环起始以及循环终止,故可以生成硬件循环指令,通过硬件循环指令,可以提高循环的执行效率。
进一步地,请参见图13,图13是本申请实施例提供的一种计算机设备的结构示意图。如图13所示,该计算机设备1000可以包括:至少一个处理器1001,例如CPU,至少一个网络接口1004,用户接口1003,存储器1005,至少一个通信总线1002。
其中,通信总线1002用于实现这些组件之间的连接通信。其中,在一些实施例中,用户接口1003可以包括显示屏(Display)、键盘(Keyboard),网络接口1004可选地可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatilememory),例如至少一个磁盘存储器。存储器1005可选地还可以是至少一个位于远离前述处理器1001的存储装置。
如图13所示,作为一种计算机存储介质的存储器1005可以包括操作系统、网络通信模块、用户接口模块以及设备控制应用程序。
在图13所示的计算机设备1000中,网络接口1004可提供网络通讯功能;而用户接口1003主要用于为用户提供输入的接口;而处理器1001可以用于调用存储器1005中存储的设备控制应用程序,以实现:
获取软件循环代码,若软件循环代码满足循环优化条件,则对软件循环代码中的循环变量进行分析处理,得到循环次数;
若循环次数具有收敛属性,则在软件循环代码中获取起始指令以及终止指令;起始指令是软件循环代码中的循环体的首条指令,终止指令是软件循环代码中的循环体的末条指令;
对起始指令进行标记处理,得到起始标记,对终止指令进行标记处理,得到终止标记;
根据循环次数、起始标记以及终止标记,生成硬件循环指令;硬件循环指令用于触发芯片执行软件循环代码所指示的循环逻辑。
应当理解,本申请实施例中所描述的计算机设备1000可执行前文各实施例中对数据处理方法或装置的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行时实现前文各实施例中对数据处理方法或装置的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
上述计算机可读存储介质可以是前述任一实施例提供的数据处理装置或者上述计算机设备的内部存储单元,例如计算机设备的硬盘或内存。该计算机可读存储介质也可以是该计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(smartmediacard,SMC),安全数字(securedigital,SD)卡,闪存卡(flashcard)等。
进一步地,该计算机可读存储介质还可以既包括该计算机设备的内部存储单元也包括外部存储设备。该计算机可读存储介质用于存储该计算机程序以及该计算机设备所需的其他程序和数据。该计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。
本申请实施例还提供了一种计算机程序产品,该计算机程序产品包括计算机程序,该计算机程序存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机程序,处理器执行该计算机程序,使得该计算机设备可执行前文各实施例中对数据处理方法或装置的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
本申请实施例的说明书和权利要求书及附图中的术语“第一”、“第二”等是用于区别不同对象,而非用于描述特定顺序。此外,术语“包括”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、装置、产品或设备没有限定于已列出的步骤或模块,而是可选地还包括没有列出的步骤或模块,或可选地还包括对于这些过程、方法、装置、产品或设备固有的其他步骤单元。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖的范围。

Claims (13)

1.一种数据处理方法,其特征在于,包括:
获取软件循环代码,生成所述软件循环代码对应的循环结构;
在所述循环结构中,若循环入口块、循环回跳块以及循环跳出块分别对应的数量均小于数量阈值,则在所述软件循环代码中,获取与循环变量相关联的循环变量代码;
对所述循环变量代码进行内存读取检查操作,得到第一检查结果,对所述循环变量代码进行异常退出检查操作,得到第二检查结果;
若所述第一检查结果指示所述循环变量代码存在内存读取操作,则确定所述软件循环代码不满足循环优化条件;
若所述第二检查结果指示所述循环变量代码存在异常退出操作,则确定所述软件循环代码不满足所述循环优化条件;
若所述第一检查结果指示所述循环变量代码不存在内存读取操作,且所述第二检查结果指示所述循环变量代码不存在异常退出操作,则确定所述软件循环代码满足所述循环优化条件;
若所述软件循环代码满足循环优化条件,则对所述软件循环代码中的循环变量进行分析处理,得到循环次数;
若所述循环次数具有收敛属性,则在所述软件循环代码中获取起始指令以及终止指令;所述起始指令是所述软件循环代码中的循环体的首条指令;所述终止指令是所述软件循环代码中的循环体的末条指令;
对所述起始指令进行标记处理,得到起始标记,对所述终止指令进行标记处理,得到终止标记;
根据所述循环次数、所述起始标记以及所述终止标记,生成硬件循环指令;所述硬件循环指令用于触发芯片执行所述软件循环代码所指示的循环逻辑。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若所述循环入口块、所述循环回跳块以及所述循环跳出块分别对应的数量中的至少一个数量等于或大于所述数量阈值,则确定所述软件循环代码不满足所述循环优化条件。
3.根据权利要求1所述的方法,其特征在于,所述对所述软件循环代码中的循环变量进行分析处理,得到循环次数,包括:
在所述软件循环代码中,获取所述循环变量的循环初始值、所述循环变量的循环终止值,以及所述循环变量对应的循环步长;
确定所述循环终止值以及所述循环初始值之间的循环差值,确定所述循环差值以及所述循环步长之间的循环比值,将所述循环比值确定为循环次数。
4.根据权利要求3所述的方法,其特征在于,还包括:
对所述循环结构进行规范处理,得到规范循环结构;
则所述在所述软件循环代码中,获取所述循环变量的循环初始值、所述循环变量的循环终止值,以及所述循环变量对应的循环步长,包括:
在所述规范循环结构中,获取所述循环变量的循环初始值、所述循环变量的循环终止值,以及所述循环变量对应的循环步长。
5.根据权利要求4所述的方法,其特征在于,所述循环结构包括循环起始块、循环体块、循环跳出块、循环回跳块以及循环外块;
所述对所述循环结构进行规范处理,得到规范循环结构,包括:
在所述循环结构中,将所述循环起始块以及所述循环跳出块进行合并处理,得到循环合并块;
将从所述循环起始块指向至所述循环体块的第一连接线,更新为从所述循环合并块指向至所述循环体块;
将从所述循环体块指向至所述循环跳出块的第二连接线,更新为从所述循环体块指向至所述循环回跳块;
将从所述循环跳出块指向至所述循环回跳块的第三连接线进行删除处理,将从所述循环跳出块指向至所述循环外块的第四连接线,更新为从所述循环合并块指向至所述循环外块;
将从所述循环回跳块指向至所述循环起始块的第五连接线,更新为从所述循环回跳块指向至所述循环合并块;
将包括所述循环合并块、更新后的第一连接线、更新后的第二连接线、更新后的第四连接线以及更新后的第五连接线的循环结构,确定为规范循环结构;所述规范循环结构不包括所述第三连接线。
6.根据权利要求5所述的方法,其特征在于,还包括:
在所述循环合并块中,对所述循环变量进行赋值处理,得到赋值后的循环变量;其中,若所述赋值处理属于首次赋值类型,则所述赋值后的循环变量为所述循环初始值;若所述赋值处理不属于首次赋值类型,则所述赋值后的循环变量为所述循环回跳块基于所述循环步长对所述循环变量进行更新后的循环变量新值;
若所述赋值后的循环变量满足循环继续条件,则从所述循环合并块跳转至所述循环体块;
若所述赋值后的循环变量不满足所述循环继续条件,则从所述循环合并块跳转至所述循环外块。
7.根据权利要求6所述的方法,其特征在于,还包括:
将所述赋值后的循环变量以及所述循环终止值进行对比;
若所述赋值后的循环变量小于所述循环终止值,则确定所述赋值后的循环变量满足所述循环继续条件;
若所述赋值后的循环变量等于或大于所述循环终止值,则确定所述赋值后的循环变量不满足所述循环继续条件。
8.根据权利要求4所述的方法,其特征在于,还包括:
对所述规范循环结构进行优化处理,得到硬件循环结构;
根据所述硬件循环结构,对所述软件循环代码中的冗余指令进行删除处理,得到优化软件循环代码;
则所述在所述软件循环代码中获取起始指令以及终止指令,包括:
在所述优化软件循环代码中获取起始指令以及终止指令。
9.根据权利要求8所述的方法,其特征在于,所述规范循环结构包括循环进入块、循环合并块、循环体块、循环回跳块以及循环外块;
所述对所述规范循环结构进行优化处理,得到硬件循环结构,包括:
在所述规范循环结构中,将所述循环合并块中的循环跳出块进行删除处理,得到循环待合并块;
将所述循环体块以及所述循环待合并块进行合并处理,得到循环合并体块;
将从所述循环进入块指向至所述循环合并块的第六连接线,更新为从所述循环进入块指向至所述循环合并体块;
将从所述循环合并块指向至所述循环外块的第四连接线,更新为从所述循环合并体块指向至所述循环外块;
将从所述循环合并块指向至所述循环体块的第一连接线,更新为所述循环合并体块的自连接线;
将所述循环回跳块以及与所述循环回跳块相关联的连接线均进行删除处理;
将包括所述循环合并体块、更新后的第六连接线、更新后的第四连接线以及更新后的第一连接线的规范循环结构,确定为硬件循环结构;所述硬件循环结构不包括所述循环回跳块以及与所述循环回跳块相关联的连接线。
10.根据权利要求1所述的方法,其特征在于,所述根据所述循环次数、所述起始标记以及所述终止标记,生成硬件循环指令,包括:
根据所述循环次数、所述起始标记以及所述终止标记,生成待定位硬件循环指令;
对所述待定位硬件循环指令中的所述起始标记进行重定位处理,得到起始地址,对所述待定位硬件循环指令中的所述终止标记进行重定位处理,得到终止地址;
通过所述起始地址以及所述终止地址,对所述待定位硬件循环指令中的所述起始标记以及所述终止标记进行更新处理,得到硬件循环指令。
11.一种数据处理装置,其特征在于,包括:
第一处理模块,用于获取软件循环代码,生成所述软件循环代码对应的循环结构;
在所述循环结构中,若循环入口块、循环回跳块以及循环跳出块分别对应的数量均小于数量阈值,则在所述软件循环代码中,获取与循环变量相关联的循环变量代码;
对所述循环变量代码进行内存读取检查操作,得到第一检查结果,对所述循环变量代码进行异常退出检查操作,得到第二检查结果;
若所述第一检查结果指示所述循环变量代码存在内存读取操作,则确定所述软件循环代码不满足循环优化条件;
若所述第二检查结果指示所述循环变量代码存在异常退出操作,则确定所述软件循环代码不满足所述循环优化条件;
若所述第一检查结果指示所述循环变量代码不存在内存读取操作,且所述第二检查结果指示所述循环变量代码不存在异常退出操作,则确定所述软件循环代码满足所述循环优化条件;
若所述软件循环代码满足循环优化条件,则对所述软件循环代码中的循环变量进行分析处理,得到循环次数;
第一获取模块,用于若所述循环次数具有收敛属性,则在所述软件循环代码中获取起始指令以及终止指令;所述起始指令是所述软件循环代码中的循环体的首条指令;所述终止指令是所述软件循环代码中的循环体的末条指令;
第二处理模块,用于对所述起始指令进行标记处理,得到起始标记,对所述终止指令进行标记处理,得到终止标记;
第一生成模块,用于根据所述循环次数、所述起始标记以及所述终止标记,生成硬件循环指令;所述硬件循环指令用于触发芯片执行所述软件循环代码所指示的循环逻辑。
12.一种计算机设备,其特征在于,包括:处理器、存储器以及网络接口;
所述处理器与所述存储器、所述网络接口相连,其中,所述网络接口用于提供数据通信功能,所述存储器用于存储计算机程序,所述处理器用于调用所述计算机程序,以使得所述计算机设备执行权利要求1至10任一项所述的方法。
13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,所述计算机程序适于由处理器加载并执行,以使得具有所述处理器的计算机设备执行权利要求1-10任一项所述的方法。
CN202311097765.7A 2023-08-29 2023-08-29 一种数据处理方法、装置、设备以及计算机可读存储介质 Active CN116841564B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311097765.7A CN116841564B (zh) 2023-08-29 2023-08-29 一种数据处理方法、装置、设备以及计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311097765.7A CN116841564B (zh) 2023-08-29 2023-08-29 一种数据处理方法、装置、设备以及计算机可读存储介质

Publications (2)

Publication Number Publication Date
CN116841564A CN116841564A (zh) 2023-10-03
CN116841564B true CN116841564B (zh) 2023-11-14

Family

ID=88165572

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311097765.7A Active CN116841564B (zh) 2023-08-29 2023-08-29 一种数据处理方法、装置、设备以及计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN116841564B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115202662B (zh) * 2021-04-14 2024-06-18 华为技术有限公司 一种弱内存序架构下的代码检查方法及相应设备

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06290057A (ja) * 1993-04-05 1994-10-18 Hitachi Ltd ループ最適化方法
CN111522584A (zh) * 2020-04-10 2020-08-11 深圳优矽科技有限公司 一种硬件循环加速处理器及其执行的硬件循环加速方法
CN112000370A (zh) * 2020-08-27 2020-11-27 北京百度网讯科技有限公司 循环指令的处理方法、装置、设备和存储介质
CN112463139A (zh) * 2020-11-23 2021-03-09 乐聚(深圳)机器人技术有限公司 基于电子积木的编程方法、装置、电子设备及存储介质
CN112817664A (zh) * 2021-04-19 2021-05-18 北京燧原智能科技有限公司 一种数据处理系统、方法及芯片
CN113590126A (zh) * 2020-04-30 2021-11-02 英特尔公司 用于实现具有局部存储需求的循环流水线化的自动编译器数据流优化
CN114995822A (zh) * 2022-06-07 2022-09-02 重庆大学 专用于cnn加速器的深度学习编译器优化方法
CN115495155A (zh) * 2022-11-18 2022-12-20 北京数渡信息科技有限公司 一种适用于通用处理器的硬件循环处理装置

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11068247B2 (en) * 2018-02-06 2021-07-20 Microsoft Technology Licensing, Llc Vectorizing conditional min-max sequence reduction loops
US10853043B2 (en) * 2018-09-11 2020-12-01 Intel Corporation Methods and apparatus to improve optimizing loops with predictable recurring memory reads

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06290057A (ja) * 1993-04-05 1994-10-18 Hitachi Ltd ループ最適化方法
CN111522584A (zh) * 2020-04-10 2020-08-11 深圳优矽科技有限公司 一种硬件循环加速处理器及其执行的硬件循环加速方法
CN113590126A (zh) * 2020-04-30 2021-11-02 英特尔公司 用于实现具有局部存储需求的循环流水线化的自动编译器数据流优化
CN112000370A (zh) * 2020-08-27 2020-11-27 北京百度网讯科技有限公司 循环指令的处理方法、装置、设备和存储介质
CN112463139A (zh) * 2020-11-23 2021-03-09 乐聚(深圳)机器人技术有限公司 基于电子积木的编程方法、装置、电子设备及存储介质
CN112817664A (zh) * 2021-04-19 2021-05-18 北京燧原智能科技有限公司 一种数据处理系统、方法及芯片
CN114995822A (zh) * 2022-06-07 2022-09-02 重庆大学 专用于cnn加速器的深度学习编译器优化方法
CN115495155A (zh) * 2022-11-18 2022-12-20 北京数渡信息科技有限公司 一种适用于通用处理器的硬件循环处理装置

Also Published As

Publication number Publication date
CN116841564A (zh) 2023-10-03

Similar Documents

Publication Publication Date Title
CN112100054B (zh) 一种面向数据管控的程序静态分析方法和系统
CN108595157B (zh) 区块链数据的处理方法、装置、设备和存储介质
US8032873B2 (en) Computer program code size partitioning system for multiple memory multi-processing systems
CN116841564B (zh) 一种数据处理方法、装置、设备以及计算机可读存储介质
CN112394942B (zh) 基于云计算的分布式软件开发编译方法及软件开发平台
Smith Probabilistic noninterference through weak probabilistic bisimulation
CN110968437A (zh) 一种基于Java智能合约的单个合约并行执行的方法、装置、设备及介质
CN111338622B (zh) 供应链代码识别方法、装置、服务器及可读存储介质
CN101980546B (zh) 智能网平台、业务执行方法和分析业务异常的方法
CN115174231A (zh) 一种基于AI Knowledge Base的网络欺诈分析方法及服务器
CN111240772A (zh) 一种基于区块链的数据处理方法、装置及存储介质
CN115469894A (zh) 一种应用程序的安装控制方法、装置、设备及存储介质
CN113168552A (zh) 人工智能应用开发系统、计算机设备及存储介质
CN111274202B (zh) 电子合同生成方法、装置、计算机设备及存储介质
CN112948251B (zh) 软件自动测试方法及装置
CN115577363A (zh) 恶意代码反序列化利用链的检测方法及装置
CN113051173B (zh) 测试流程的编排执行方法、装置、计算机设备和存储介质
CN115454473A (zh) 基于深度学习漏洞决策的数据处理方法及信息安全系统
CN112764788A (zh) 基于程序源码切片重组的软件动态更新热补丁合成方法
Jiang et al. An exploitability analysis technique for binary vulnerability based on automatic exception suppression
CN116893854B (zh) 指令资源的冲突检测方法、装置、设备及存储介质
CN117076331B (zh) 测试剧本生成方法、装置、电子设备及存储介质
CN115037648B (zh) 基于数据流约简的智能合约测试用例生成方法及系统
CN113724065B (zh) 基于流程指导的辅助催收方法、装置、设备及存储介质
CN112631653B (zh) 一种指标库代码适配方法及系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant