SOURCE: https://jobs.qualcomm.com/public/jobDetails.xhtml?requisitionId=1887529&page=jobSearch

Division Qualcomm CDMA Technology
Job Area Engineering – Software
Location California – San Diego
Job Function The JIT compiler and Virtual Machines team in the Web Technologies group at Qualcomm Innovation Center focuses on development and optimization of software virtual machines (both interpreter and JIT compiler based), for languages like Java, JavaScript, Action Script, etc, commonly used in Web Browsers, for Qualcomms various MSM platforms. This role requires the following essential duties and responsibilities:

  • Research, design, develop, enhance, and implement the different components of the software in a virtual machine by efficiently utilizing/interfacing the HW in Qualcomms SOCs, leading to optimized performance, power, memory usage, and user experience.
  • Collaborate with chipset architecture and hardware engineers, and come up with software solutions best suited for Qualcomms SOCs.
  • Develop and execute benchmark and test scenarios for the virtual machines based on the different use-cases in a web browser.
  • Work with Product and Systems teams to understand and improve the design and working of the software involved in the virtual machines.
  • Analyze and identify system level integration issues, interface with the browser integration and test teams.
  • Follow Qualcomms open source design practices
  • Keep up with the web technology landscape (HTML5, CSS, JavaScript, etc) and help drive design aspects of Qualcomm CDMA Technology’s (QCT) chipsets necessary for supporting these technologies
  • Plan and integrate new features into the software for virtual machines based on open web standards such as W3C and the language standards (e.g. ECMA for JavaScript).
Skills/Experience
  • Experience in compiler development – compiler intermediate representations, machine independent and machine dependent optimizations, instruction selection, scheduling, register-allocation, back-end optimizations.
  • Working knowledge of Operating System concepts, process/thread, memory management, garbage collection algorithms, threads scheduling.
  • Working knowledge of assemblers, linkers, loaders, object file formats, instruction set simulators and experience using them.
  • Knowledge of the structure & function of the virtual machine internals byte-code formats, heap, constant pool resolution, garbage collection, execution mechanisms, etc.
  • Understanding of the compilation challenges and potential solutions for languages like Java (e.g., dynamic dispatch, polymorphism, inline caching) and JavaScript (e.g., dynamic types, dynamic addition/deletion of properties/values to objects, prototype based inheritance).
  • Knowledge of computer architectures – pipeline structure & hazards, cache & memory organization, etc.
  • Knowledge of the software architecture and internals of a web browser, JavaScript to Webkit bindings, JavaScript engines interaction with DOM and Plugins.
  • Strong background in embedded software development, experience in assembly language programming and optimization.
  • 5 to 10 years of programming experience in C/C++.
  • Should have exposure to large scale software build, integration and test environments
  • Strong communication and interpersonal skills required
Responsibilities
  • Knowledge and experience in Android or Chrome OS mobile platforms.
  • ARM architecture knowledge and assembly code optimization experience.
  • Experience with scripting languages used in build systems and hands-on experience on debugging embedded systems.
  • Experience with JTAG and ICE debuggers
Education Requirements Masters degree in Computer Science, Computer Engineering or related field, with experience in the technical domain. PhD degree and research work in the related technical area also encouraged. Candidates close to graduating with Masters or PhD in Computer Science/Engineering with project experience in the technical area can also apply.
 

自从龙芯N32系统上的Squirrelfish性能发布后,得到了很多朋友的支持,汇报最新进展:

  1. webkit-龙移植优化小组成立,dancefish和philip兄加入。dancefish兄对webkit在嵌入式系统上的移植和裁剪经验丰富,philip兄对webkit在andorid系统下的编译调试也有丰富经验。几番邮件交流之后,根据个人的兴趣爱好和实际工作,大致分了一下,dancefish和philip侧重webkit中的webcore部分,以及浏览器的验证。我将侧重JavaScript部分的JIT。这个分工只是大致而已。大家都是凭自己的热心兴趣在做。 Continue reading »
 

缘起:写这篇文章因为报名参加了龙芯开源软件大赛,项目是《Webkit-龙》,把webkit移植到龙芯N32系统上,起初是想做chromium的移植。但在起步的过程中,发现一是Google的V8引擎,对mips的支持基本处于不可用状态,而且chromium为了追求性能,使用的方式太过灵巧,如Native client(Google的野心–Native Client+LLVM),凭自己的一己之力,靠业余时间,很难完成,只好先做webkit了。

Squirrelfish 是Webkit的Javascript引擎。针对龙芯平台(MIPS)已经有了JIT支持,但仅仅对O32系统才有,本博曾经介绍过相关内容(WebKit和Firefox的JavaScript性能对比)。 Continue reading »

 

认识Native Client

Native Client (Nacl) 是Google提出的一种让浏览器直接运行机器码的技术,让Web应用可以从客户机上获得更多的性能,同时又不会引起安全问题。这个技术类似于微软的ActiveX。程序员可以使用C++或者其他语言编写web应用程序,再通过Nacl发布。程序中可以调用一些系统服务中安全的API,如声卡或者图形显示等。Nacl能使用的本地系统调用都是已经规定好的,所以安全性有保证。这篇文章介绍如何使用Native Client。 Continue reading »

 

因为之前的两篇博文前瞻-全时优化和LLVM-1前瞻-全时优化和LLVM-2都是基于Chris Lattner 2004年发表在CGO的文章写的。所以需要介绍一下LLVM从2004到2010这六年的变化,LLVM的开发社区很活跃。

