Intel软件大会(2011)归来
上周五下午去参加了intel的软件开发大会。我参加过去年的大会,那时候强调的是TBB,这次强调的是并行优化。
先是屠鹏先生介绍Cilk,不知道这门语言在业界怎么样,反正我是第一次了解。用cilk写出来的Fibonacci算法如下:
int fib(int n) {
if (n<2) return n;
int x = cilk_spawn fib(n-1);
int y = fib(n-2);
cilk_sync;
return x+y;
}
上面的cilk_spawn表示“指定的子函数可与父调用方法并行执行”,而cilk_sync表示“在所有衍生的子函数返回之前,控制不能通过这一点“,其实跟pthread里的pthread_creaet和pthread_join有点相似。
还有就是for循环:
for(int i=0; i<8; i++) {
do_work(i);
}
变成
cilk_for(int i=0; i<8; i) {
do_work(i);
}
这样就是cilk就可以把循环变成并行的,把do_work变成8个任务,分配给多个核。cilk还支持方便的矩阵运算。
这是并行计算里典型的“语言级”的解决方案,个人感觉相比TBB这类“库级”解决方案,平台兼容性和移植性会比较差。何况cilk的强项——矩阵运算/数值运算我在公司几乎从未遇到。
然后是一位仁兄演示Vtune的使用,客观的说,讲得有点琐碎,就看见鼠标飞舞,在界面上乱点,满屏红条条绿条条,眼晕。有空还是自己下载一个evaluation版来试用吧。
之后是一些优化案例,我才知道intel有一堆团队专门给大客户做应用程序的优化,想来这活儿八成比较枯燥,但是成就感应该还不错。
其中一个案例,用至强5600系列机器自带的一些指令来优化AES加密,给一个网游公司提速了不少;还可以用SSE指令来帮忙优化数据压缩的速度等,如下:
给我印象最深的是陈健先生的演讲,他的速度很快,思维敏捷。主讲内容摘录如下:
方法一:尽可能使用最新版的intel编译器
1. Intel c/c++ Composer 12.0
2. 使用编译选项
2.1 针对通用的性能优化:-O3 -fast
2.2 针对快速除法和开方:-no-prec-dev / -no-prec-sqrt
2.3 针对向量化: -xS, -xT(Core), -xP(NetBurst)
2.4 针对CacheMiss: -fno-alias
2.5 高级优化选项: -ip/-ipo -prof-gen/-prof-use
2.6 其它常用选项: -static -unroll(n) -recursive
方法二:尽可能使用最新版的Intel MKL数学库(10.3)
1. 由Intel资深工程师针对Intel硬件平台充分优化
2. 最大限度的避免了Cache Miss/Branch Miss Prediction等性能问题
3. 最大限度的使用了处理器内部的资源,比如SSE处理单元,64位扩展寄存器等
方法三:修改应用程序来辅助编译器优化程序
1. 通过Intel VTune Amplifier查看程序运行热点函数和热点代码段
呵呵,毕竟是以intel为主题的,不算是很通用的优化方法。
还在我刚工作的时候,我的一个头头就说希望能有一个像仪表盘的服务器监控系统,但是他也没有具体想法,因为如果一台机器就展示为一个仪表盘,那一百台,一千台当如何展示?如今陈健先生给了些启发,他强调:表盘也好,数字也好,都不如颜色给人的感觉直观,所以,干脆就让每一台机器都变成一个颜色块,颜色块里还分内存监控/CPU监控/硬盘监控等等,以不同颜色表示不同监控项,就比较直观了,虽然做不到一眼就看出每台机器的细节,但是一瞥之下找出运行不正常的机器还是很容易的。由于会场很暗,我只有一张不太清楚的照片:
那些绿快快里面还有很多细节,鼠标移上去会自动放大。确是不错的想法。
相关文章
- Intel软件技术大会(2010)归来 - 04 02, 2010
- 高效内存拷贝? - 11 13, 2009
- intel免费书 - 05 31, 2009
很万厉害的创意.