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 »

 

Pathscale刚刚发布了EKOPath4(http://www.pathscale.com/)

EKOPath4的新特性

  • Significant improvements in performance and robustness(性能健壮性)
  • Support for latest Intel® 64 & AMD64 processors(新处理器支持)
  • Support for SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, SSE4A & AVX(新SIMD扩展支持)
  • New C++ backend and GNU compatible runtime(新C++、GNU兼容的运行时库支持)
  • Complete implementation of C++ STL locale library(实现C++ STL本地库)
  • Reference counted basic_string using atomic locking
  • Thread-safety, including iostream and locale objects(线程安全提升)
  • Optimized exception handling(例外控制优化)
  • Optimized C and C++ debugging support(C/C++t调试支持优化)
  • More Fortran 2003 features(Fortran 2003支持)
  • Significantly improved IPA (inter-procedural analysis)(IPA分析提升)
  • Runtime improvements(运行时改进)
  • New PathAS assembler(新的PathAS汇编器)
  • Major overhaul of PathDB for better multi-core support
  • Hundreds of bug fixes and much more..

性能对比

高性能编译器最重要的是性能,Phoronix给出了针对某些例子的对比,EKOPath4.0的性能提升。如下,从这几个例子来看,EKOPath4.0的性能比GCC4.5高不少。

另外,Proronix也计划自己编译EKOPath编译器,并综合对比LLVM、EKOPath、GCC和Open64。《编译点滴》也会时刻关注,并第一时间刊登相关内容。

EKOPath4相关链接

  • 直接安装二进制版本Pathscale: http://c591116.r16.cf2.rackcdn.com/ekopath/nightly/Linux/ekopath-2011-06-12-installer.run
  • 编译器源码: git clone git://github.com/path64/compiler.git
  • 调试器(PathDB)源码  git clone git://github.com/path64/debugger.git

Pathscale简介

Pathscale是一家专注高性能编译器解决方案的公司,包括GPU和X86平台的高性能计算,以卖相关服务为主。CTO是Christopher Bergström。Fred Chow是技术方面的领导人。感兴趣的读者可以在#pathscale@freenode IRC上了解更多。 对于中国用户,Pathscale的CTO表示,如果感兴趣的人多,可以单独开#pathscale-cn频道服务,可以先在#pathscale IRC里和他说一声。   虽然EKOPath4自称开源,也的确能从上面的链接中找到编译器,调试器的源代码。但是也有人指出Pathscale一直承诺的开源兑现的力度很不够。下面的这段评论来自这里

Notes: Before continuing, yes, the open-sourcing of EKOPath 4 is what in recent days on Phoronix has been codenamed Dirndl as the results have been very impressive. Some Phoronix readers were sharp to figure it out within the forums and those following me on Twitter. Originally this open-source announcement was to happen two weeks ago, but since then there have been multiple delays for various reasons. While some Phoronix readers figured out EKOPath 4 was being open-sourced in advance, in some development circles this was already known for a number of days. Three weeks ago, Christopher Bergström (PathScale’s CTO), wrote to the Illumos development list and publicly dropped the EKOPath 4.0.10 binary and said "There will be a more broad and related announcement next week, but PathScale promises to continue providing EKOPath 4 as a free download for Solaris and family." On the Illumos IRC that day, the free EKOPath was again brought up. On a related note, back in April news broke that PathScale was working to develop a "CUDA killer" for the GPU. Back then it was promised it would be open-source and freely licensed.  

Open64和Pathscale的渊源

  • 2000年SGI将其 利用GPL协议MIPS Pro64编译器开源
  • 2001年University of Delaware 继续维护该编译器,并将其更名为Open64
  • 2001-2004年,计算所与Intel合作为安腾处理器基于Open64开发ORC项目,即Open Research Coompiler。
  • 2003年,Pathscale开始将该编译器移植到X86平台,并着手优化
  • 随后的几年里,Open64和Pathscale的代码相互移植了很多。
  • 最近,Pathscale升级到了GPLv3,而Open64还采用GPLv2,使得两者的代码越走越远
 

Intel Sandy Bridge微架构中,Intel引入了256SIMD扩展AVX,这套指令集在兼容原MMXSSESSE2128位整点SIMD支持的基础上,把支持的总向量数据宽度扩展成了256位。新增了若干条256位浮点SIMD指令。

昨天,Intel刚刚发布了AVX2指令集,这套指令集在AVX基础上做了扩展,不过要在2013年发布的Haswell处理器上才能支持。参考1给出了AVX2的详细特性。

Continue reading »

 

先看图

大肠杆菌和Linux系统的控制网络对比

大肠杆菌和Linux系统的控制网络对比

图片来自《科学松鼠会》,很棒的探索新知的网站:)

