Archive

Posts Tagged ‘research’

使用机器学习算法训练 Language Fuzzer 的一个问题

August 7th, 2015 No comments

使用机器学习的技术来训练针对编译器的 Programming Language Fuzzer, 有一个问题, 就是找到了 bug(s) 之后, 整个 Fuzzer 可能就跑偏了, 重复性的触发已经发现的 bugs.

理想的情况是, Fuzzer 能够发现 Compiler 的某个模块, 针对 PL 中的某个语言的 feature, 已有的测试不充分导致发现了 bug, 于是就更多的生成针对这个模块的 testcase, 但是在这个目标下, 还是尽可能的做到 diversity.

CCS、S&P会议Paper标题里的“SoK“是什么意思

June 2nd, 2015 No comments

大致可以理解为综述和对比类文章。

http://www.ieee-security.org/TC/SP2013/cfp.html

Systematization of Knowledge Papers

Following the success of the previous years’ conferences, we are also soliciting papers focused on systematization of knowledge (SoK). The goal of this call is to encourage work that evaluates, systematizes, and contextualizes existing knowledge. These papers can provide a high value to our community but may not be accepted because of a lack of novel research contributions. Suitable papers include survey papers that provide useful perspectives on major research areas, papers that support or challenge long-held beliefs with compelling evidence, or papers that provide an extensive and realistic evaluation of competing approaches to solving specific problems. Submissions are encouraged to analyze the current research landscape: identify areas that have enjoyed much research attention, point out open areas with unsolved challenges, and present a prioritization that can guide researchers to make progress on solving important challenges. Submissions must be distinguished by a checkbox on the submission form. In addition, the paper title must have the prefix “SoK:”. They will be reviewed by the full PC and held to the same standards as traditional research papers, except instead of emphasizing novel research contributions the emphasis will be on value to the community. Accepted papers will be presented at the symposium and included in the proceedings.

IonMonkey 中可能的研究点

November 16th, 2012 No comments

一周前,一位巴西的大四学生给 Mozilla JS-Internals 邮件列表发了一封邮件[1],说自己下半年就开始计算机科学的研究生学业了,希望能够在 IonMonkey 上做些研究,但是刚接触 IonMonkey 没有什么感觉,希望能够得到一些指点。今天 Mozilla JS Engine 的负责人 David Anderson 回复了他,指出了几个他们感兴趣的研究项目[2],有兴趣的读者可以关注一下:

  1. Escape Analysis(逃逸分析):目前还没有任何的工作,所以即使不是完整的算法实现,能够得到一些测试数据也是很好的。逃逸分析能够帮助减少冗余的堆内存占用(当一个线程中的堆内存对象不确定是否被其它线程引用的时候是不能轻易的删除的)。
  2. Better Alias Analysis(别名分析):目前 IonMonkey 中有一个别名分析(位于 js/src/ion/AliasAnalysis.{h,cpp}),但是比较的粗糙,例如在遇到类似“v.x + v.y + v.z”这样的表达式时,现在的别名分析会将 v.x 和 v.z 都看成是 v.y 的别名。这阻碍了后续的优化工作。
  3. RA Improvements(寄存器分配算法的改进):要重写一个 RA 是非常难的,工作量也非常的大。如果能够在现在 RA 实现的基础上做一些改进,也是很有意义的。
  4. Control-flow Elimination(不常用控制流消除):目前 IonMonkey 能够消除(eliminate)单个指令,但是无法消除 CFG 中的 Block 。如果这个功能实现了,我们(开发人员)就可以做进一步的实验,尝试更加激进的优化,消除掉不常用的分支,或许还可以促进 RA 的效果。

目前 IonMonkey 还在开发中,支持的分析和优化还不是很多,实现上也是比较简单的实现,应该还有不少的机会。

Reference:

[1]: http://www.mail-archive.com/dev-tech-js-engine-internals@lists.mozilla.org/msg00120.html

[2]: http://www.mail-archive.com/dev-tech-js-engine-internals@lists.mozilla.org/msg00122.html

如何找到研究点 (转载)

November 8th, 2010 No comments

这是篇转载翻译文章,中文原文来自于编译点滴,中科院计算所的计算机硕士;英文原文来自于Jason Eisner宾夕法尼亚大学的计算机博士。

