标签归档:后端
Open64中的自动向量化支持
Open64中的自动向量化通过选项-LNO:simd=(0|1|2)控制。该选项告诉编译器使用后端支持的SIMD指令来向量化循环。向量化的支持分成3个级别: 级别0时编译器不进行向量化; 级别1时,编译器仅在没有因使用非最佳对齐策略导致性能下降,而且不会出现浮点运算不精确的情况下做向量化; 级别2时,编译器会做最激进的向量化。默认的选项是-LNO:simd=1
前瞻-LLVM大事记(2004-2010)
因为之前的两篇博文前瞻-全时优化和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都能从这里找到。
关于《编译点滴》的定位和未来
独立博客该有点什么,该写点什么,在编译点滴建站接近半年的后,忽然间有点迷茫。编译点滴该放点什么东西,博客该记录点什么,什么是该记录的,什么不该记录。虽然概括之就是自己觉得好的都能往上放。 看看现在博客里的文档,太散太杂。虽然刚刚建博的时候,很是花了一些心思写文章,找主题。但到博客的界面主题倒是换了不少,但内容实在是有点对不起观众。高达70%的跳出率说明了一切:) 幸好无意中看到了一个博客,观摩了半天后,对《编译点滴》的未来有了些想法。顺便推荐这个博客《我爱自然语言处理》。作者很用心的写了很多和自然语言处理相关的文章。博客文章很系统,自成体系。
好大一筐梅普斯(MIPS)
本博在实际工作中,经常被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加速。 参考: … 继续阅读
反汇编器和汇编器
反汇编器和汇编器是两个互逆的过程,后者将汇编源文件转换为机器码,前者将机器码转换成汇编语言。 汇编器通过将汇编指令符号转换为opcode和解析符号名为存储位置的形式创建目标代码,该目标代码就是机器码.其中符号解析是汇编器的关键部分.很多汇编器还提供宏支持来方便文本替换.相对于高层语言的编译器,汇编器简单很多.最早的汇编器出现在20世纪50年代,很多现代汇编其器都支持指令调度优化.Linux下使用最频繁的汇编器是gas,Gnu Assembler,因为它是GCC的默认后端,是Binutils的一部分。 反汇编器的输出通常是可读的汇编码格式,因此它时反向工程的重要工具。通常汇编语言允许常数和注释,但是在生成机器码时这些信息通常被删除,所以,在机器码上的反汇编操作只能产生无常数和注释的汇编码,所以程序员很难读懂,也很难转换为原来的高级代码。现在也有些编译器通过使用符号调试信息和交互式允许用户为特定区域的代码和值使用符号代替的方式来增强可读性。现在常见的反汇编器有:各种调试器都包含反汇编器,如GNU Binutils中的objdump就是gdb的交互式反汇编器,其他的还有PVDasm,一个支持多CPU反汇编器,OllyDbg–32位汇编级分析调试器,ILDASM–.NET Framework SDK中,用来反汇编PE文件等等 参考: http://en.wikipedia.org/wiki/Assembly_language#Assembler http://en.wikipedia.org/wiki/GNU_Assembler http://en.wikipedia.org/wiki/Disassembler
