System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种用于编程竞赛的计算机程序性能评测方法技术_技高网

一种用于编程竞赛的计算机程序性能评测方法技术

技术编号:40195229 阅读:13 留言:0更新日期:2024-01-26 23:58
本发明专利技术公开了一种用于编程竞赛的计算机程序性能评测方法,编程竞赛需要考核程序代码的时间复杂度,即对程序的运行耗时进行评测。该方法不直接计算程序的运行耗时,而是通过计算程序执行二进制指令的数量,再通过公式换算得到程序代码在不同CPU平台下的耗时参考值,其目的是解决程序代码评测过程需要对CPU进行独占的限制,让程序代码可以用并发方式进行评测,从而实现批量评测,极大提高评测速度。另外还可以利用云计算的CPU弹性扩展服务,实现大规模、实时的评测计算。

【技术实现步骤摘要】

本专利技术涉及编程竞赛,具体为一种用于编程竞赛的计算机程序性能评测方法


技术介绍

1、编程竞赛的评测主要有三项:程序输入输出须正确一致、程序的内存占用少则优、程序的cpu占用少则优。其中程序的cpu占用属于程序的时间复杂度指标,在同等硬件配置、相同的输入输出内容下,程序的耗时越少意味着程序的算法越优。在常规的编程竞赛中,如noi、csp-j/s等,海选赛的参赛人数多,若评测系统是统一部署在云服务上,采用并发方式对每个选手提交的程序进行评测,则程序获得的cpu资源是动态分配的,程序的cpu占用耗时统计不可信。若评测系统采用单机而且以队列方式处理每个程序,一个程序从编译到执行至少也需要接近500毫秒,等待评测的程序多的情况下,毫无实时性可言。因此需要一种能用于大规模海选赛中实时地对选手提交的程序进行执行性能快速评测的方法。

2、现有常规的做法是放弃评测的实时性,通过移动存储设备拷贝选手的代码到指定的计算机上,评测系统以队列方式处理每个程序,因为每个程序从编译到运行都是对cpu进行独占,从而较为精确地计算出程序的耗时。

3、现有技术存在的缺点:

4、(1)牺牲实时性,大型赛事的结果往往需要一周甚至更久才能公布;

5、(2)不能并发对程序进行评测,则意味着无法做大规模的海选;

6、(3)单机长时间运行评测系统,对软硬件的稳定性和运行环境要求高;

7、(4)因为竞赛所用设备配置需一致,限制了编程竞赛的推广和实施。


技术实现思路p>

1、为解决上述技术问题,本专利技术的目的是提供一种能用于大规模海选赛中实时地对选手提交的程序进行执行性能快速评测的方法,该方法的目的是解决编程竞赛评测过程需要对cpu进行独占的限制,让程序可以用并发方式进行评测,从而可以利用云计算的cpu弹性扩展服务,实现大规模、实时的评测计算。

2、本专利技术的目的通过以下的技术方案来实现:一种用于编程竞赛的计算机程序性能评测方法,所述方法包括以下步骤:

3、步骤a对选手提交的程序代码编译成二进制可执行文件;

4、步骤b利用插桩工具,在调用可执行文件的同时进行插桩;

5、步骤c可执行文件在每次执行一条二进制指令之前,插桩工具会通过全局变量自增的方式记录执行二进制指令的次数,该步骤重复执行,直到可执行文件执行结束。

6、步骤d读取本插桩的全局变量,通过指定平台的cpu时钟速度进行换算,获得该程序在指定平台执行的所需耗时。

7、作为一种优选方案,所述步骤b中所述插桩工具可以使用开源指令执行分析工具进行二次开发获得,其主要任务是监听程序的执行,当cpu执行该程序的二进制指令时候,激活一个中断子程序。

8、作为一种优选方案,所述步骤c中,可执行文件在每次执行一条二进制指令之前,激活中断子程序,在中断子程序中通过全局变量自增的方式记录执行二进制指令的次数,全局变量是一个长整型变量,初始值为0,cpu每次执行该程序的二进制指令之前,该变量通过自增运算符进行加1操作,当程序执行结束后,其值即为程序的二进制指令执行的总次数。

9、作为一种优选方案,所述步骤d中,读取本插桩的全局变量count,通过cpu时钟速度进行换算,获得该程序执行的所需耗时,换算公式:

10、

11、其中为程序执行耗时,单位为秒。f为cpu主频,cpi为平均指令周期数,是指执行一条指令所需的平均时钟周期数,只有count是变量,f和cpi都是常量,因此所得ot可以作为程序算法优劣的判别参考。

12、与现有技术对比,本专利技术具备以下有益效果:

13、(1)本专利技术一种用于编程竞赛的计算机程序性能评测方法可以并发执行:每个步骤均可以并发执行,不需要对cpu进行独占。大大缩短程序的评测时间。

14、(2)本专利技术一种用于编程竞赛的计算机程序性能评测方法计算结果精确:每个程序最终都是编译成cpu二进制指令进行执行的,cpu二进制指令执行的次数就是程序的时间复杂度。当cpu二进制执行次数可知,cpu的型号参数可以知,则程序的耗时是可以精确换算的。

15、(3)本专利技术一种用于编程竞赛的计算机程序性能评测方法突破了硬件环境限制:摆脱了cpu独占的限制,则可以部署评测系统可以部署在云服务之上,利用云服务的弹性技术,可以无限扩展cpu性能,从而实现更大规模的竞赛海选,让竞赛项目更易于推广和组织实施。

本文档来自技高网...

【技术保护点】

1.一种用于编程竞赛的计算机程序性能评测方法,其特征在于,所述方法包括以下步骤:

2.根据权利要求1所述的用于编程竞赛的计算机程序性能评测方法,其特征在于,所述步骤B中所述插桩工具可以使用开源指令执行分析工具进行二次开发获得,其主要任务是监听程序的执行,当CPU执行该程序的二进制指令时候,激活一个中断子程序。

3.根据权利要求1所述的用于编程竞赛的计算机程序性能评测方法,其特征在于,所述步骤C中,可执行文件在每次执行一条二进制指令之前,激活中断子程序,在中断子程序中通过全局变量自增的方式记录执行二进制指令的次数,全局变量是一个长整型变量,初始值为0,CPU每次执行该程序的二进制指令之前,该变量通过自增运算符进行加1操作,当程序执行结束后,其值即为程序的二进制指令执行的总次数。

4.根据权利要求1所述的用于编程竞赛的计算机程序性能评测方法,其特征在于,所述步骤D中,读取本插桩的全局变量count,通过CPU时钟速度进行换算,获得该程序执行的所需耗时,换算公式:

【技术特征摘要】

1.一种用于编程竞赛的计算机程序性能评测方法,其特征在于,所述方法包括以下步骤:

2.根据权利要求1所述的用于编程竞赛的计算机程序性能评测方法,其特征在于,所述步骤b中所述插桩工具可以使用开源指令执行分析工具进行二次开发获得,其主要任务是监听程序的执行,当cpu执行该程序的二进制指令时候,激活一个中断子程序。

3.根据权利要求1所述的用于编程竞赛的计算机程序性能评测方法,其特征在于,所述步骤c中,可执行文件在每次执行一条二进制...

【专利技术属性】
技术研发人员:罗杰武王志懿马启亮
申请(专利权)人:长讯通信服务有限公司
类型:发明
国别省市:

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

1