工欲善其事必先利其器–SimpleTestBed

2024-03-14 03:08

本文主要是介绍工欲善其事必先利其器–SimpleTestBed,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近在研究一个近似的优化算法。在做对比实验的时候,一共要跑6,7个不同的算法来比较。为了公平起见,每个算法需要在几个不同的参数环境下,在 几批不同数据下,各自跑几十次,然后看看谁的评价效果最好。一共要跑大概上百次的算法运行。以前的做法是写一个脚本执行,或者说用JUnit之类的单元测 试工具来自动化跑。但是,现在的问题是,这上百次的测试,需要花太多时间了。而实际上,我们系有很多空闲的服务器,而且都是8 core和16 core的机器。于是,现在就有两个问题了:

1) 并行调度 。如果串行跑(比如JUnit),也就是单线程跑,那么多core的机器实际上只利用到了一个 core,造成了大量的CPU资源浪费。而如果另外修改算法代码,使得其并行化,虽然也可行,但是修改原先实现的算法代码是在太麻烦了。而实际上,不同的 算法,不同的参数,不同的数据,不同的run次数,本身之间就是独立的,所以test case与test case其实本身就可以并行运行。其实需要的只是调度的程序,能够去调度线程来跑这些test cases.

2)程序和数据的部署。 如果要在系里面多台机器上跑程序,那么程序的部署很繁琐。首先,需要把编译好的代码通过 SFTP/FTP拷贝到远程服务器上。另外,需要给不同的服务器,写不同的执行脚本。最后,还要通过SSH远程登录到每台服务器上,敲打命令,执行哪个运 行脚本。在程序执行期间,需要盯着各个SSH的窗口,等全部服务器都跑完了,然后在手工去每个机器上收集其执行结果,汇总。这个流程如果只做一次,不觉得 很麻烦。问题是,我们在测试和对比算法实验中,程序的代码在不断进化,修改,更新。每次更新,都需要如此做一遍流程,那么就实在太麻烦了。设想,如果要部 署到系里面十几台机器跑,那个工作量不得了。

根据这两个问题,于是本人利用了周末的一半时间,写了一个SimpleTestBed: http://code.google.com/p/simpletestbed/ 。 这个Test Bed工具,要解决的就是上述两个问题。它分两个部分,一个是服务器端,一个是客户端。服务器端要做的事情,就是把程序拷贝到每个服务器上,启动,然后就 不用管了。客户端这块,用户需要做的就是为自己的算法创建TestCase。TestCase在SimpleTestBed是一个interface,用 户实现之后,加入一个创建TestBed。接下来只需要执行TestBed的execute方法。SimpleTestBed会自动把加入的 TestCase分发到远程服务器上,创建多线程,执行,然后返回结果。

下面就是一个例子,在Google Code网站上可以看到完整代码 。




里面创建了2个TestCase,一个是算Fibonacci数的。另外一个算random varaible的mean。FibonacciTestCase 类和RandomMeanTestCase 类 也可以在google code里面看到。这里的每个TestCase都会执行20次。两个TestCase会分发到两台不同的远程服务器上执行。两台远程服务器的 hostname可以通过配置文件,firefly_config.txt, 来配置。现在这个配置文件格式很简单,每行一个server的host name。

关于SimpleTestBed的实现细节,主要用到了Java里面反射机制,Reflection。于是,我可以在客户端执行的时候,让 TestCase自己把自己传输到服务器上,然后在通知服务器去执行。服务器端不需要预先做任何事情。这种反射机制,让程序和数据的远程部署变得异常简 单。我在Eclipse就可以完成所有的测试,不需要在使用到什么SFTP/FTP, putty等工具了。

这篇关于工欲善其事必先利其器–SimpleTestBed的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/807019

相关文章

工欲善其事必先利其器,哪个才是数据科学的最佳Python IDE?

点击上方“AI公园”,关注公众号,选择加“星标“或“置顶” 作者:Saurabh Hooda, Hackr.io 编译:ronghuaiyang 前戏 写代码时,有个好的IDE真的是事半功倍的,可能有人说,我vim用的很好,但是vim的学习曲线非常的陡峭,也就是对大多数人来说,你还没能把vim用的熟练,可能就放弃了,不过IDE就不一样了,可以让你迅速的上手编写代码,而不用考虑太多的东西,那么在

