Google关心哪些编译技术(What Compiler Technologies does Google care?)

Google的工程师给UIUC的LLVM之爷发了一封邮件,希望他帮忙推荐一些编译方向的学生到Google做实习生,或者是直接到Google工作。其中,列举了一些Google编译组打算让实习生或者全职工程师们开展工作的一些方向。

随着国内互联网公司日益壮大,技术积累越来越深,也会遇到很多类似Google这样的问题,需要编译的技术在其中发挥一些作用。对编译感兴趣,目标是互联网公司的本科、硕士、博士同学们;想有些看家本领,以便跳槽升值涨薪且对编译技术感兴趣的朋友们,多多关注这些点,并择一二深入研究之。日久必升。

下面列出Google工程师比较感兴趣的一些方向,很有意思。供大家参考,其中英文部分是原话,中文部分是《编译点滴》基于自己的一些知识储备做的解释。标记红色的,是为了提升性能而关注的编译优化技术;标记蓝色的,是为了更好的分析代码,提升安全性,减少bug而关注的编译优化技术。欢迎各位指正,并给出一些参考链接或者文献,方便后来人观摩学习。

  • Improving performance for ARM and x86:这个不必说了,目标最明确,就是在X86和ARM服务器上提升程序的性能。Google把ARM排在了第一位,看来这个是重点。
  • Improving security via code sandboxing:这个看起来更像是对NaCL的优化. PLDI 2011上Google又发表了一篇文章,介绍在NaCL方面的进展,感兴趣的朋友可以参考《Language-Independent Sandboxing of Just-In-Time Compilation and Self-Modifying Code》
  • Software correctness and race detection:这也是个很热门的话题。软件的正确性,尤其是多线程程序的正确性调试很困难。花了很多钱雇来的工程师,一天到晚都在调并行程序的bug,性价比太低了。因此正确性和race detection是个Google很重视的方向。
  • Machine learning and iterative compilation:用编译器编译代码估计大部分朋友都会,但是如何用好编译器,编译出性能最好的代码则不那么容易,尤其是那些算法上优化空间小,且性能关键的代码。因此迭代编译优化技术就有了发挥作用的空间,反复不停的调整选项,尤其是如何利用机器学习的方式,结合一些源代码本身的特征做迭代编译优化。目前在微软亚洲研究院工作的陈洋博士在这一领域有一些国际一流的研究成果,供感兴趣的朋友参考:
    • Evaluating Iterative Optimization across 1000 Data Sets
    • Iterative optimization for the data center
  • Memory allocator tuning:计算机程序的两大主题是计算和数据。如何有效的为程序中的数据分配内存,避免产生过多的内存碎片,提升程序的局部性,甚至有效的利用硬盘空间,也是Google关注的话题。
  • Automated refactoring:代码多了,堆积的时间长了,就要重构。有没有一些方法,可以协助完成这一功能。比如辅助程序员了解程序的行为,调整代码的格式等等。也是很有意思的话题。
  • Application co-location performance studies:这也是一个热点话题。多核虽然多了很多执行单元,但是内存、最后一级cache都是共享资源。当多个进程同时运行的时候,竞争不可避免。那么如何评价各个进程所需资源情况,进而确定如何在集群中对任务做调度。在许多伴有大量后台数据处理的互联网公司,建起来的大集群不可能只用来跑一两个MapReduce形式的计算问题。多个MapReduce任务同时运行时,如何调度就更加重要了,也是这个方向很有意义的原因。下面三篇论文都是Google发表的这方面的典型论文:
    • Increasing Utilization in Modern Warehouse-Scale Computers Using Bubble-Up.  MICRO 2012
    • The impact of memory subsystem resource sharing on datacenter applications. ISCA 2011
    • Bubble-Up: increasing utilization in modern warehouse scale computers via sensible co-locations. MICRO 2011
  • Hardware performance monitoring:这个《编译点滴》也没有太多关注。感觉和Profiling Tools的内容很相近。还请有了解的朋友指教。
    • CPU 內部有硬件是來統計 icount,cache miss,stall cycle。Linux 的 perf 算是這一類的工具。這類硬件可以提供程式在運行時期的資訊,優化器可以藉此進一步優化,比如說 cache miss 高的時候,可以重新安排 code layout。(感谢chenwj)
  • Feedback directed optimization:这个是很传统的编译问题,如何根据程序运行时的信息反过来指导下一次的编译优化,从而经过反复几次迭代之后,提升性能。这个其实和iterative compilation差不多。只是前者只是反复编译几次,后者强调的是不停的反复迭代编译直到性能稳定。
  • Profiling tools:这个就是如何在运行时获得更多程序运行的性能信息的问题了。
  • Low-overhead instrumentation:要想获得更多的程序运行时信息,插装是很重要的方式,但是插装就意味着原来的工作需要添加很多额外的其他操作,因此性能就会下降。低开销的插装就是为了解决这一问题。
  • Type inferencing:类型推导是编译器前端经常涉及到的问题,尤其是现在的Javascript,Python等一些不那么强调类型的编程语言。如何通过形式化的推导,得到类型信息就而提升程序性能就非常关键了。Mozilla公司在PLDI 2012上就发表了一篇论文介绍他们做的相关工作,感兴趣的朋友不妨下载看看:《Fast and Precise Hybrid Type Inference for JavaScript》
  • Managed runtime optimization:这个主要针对那些有运行时环境的编程语言,比如JavaScript,Android上的Dalvik虚拟机,Python,或者Go语言之类的。基于他们的运行时环境做优化。这方面,编译点滴对Google的技术了解不多,欢迎大家提供信息。
  • Static/dynamic program analyses:程序分析技术就不用《编译点滴》解释过多了吧。总之,你在看代码过程中,想到的问题,都是程序分析需要解决的问题。
   以上,就是Google工程师们列出的,他们感兴趣的一些编译技术。各位朋友请各取所需,并给出一些建议。
另外,想申请Google编译器相关实习生或者全职工作职位的,可以参考这个链接:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值