从2004年三月到2010年4月,LLVM共发布了1.2-1.9,2.0-2.7,16个版本,至少每年发布两个版本。详细的历史发布版本和release都能从这里找到。

Continue reading »

 

上篇文章,以论文为主要依据,介绍了LLVM的概况和中间表示,本篇关注论文的后半部分内容–架构设计和LLVM的整体评测:

LLVM的架构设计:

总览

LLVM的架构设计以让传统的链接时,安装时,运行时和空闲时代码转换都能透明地在LLVM中间表示上展开为目的。上图就是LLVM的高层设计架构。包括静态的编译器前端用于生成LLVM中间表示;连接器用于做连接时优化,尤其是过程间优化。连接器的输出被JIT或者机器代码生成器生成机器代码。在机器代码生成时,可以通过插入低代价的抽样指令来测量运行时的profile,检测热代码,并将空闲时进行优化。

Continue reading »

 

读论文<LLVM: A Compilation Framework for Lifelong Program Analysis & Transformation> CGO 04

1,写在前面的话

全时优化(LifeLong Optimization)对于每个编译爱好者来说,太有魅力了。我在起初也是被这个题目所吸引打算一探究竟。本文是04年LLVM的最早两位开发者Chris Lattner和Vikram Adve所写,发表在04年的CGO上,

先来说说LLVM的历史。2000年LLVM开始开发,2005年Apple雇了Chris Lattner,LLVM也相当于成了Apple的官方支持的编译器。Apple已经将它用在OpenCL的流水线优化,Xcode已经能使用llvm-gcc编译代码。可以说05年之前LLVM一直都是学术界的东西,05年之后用于工业界.而这篇文章写在04年.本博最近听过一个关于LLVM的讨论会,会中有资深人士提到LLVM现在越来越像一个普通的编译器。说这番话的意思是,我们可以从这篇文章里找到LLVM的架构设计和早期的一些实现思想,但请不要迷信LLVM现在有多么神奇,每个架构都会有它的优缺点。

这篇文章,我现在已经读完了理论和介绍部分,性能评测部分还没有读。所以标题里面加了个1,因为接下来,还想作几件事,一是读完文章,二是跟踪一下Chris Lattner最近几年的文章,三是尝试将Open64和LLVM做个对比,最后看看代码。所以敬请期待之后的系列文章。
Continue reading »

 

严格的说WebKit仅仅是个浏览器核心,采用该核心的浏览器很多,如国内的搜狗浏览器,遨游浏览器。其他的如google的chrome(Windows平台,linux平台下为chromium),epiphany(linux平台下,gnome2.28版本之后),苹果的Safari 都采用了webkit的内核。Firefox则是采用Gecko的内核,这是NetScape公司开发的内核,后来开源,mozilla继续开发。另外,现在还有另外两种常见的浏览器内核,Trident主要用在IE系列上,Presto主要用在Opera上。

这篇文章仅仅针对浏览器处理JavaScript的性能作比较,主要在X86平台和龙芯平台。先来解释一下JavaScript,JavaScript是互联网内较为常用的脚本语言,面向对象,主要在浏览器内解释执行,用于生成动态网页,因为很多语言特性受Java影响,所以叫JavaScript。通过JavaScript,浏览器可以运行服务器想要在访问者终端上运行的一些计算程序,以达到更好的浏览体验。 Continue reading »

 
  • 啥是nanojit?

Javascript的JIT后端,原先firefox直接使用javascript解释器,效率比较低。nanojit可以将频繁执行的javascript代码直接翻译为机器码执行,效率更高,性能更好。详细的介绍可以参看这篇文章:an overview of TraceMonkey,  (我是中国人,我要看中文 ).本博还有一篇英文介绍,自己的蹩脚英语拙作。确实闲着无聊可以猛击这里

  • 咋又蹦出来个tracemonkey?

这得先从spidermonkey说起,spidermonkey是firefox里的Javascprit解释器。因为增加了Nanojit,这种通过跟踪(trace)热JAVAscript代码的JIT。所以改名叫tracemonkey。

  • 我只关心这个firefox!

那就从这个地址下载吧,firefox_release.mips1-1_mipsel.deb. 下载之后切换到root帐号或者直接执行。注意目前Nanojit只测试了O32的龙芯,龙芯默认的操作系统和其他Debian衍生系统都能使用(目前测试了debian-en和Rays,没有问题).目前2E和2F的机器都能使用。N32的gentoo系统还不支持。 Continue reading »

 

SpiderMonkey is the JavaScript VM embedded in Mozilla firefox . TraceMonkey is a  scheme in SpiderMonkey to turn some JavaScript hot code to native instructions in order to make it run fast. It was been developed by Andreas Gal etc in mozilla and the paper about it was published on PLDI,2009. The paper was named :Trace-based Just-in-Time Type Specialization for Dynamic Languages.

TraceMonkey simply identifies loop back edges and do the optimization only on loops.  every loop back edge is a potential trace point.The loop becomes hot on its second iteration,so TraceMonkey records the code along the trace in a low-level compiler intermediate representation LIR(In Nanojit, LIR is the source language for compilation to machine code. LIR stands for low-level intermediate representation.) .TraceMonkey stops recording when execution returns to the loop header or exits the loop.After recording is finished,TraceMonkey compiles the trace to native code using the recorded type information for optimization.These code can be entered if the interpreter PC and the types of values match those observed when trace recording was started. Continue reading »

2009-2011© 编译点滴 Suffusion theme by Sayontan Sinha

无觅相关文章插件,快速提升流量