生物人类学家 Loren Eiseley曾将科学家分为两类:大家和小家。(他称自己为小家,在科研方向的大骨架中坐着丰富数据的工作。如果Eiseley是个程序员的话,他估计会把自己成为”自底向上“的科学)
计算机科学包括很多不同种类的研究方式,其中有一些相对于另外一些很庞大。你可以通过某个方式做出自己的贡献。

  • 估计你在计算机科学中能找到的最小研究点就是替换或者实现其他人的算法/工作。这种方式可能对你所在领域或者学习很有用,但无法让你的工作有独创性。当然如果你能使自己的工作对足够多的人们有用(比如,让他具有更好的可以执行和互联特性),你也能有点名气。
  • 稍微大点的研究点就是努力寻找改进现有著名技术的方式。(在很多子领域,别人更期望你的工作能确实带来改进).大多数的研究都是这种。读论文的时候,注意文章中的关键条件和问题。实际中,注意作者在他的机制中使用到的有害简化或者太过随意的假设。这些地方都是你能做的与众不同的机会。
  • 另外,还有个稍微大点的研究。针对两个或多个算法,通过一些客观的效率、准确性测量方式评估他们。设计一个合理清晰的对比,并且实现并给出对比结果,通常需要大量的工作。这个研究的好坏,不仅取决于需要多大的工作量,而且还需要看你所得到的结果是否很出人意料。要知道,这种量化的研究方法正在一些重要的领域变得越来越重要。(如操作系统、机器学习、自然语言、算法).
  • 写综述:你可以透彻的回顾某些领域的已有研究。但要注意,要想做得好,需要花费大量的时间,而且对于你的研究工作作用也不大,除非很多人想读并引用你写的牛综述。(要想发表此类综述,你需要和非常著名的导师一起写这类文章,或者找一个期望接受低水平研究生高层次综述文章的一流期刊吧)。好的方面是,通过写牛综述,你可以成为该方面的专家,可以游刃有余的和其他该领域的研究者探讨。而且可以给你关于过去研究成果的不足之处。而且这种综述对于一个高级本科生、硕士生论文,或者博士论文的第一部分很合适。当然,如果你还是忍不住想炫耀,可以在网页上发布。
  • 构建一个大型程序或者设备。这会让你有些知名度,毕竟这么大型的系统还不多,而且这也能证明你可以做个合格的软件工程师。但是,请想清楚:这个系统其他人可以直接用吗?如果不能,它能刷新性能记录之类的吗?如果还是不能,它还有其他的长处吗?比如,能演示如何整合和扩展已有技术,或者能引入新的技术或者前景。如果你只是实验室若干工程项目中的一个参与者,那么请务必确保你自己有独立的贡献–这个工作的某些方面让人印象深刻,独一无二,而且其他人的工作和你直接相关。
  • 你的领域有很多重大的问题。这种问题通常表现为该学科的主干结构上–问题经常出现,但解决方案却有很多种。了解一些这种问题和已经针对此类问题展开的工作。如果你发现了能首个解决此问题,或者找到更好的解决方案,或者有不同的解决方式,这就是个大发现!通常,寻找好的解决方案都需要稍微改改这个问题本身。
  • 如果你壮志踌躇,而且励志做大的科研,那就需要研究计算机分支中你所在的分支中著名的论文,了解一些相关会议上其他人都在做什么,并且多问问自己,在这个领域,是什么已经被发现的或者未知的问题阻碍了发展?我能解决吗?如果不能,我能先形式化他们吗?我能证明给同事们看,解决这个问题后会有什么不同吗?
  • 和你导师聊聊目前已经研究透彻的领域。每个领域都有些共性的问题,“有点重要”的问题,这些问题可能被提及和诺,但是还没有人做个认真的尝试。如果自己觉得找到了这样一个问题,别忘了向你的同事,以及图书馆求证这个问题还未被研究透彻。
  • 最后,你会找到一些有趣的问题,而且通常都不是听起来那么难。
    • 研究已有的(已经使用的)系统,关注哪些地方它们做的不好。
    • 如果你的领域是交叉学科,多询问另一学科的人感兴趣的是什么。实际就是问他们为什么计算机科学家都不着边际的乱弹。
    • 在很多领域,数据已经给出了存在的问题。语言学家能在任何一本杂志文章里找到不能解释的现象。系统程序员能在实际磁盘访问中收集数据,研究如何通过正则的方式表达。程序语言理论学家能够学习实际的编程语言,图形程序员能实际观察真实的图形和动画,只是不知道如何捕获他们。

请务必谨记:有很多的研究可以做,所以你可以选择某个领域。(即使你的导师是个实干派,你仍然有很多的选择).所以,尤其是当你在考虑非常耗时的工程时,要做好打持久战的准备,并且问问自己。这个项目是不是真的能:

  • 让你学到很多?
  • 带来更好的项目?
  • 能让你享受自己即将花费的时间?
  • 能让你从现在起坚持6个月、12个月甚至48个月的时间,仍然觉得很有价值做下去?
  • 从某种意义上,有成功的希望?(比如:能以此为话题,带来一个有趣的报告或者讨论)
  • 让导师不会太责怪?
  • 让整个学术界对你和你的工作感兴趣?
  • 给工业界的人证明你所做的工作正是他们需要的?
  • 让你成为所谓的“优秀毕业生”?

最后:现在你终于在研究生院了,没人为你设置课表和日程,你所做的每件事都是无期限的。这就意味着你很容易花费很多时间在任何一个任务上,尤其是固执的要求完美或者重复体力活的任务会让你觉得工作永远不会足够好。或者自己的潜意识在逃避下一个研究阶段。

  • 不要花费过多的时间在背景阅读上。你要意识到自己的工作肯定会在充满未知的情况下展开。你没有时间来学习所有你需要知道的事情。没什么,你的导师也是这么过来的。实际上,这是好事,因为未知让你的思想没有束缚,可能会有新的灵感迸发。所以,早点开始做自己的思考。你可以边做边读,只需要周期性的把你自己的想法告诉那些能在相关工作上给你指导,并推荐你读哪些相关论文的人就行了。
  • 不要在某一个问题上花过多时间。没有哪个解决方案是完备的。着力提高自己工作的健壮性,让自己的工作更好看些,更方便的秀出来。