上篇文章前瞻-主流处理器中的数据并行支持(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都能从这里找到。

Continue reading »

 

概览SPEC

Standard Performance Evaluation Corporation:标准性能测试协会,一个致力于发布管理计算机性能标准化测试的组织.建立于1988年,会员包括Apple,Dell,IBM,Intel,Microsoft和Sun。Spec的测试例子被光感应用于计算机系统的性能测试中。

SPEC的测试例子是为了测试实际生活中的场景,如SPEC web2005通过并发HTTP请求测试web服务器的性能.SPEC CPU通过多个例子的运行时间长短衡量CPU的性能。SPEC的测试例子都采用平台无关代码编写,以便能使用各种编译器和平台来测试。现在的工业界更是针对SPEC中的测试例子做优化来证明编译器,CPU,web服务器等等的性能提升。

SPEC发布了以下性能测试集:

  • SPEC CPU2006/2000用来测试CPU,存储和编译器的性能
  • SPEC jms 2007,用于测试JAVA消息服务的性能
  • SPEC web 2005 用于测试PHP或者JSP的性能
  • SPEC Viewperf,用于测试OpenGL 3D图形系统的性能
  • SPEC apc,用于测试给定系统中多个3D交互应用的性能
  • SPEC OMP2001 使用OpenMP测试并行系统的性能
  • SPEC MPI2007 使用MPI测试并行系统的性能
  • SPEC JVM 2008,测试Java Runtime Environment(JAVA运行时环境,JRE)在不同客户和服务器系统上的JAVA性能
  • SPEC jAppServer2004, 测试JAVA 2 Enterprise Edition应用服务器的性能
  • SPEC jbb2005,同样测试JAVA系统的性能,但测试的是a three-tier client/server system (with emphasis on the middle tier)
  • SPEC Mail2001,测试邮件服务器的 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 »

 

emerge一个软件包时Portage的工作方式:
1,Portage下载源码tar包和补丁(如果需要的话)
2,Portage解压缩tar包到指定位置,所有的编译将在该目录展开,Portage默认使用/var/tmp/portage/packagename/work
3,解压和打补丁(如果需要的话)后(ebuild中的src_unpack()函数),Portage开始编译,一般情况下在特定目录(ebuild使用${WORKDIR}变量指定目录)下执行configure和make命令.
4,编译完成后,portage将所有指定目录下的文件合并到正在运行的系统中.(通常为/,但通过合并时设置ROOT=”/路径”可以修改),为了避免非法或不正确的ebuild对整个文件系统造成不可逆的破坏,我们需要严格限制文件系统的哪个区域允许portage在解压和编译时修改,这就是沙盘工作的路径,默认时,沙盘启动,并限定ebuild(和它执行过程中的明林)都在指定的区域内写磁盘.若ebuild越过沙盘保护的环境,试图在外部区域写磁盘,就构成了沙盘越界.
Continue reading »

 

注,这份表格并非本人整理,来自wwxu的邮件。

会议 会议全称 领域 William & Mary 列表 -2008 新加坡国立 列表 -1999 复旦列表-2008 篇均引用次数 大陆发表情况 3年投稿意愿 Abstract Deadline Full Paper Deadline Notification of decision
1. ASPLOS Architectural Support for Programming Languages and Operating Systems 体系结构 操作系统 编译技术 A+ Rank1 Rank1 39.1 1982年来尚未发表 2009-8-3 2009-8-10 2009-11-6
2. CGO International Symposium on Code Generation and Optimization 编译技术 A N/A Rank2 4.4 2009 ICT 2篇;国内公司 3篇 2009-9-3 2009-9-10 2009-11-11
3. DAC Design Automation Conference 电路设计 体系机构 测试技术 A Rank1 Rank1 8 1964年来发表9篇
2009-11-9
4. DATE Design, Automation and Test in Europe 电路设计 体系机构 测试技术 A Rank2 Rank2 2.48 1993年,约20篇
2010-1-15
5. DSN The 39th Annual IEEE/IFIP International Conference on Dependable Systems and Networks 可靠设计 体系机构 软件系统 A+ N/A Rank2 9.51 1970年5-6篇
2009-10-8
6. FSE International Symposium on Foundations of Software Engineering 软件工程 A Rank1 Rank1 10 08港科技06港科技2港城市1篇
2009-11-9 2010-1-6
7. HPCA International Symposium on High-Performance Computer Architecture 体系结构 A+ Rank1 Rank1 15.7 1995年来发表1篇 2009-7-24 2009-7-31 2009-10-10
8. ICCAD International Conference on Computer-Aided Design 电路设计 测试技术 A Rank1 N/A 9 1990年来发表6篇
2009-5-11
9. ICDCS IEEE Intl Conf on Distributed Comp Systems 分布式系统 A Rank2 Rank2 8.8 1981年来发表6篇
2009-11-25 2010-2-8
10. ICS The International Conference on Supercomputing 高性能计算 A Rank1 Rank2 9 1987年来4篇 2010-1-11 2010-1-18 2010-3-22
11. ISCA International Symposium on Computer Architecture 体系结构 A+ Rank1 Rank1 25.7 1973年来发表5篇 2009-7-10 2010-1-15 2010-2-15
12. ISLPED International Symposium on Low Power Electrical Design 低功耗体系结构 N/A N/A N/A



2010-3-5 2010-4-30
13. ITC International Test Conference 测试技术 A N/A N/A 2.86 1970年,9篇
2010-3-17 2010-6-22
14. MICRO International Symposium on Microarchitecture 体系结构 A+ Rank1 Rank1 15.3 1968年来发表9篇,1995年后尚未发表 2009-5-15 2009-5-22 2009-7-28
15. NSDI Symposium on Networked Systems, Design and Implementation
A N/A Rank1 13.5 2004年来尚未发表 2009-9-25 2009-10-2 2009-12-18
16. OOPSLA Conference on Object Oriented Programming Systems Languages and Applications 编译技术 A+ Rank1 Rank1 11.6 2007 香港; 2006 香港 2009-3-19 2009-3-23
17. OSDI Usenix Symposium on Operating Systems Design and Implementation 操作系统 A+ Rank1 Rank1 66.3 1994年来尚未发表(2008第二作者)
2010-3-7 2010-7-20
18. PACT IEEE Intl Conf on Parallel Architectures and Compilation Techniques 并行计算 A Rank1 Rank2 7.1 1997年来2篇 2010-3-20 2010-3-27
19. PLDI Conference on Programming Language Design and Implementation 编译技术 A+ Rank1 Rank1 38 08,07 清华2篇,05 ,04 Intel China 2篇,92 台湾 2009-11-13 2009-11-20 2010-2-2
20. PODC ACM Symp on Principles of Distributed Computing 分布式系统 A+ Rank1 Rank1 11.9 1982年以来尚未发表 2010-2-10 2010-2-17 2010-4-15
21. POPL Annual Symposium on Principles of Programming Languages 编译技术 A+ Rank1 Rank1 35.7 未定 2009-7-8 2009-7-15 2009-10-1
22. PPOPP ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming 高性能计算 A Rank1 Rank1 18.7 1988年来3篇 2009-7-17 2009-7-20 2009-9-18
23. RTSS The Real Time Systems Symposium 实时系统 A+ Rank1 Rank1 11.75 1979,5-6篇,香港比较多
2009-5-26
24. SAS IEEE Static Analysis Symposium 编译技术 A Rank2 N/A 8 07北大 2010-3-12 2010-3-19 2010-5-4
25. SC The International Conference for High Performance Computing, Networking, Storage and Analysis 高性能计算 N/A N/A Rank2 8.6 1988年来1篇 2009-4-3 2009-4-6 2009-6-29
26. SIGMETRICS Joint International Conference on Measurement and Modeling of Computer Systems 性能度量 A+ Rank1 Rank1 13 1973年来发表2篇 2009-11-2 2009-11-9 2010-2-9
27. SOSP ACM SIGOPS Symp on OS Principles 操作系统 A+ Rank1 Rank1 55.6 1967年来尚未发表 2009-3-2 2009-3-7 2009-6-15
28. SPAA ACM Symposium on Parallel Algorithms and Architectures 并行计算 A Rank1 Rank3 9.5 1989年来1篇
2010-1-13 2010-3-12
29. VTS VLSI Test Symposium 测试技术 A N/A N/A 2.89 1983年,6篇 2009-9-20 2009-9-30 2009-12-4
30. WWW International World Wide Web Conference 网络 A+ Rank 1 Rank 1 10.2 2009-10-26 2009-11-2 2010-1-21

 

读PLDI 04 Best Paper Award 《Automatically Proving the Correctness of Compiler Optimizations》
By Sorin Lerner.Todd Millstein and Craig Chambers in Washington U

本博自从接触编译器到现在,几乎都每天都能听到bug这个关键字,编译器中的bug很痛苦,首先,人写的程序很复杂,编译器设计者很难想出所有的情况并一并处理之;其次,编译器的bug很难调,要先排除程序本身的错,接着需要知道到底是分析时出错还是变换时出错;还有这些错都是在怎样的分析和变换中出了错;最后还要担心错误会不会越不越多,没有对编译器整体的理解,很难给编译器打上正确的补丁,从而有可能这个例子补对了,其他又错了一片.
作者在文章里就编译优化正确性的自动证明做了一些尝试,这些尝试在读完文章之后觉得很了不起,只是这里面提到的工作做下来,也是需要很大的积累和投入.作者的尝试我概括如下:将优化分为转换和具体优化两个部分.代码的转换是所有优化都要做的,而并非所有的转换都是优化,所以作者通过增加利益驱动模块来判断某个转换是否是优化,这样优化的自动证明问题,就变成了某个转换正确性的自动证明问题;正确性的定义:转换前后的语义保持不变.接着作者按照转换依据的信息来自转换语句之前还是之后,将转换分成两种模式,即前向转换模式和后向转换模式.然后分别对这两种模式进行讨论,而自动证明也分别针对这两种模式来论述. Continue reading »

 

今天听了一个博士师兄的论文答辩,试图提高分布式存储并行和共享存储并行中,循环中并行粒度。

分布式存储下的并行,可以简单的理解为片间的并行,集群,很多CPU的计算机中的并行都属于这一类,这类并行强调的是消息传递,因为每个计算单元都有自己的存储空间,且这些存储是相互独立的,靠消息传递的方式来维护存储一致性,这类程序通常使用MPI工具做并行程序开发。这种并行一般是进程之间的并行,每个进程都有独立的资源管理和消息收发,地址空间相互独立。

共享存储下的并行则不同,采用线程间的并行策略,即并行任务之间采用共享存储空间的形式,存储和资源都是共享的。这类并行多存在于现在流行的多核和众核系统中。主要面临的问题是一致性,缓存一致性是最主要的,因为多核系统通常是每个单核有一级cache,而多个核之间又共享二级或者三级cache,据说CPU上30%多的功耗都用在了维持一致性上。片上面积也一半多用来做了cache。OPENMP就是为共享存储而生的编程工具。 Continue reading »

 

先来介绍一下n32和O32是啥,N32和O32就是MIPS系统上不同的ABI,即Application Binary Interface。MIPS体系结构最早只有o32的系统,但后来改进了寄存器的功能和分配方式,于是就又有了N32,相对于O32,N32的速度更快些。但二者目前在龙芯系统上还无法兼容。因为龙芯目前官方只支持O32,而N32有只有zhllg的overlay中有,所以使用gentoo来安装O32的工具链需要额外解决些问题,所以才有了这篇文章,之所以之前又写了N32的安装方法,是因为有zhllg大牛的技术支持,使得能直接安装N32的工具链。 Continue reading »

 

传统的过程內分析,采用很保守的策略,假设所有对过程可见的变量都可能改变,并默认所有可能的操作都有副作用,因此过程內分析和优化非常简单。函数调用对于优化策略来说,隐藏了副作用的信息,虽然inline能够将副作用信息暴露给调用者,但这会大大增加代码量并降低指令局部性,而且并非所有的函数都能inline(如,对于不可预测副作用的函数)。过程间分析(InterProcedural Analysis)就应运而生,被用来作程序调用分析,能够处理inline不能处理的问题。删除不必要的函数调用,做指针和常数传播等。

IPA 提供了完全不同的策略,先分析过程內的信息,如别名和依赖关系,然后将这些信息在调用图(根据过程间的调用关系得到的图)中传播,然后就可以利用这些信息决定将函数特殊化,移除函数中的某些不可能经过的路径或者内联函数。通过这些分析,能降低编译器对存储依赖的不确定性。目前还很活跃的编译器都支持了过程间分析和优化,例如gcc -O3就能默认打开优化,open64可以使用-ipa打开,LLVM也有强大的链接时过程间优化,ICC也有。 Continue reading »

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

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