估计很多朋友都关注到了,LLVM 终于发布了3.0版本,这个版本有哪些新的变化呢?我们先从三个大的特性看起。
start_kernel is the first function that kernel runs, like the main function in user space program.
In this post, I will try to get a detailed understand of how start_kernel is called on X86_64 and MIPS architecture. Continue reading »
发信人: css5200 (css), 信区: CSArch
标 题: 北京龙芯中科技术服务有限公司招聘
发信站: 水木社区 (Fri Jul 9 11:14:05 2010), 站内
招聘职位:Java虚拟机开发工程师
工作地点:北京
专业要求:计算机或电子等相关专业
学历:本科
职责范围:
Java虚拟机移植、调试与性能优化。
职位要求:
1、计算机或电子等相关专业本科及以上学历
2、英文较好,4 级以上或口语优秀者优先
3、熟悉操作系统、处理器架构基本工作原理,熟悉MIPS架构者优先
4、具有Java应用程序的开发经验
5、熟悉Jdk的工作原理,熟悉OpenJdk的代码结构,有Java虚拟机相关开发移植工作者优先
6、熟悉Linux操作系统,熟悉Linux源代码
7、较强的C/C++/Java 、汇编编程能力,有丰富编程经验
8、具有软件工程基本思想和素质,编程习惯、风格良好
9、有上述技术项目应用经验者优先
10、具有良好的沟通能力和团队合作精神,责任心强,积极主动,学习能力强
有意者发送简历至 caisongsong@loongson.cn
–
※ 来源:·水木社区 http://newsmth.net·[FROM: 159.226.43.*]
缘起:写这篇文章因为报名参加了龙芯开源软件大赛,项目是《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 »
上篇文章《前瞻-主流处理器中的数据并行支持(SIMD)>和《前瞻-拿起SIMD的武器I》分别介绍了当今主流CPU中的SIMD扩展 ,以及前人是如何利用SIMD来做优化的,本文<前瞻-拿起SIMD的武器II>将探讨如何使用CPU的向量指令为程序做优化
如何实现?
编程环境
在现在CPU设计中都加入SIMD扩展并不是解决应用性能问题的好方法。如果没有很好的利用途径,再强大的SIMD扩展指令集都是徒劳。接下来,我们从编译器技术和编程方法论上探讨如何使用SIMD指令来实现应用加速。 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都能从这里找到。
2010年美国高校计算机系排行榜出炉–《U.S. News》公布了新一期美国大学计算机系实力排名。前四:卡内基-梅隆大学(CMU)、麻省理工学院(MIT)、斯坦福大学(Stanford U)和加州大学伯克利分校(UC Berkely).
Continue reading »
大尾端(big endian)和小尾端(little endian)的问题类似于写字时是从右往左写还是从左往右写的问题。说起来不难,但是在计算机世界中,我们必须要规定采用哪种形式,而并无优劣之分,所以演变到现在,就既有大尾又有小尾.X86就是小尾的,龙芯也用的小尾,早期的MIPS使用的是大尾端,这决定了访存的方向问题。
精确的讲,大尾端和小尾端的区别是系统里整数是从右往左表示还是从左往右表示。表示的不同就意味着重要性不同的位位置不同,大尾端从左往右表示,那么权重大的字节在左边即在低地址处,而小尾端相反。不管时处理器,虚拟机还是网路协议都需要规定大小尾端问题。
如图是X86的存储形式,若大小尾端混用,则会一团糟。
本博在实际工作中,经常被MIPS I,MIPS II,MIPS 32之类的名词搞混,特整理如下。
MIPS 最初是Microprocessor without Interlocked Pipeline Stages的简称,最早由MIPS公司开发的精简指令集组成,最早是32位,之后时64位。该指令集有很多版本,包括MIPS I,MIPS II ,MIPS III, MIPS IV, MIPS V ,MIPS32和MIPS64.当前主要有MIPS32和MIPS64,这两个指令集定义了一个控制寄存器和指令集。
大学里多使用MIPS结构教学,Alpha就深受MIPS 精简指令集的影响。目前的MIPS之用用在很多嵌入式系统中如Windows CE设备,路由器,网关和游戏机(PS,PSP).
MIPS结构最早由斯坦福大学的John L. Hennessy(量化研究的作者)领导设计,初衷是充分利用指令流水线。除了采用流水线,以及充分利用流水线外,MIPS还引入了寄存器窗口技术(register windows),通过这种窗口,被调用函数能申请自己的寄存器集,再利用精确的编译器计算,就能找到空闲寄存器,不必依赖硬件实现。这种方式能提升性能。
目前的MIPS 32基于MIPS II并吸收了MIPS III, MIPS IV和MIPS V的特性,MIPS64则是基于MIPS V。MIPS V主要是用来提升3D图形应用的性能。
龙芯2E/F兼容 64位MIPS III指令系统,四发射。龙芯3号则是直接MIPS 64,也就是说增加3D加速。
参考:
http://en.wikipedia.org/wiki/MIPS_architecture
http://www.tektalk.org/2009/06/24/%E9%BE%99%E8%8A%AFcpu%EF%BC%8813%EF%BC%89%E2%80%93%E9%BE%99%E8%8A%AF%E8%8E%B7mips%E6%AD%A3%E5%BC%8F%E6%8E%88%E6%9D%83/


近期评论