工欲善其事必先利其器——PowerDesigner(一)简介

what is it?   是Sybase公司的CASE工具集。是一款开发人员常用的数据库建模工具 How Powerful is it?   PowerDesigner是Sybase的企业建模和设计解决方案,采用模型驱动方法,将业务与IT结合起来,可帮助部署有效的企业体系架构,并为研发生命周期管理提供强大的分析与设计技术。PowerDesigner独具匠心地将多种标准数据建模技术(UML

webstorm(工欲善其事,必先利其器)工具详解

作者:小萧ovo 链接:https://zhuanlan.zhihu.com/p/22893295 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 开发工具webstorm。是在windows环境下的。 webstorm官网下载:WebStorm: The Smartest JavaScript IDE 下载后安装,直接下一步,安装在哪里自己喜欢。 xx

工欲善其事,必先利其器——利用PowerDesigner建模并生成数据库文件

首先介绍一下Power Designer:它是Sybase公司的CASE工具集,使用它可以方便地对管理信息系统进行分析设计,它几乎包括了数据库设计全过程。利用Power Designer可以制作数据流程图、概念数据模型、物理数据模型,还可以为数据仓库制作结构模型,对团队设计模型进行控制。它可以与许多流行的软件开发工具如PowerBuilder、Delphi、VB等相配合缩短开发时间以及使系统

(工欲善其事,必先利其器)eclipse 快捷键

【C t  rl+T】 搜索当前接口的实现类   1. 【ALT +/】     此快捷键为用户编辑的好帮手,能为用户提供内容的辅助,不要为记不全方法和属性名称犯愁,当记不全类、方法和属性的名字时,多体验一下【ALT +/】快捷键带来的好处吧。    2. 【Ct rl+O】     显示类中方法和属性的大纲,能快速定位类的方法和属性,在查找Bug时非常有用。    3. 【C

【工欲善其事,必先利其器】Xcode 技巧,太给力了

You’ve all seen the all-star Hollywood programmer hacking through the mainframe, fingers racing on the keyboard while terminals fly across the screen. If you’ve ever wanted to be like that, you’re in

【MySQL】工欲善其事必先利其器 --- Linux下安装MySQL(手把手保姆级)

👦个人主页:@Weraphael ✍🏻作者简介:目前学习计网、mysql和算法 ✈️专栏:MySQL学习 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞👍🏻 收藏 📂 加关注✨ 目录 前言一、卸载不要的环境1.1 查看是否存在 MySQL 服务1.2 卸载 二、获取MySQL官方yum源三、安装MySQL服务四、登录MySQ

工欲善其事必先利器--为自己投资

消费观,从小到大的转变,马上到了而立之年了,懂得了,钱要花到投资上才有效益,投资自身效益更高!           几天前买了个新电脑,加了一倍内存,加了目前市场是最大的固态硬盘,现在的电脑达到了三秒开机的速度,很满足,很幸福,哈哈。虽说公司给提供电脑,但是那个破电脑性能差的要人命,白白的跟它生气不说,效率差的浪费了巨大的生命啊。           工欲善其事,必先利其器

【iOS与EV3混合机器人编程系列之二】工欲善其事,必先利其器(准备篇)

在上一篇文章中,我们论述了iOS与EV3结合后机器人开发的无限可能, 那么,大家要不要一起来Hacking一把呢? 为了能够完整地完成我接下来我讲的项目,我们需要做以下准备: 1、一台Mac运行MAC OS X 10.9.3以上的操作系统。 2、Xcode6。这是iOS在Mac上的开发工具。我们将使用Xcode来进行所有的项目程序的编写 3、一两个iOS设备,iPho

工欲善其事 之 Web 前端调试工具格式化混淆过的 JS 代码

工欲善其事 之 Web 前端调试工具格式化混淆过的 JS 代码 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循“署名-非商业用途-保持一致”创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再