生物信息学里把DNA序列看成生物体的操作系统,这张图左侧是大肠杆菌的控制网络,右侧是Linux系统的。 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 »

 

距离GCC 4.4的发布一年之久,GNU终于发布GCC 4.5了。新版本带来了很多新特性,包括使用MPC库在编译时完成复杂的算术计算,C++0x支持增强,使用部分Graphite完成自动并行化,支持新的ARM处理器,Intel Atom优化和调优支持,以及AMD Orochi优化支持等。今年稍晚发布的Fedora 14,Ubuntu 10.10,OpenSUSE 11.3,都将有GCC4.5,估计Gentoo马上就会有支持了,磨拳擦掌准备试用喽:)详细支持如下:

总体说明:

  • 编译GCC需要MPC库
  • 故纸堆里的旧系统和很久没有更新和测试的系统在GCC4.5中被标记为待放弃,包括IRIX, Solaris 7, Tru64 UNIX V5.1.
  • GCC4.4中标记为待放弃的支持被放弃
  • 移除Itanium 1变种支持,但Itanium2编译的程序能在Itanium1上正确执行
  • GCC生成的调试信息包括了更多DWARF 3的特性,甚至包含了DWARF4的一些特性.GDB7.0之前的版本将无法使用这些特性.所以调试GCC4.5编译的程序需要使用GDB7.0及以上版本.也可以使用选项 -gdwarf-s  -gstrict-dwarf来禁止生成DWARF4信息,或者-gdwarf-2 -gstrict-dwarf让GCC严格执行DWARF2标准.
  • X86上,浮点运算在GCC4.5上使用严格C99语法编译时,可能会运行变慢。这是为了和标准一致,可以通过选项-fexcess-precision=fast来避免严格的标准限制。
  • noinline属性不再能阻止整个函数拷贝。但可以通过新的属性noclone做到。

Continue reading »

 

最近想折腾用texlive写点东西,而且要支持中文。就冲着texlive-2009了。大学毕业论文就是用latex写的,不过那是在Windoews下,用CTEX包,很是方便,Gentoo就有点不一样了。虽然texlive有自己的iso镜像,有自己的安装工具和包管理工具,但Gentoo还是将它拆分成了很多的packge来装。这样也好,比较灵活。

下面就开始吧。

首先是keywords和use,因为现在2009还不稳定,而我用的是x86就要增加一堆的keyword,如下:

app-text/texlive ~x86
app-text/texlive-core ~x86
dev-texlive/texlive-documentation-english ~x86
dev-texlive/texlive-documentation-base ~x86
dev-texlive/texlive-basic ~x86
dev-texlive/texlive-bibtexextra ~x86
dev-texlive/texlive-context ~x86 Continue reading »
 

大尾端(big endian)和小尾端(little endian)的问题类似于写字时是从右往左写还是从左往右写的问题。说起来不难,但是在计算机世界中,我们必须要规定采用哪种形式,而并无优劣之分,所以演变到现在,就既有大尾又有小尾.X86就是小尾的,龙芯也用的小尾,早期的MIPS使用的是大尾端,这决定了访存的方向问题。

精确的讲,大尾端和小尾端的区别是系统里整数是从右往左表示还是从左往右表示。表示的不同就意味着重要性不同的位位置不同,大尾端从左往右表示,那么权重大的字节在左边即在低地址处,而小尾端相反。不管时处理器,虚拟机还是网路协议都需要规定大小尾端问题。
如图是X86的存储形式,若大小尾端混用,则会一团糟。


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 »

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

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