上周六去参加了北京的2013年ARM开发者大会。说是大会,其实也就两百来人,不算特别多,我不是搞嵌入式的,参加是纯属好奇。
ARM
先是Allen Zhong做开场白,谈谈ARM开发者的机会。大意是世界范围内中产阶级增长迅速,80亿的世界人口里60亿有手机,这其中10亿是智能手机(去年的数据),所以ARM的技术用途很广泛市场很大,大家如果来学习ARM的开发一定有大把的工作机会,举“捕鱼达人”为例,已经月收入上千万了。(我个人觉得ARM虽然出货量大,但毕竟卖硬件利润低,走丰富软件的道路基本也正确,只是个人软件在国内要赚钱真的好难,用过flashget,netant的老网虫们应该明白我在说什么吧?靠谱的还真就剩在线游戏这类个人软件了)

后面讲解ARM在浏览器处理javascript里的优化,坦白说我没太听懂,过。彭晓波介绍了ARM的开发调试工具 DS-5,能出详细的性能profile图,举个例子:手机游戏开发常用的2D图形库是cocos2dx,用DS-5分析cocos2dx,发现其memcpy占了超过50%的CPU运行时间,后来发现是纹理处理方面的问题,改进后性能大涨(当然,高端智能手机感觉不到这个改进);DS-5还发现过Android的很多性能热点,都已经提给了Google。(会后每人发了件印着"DS-5“的T恤,结果今天文卿看到我的T恤就大喊,”啊,屌丝吾!“)

Neon是ARM下的SIMD指集,类似Intel的SSE系列,为了方便使用,做了个开源的C库叫Ne10,适合矩阵运算、图形处理一类的应用,据说可以把图像缩放加快2.6倍,“美图秀秀”就是用的Ne10。(erasure code的实现依赖于矩阵运算,不知用Ne10能否有帮助)

最后压轴的当然是宋宝华老师,介绍kernel里arm tree的变化。以前各个ARM板子代码相差极大,各有一摊,比如三星的s3c2410,以前学嵌入式的都不知道啥叫ARM,就知道s3c2410,更何况还有“友善之臂“这类公司的soc驱动根本进不了upstream的公司出的板子(听到“友善之臂”我笑了,连我这种从没搞过嵌入式的人都听说过这家公司,去年玩cubieboard没少长见识)。现在好了,合并了。不同arm板子的驱动和firmware归在一起,用类似配置文件来开关,现在一个kernel image就可以在不同的soc上boot起来。合并不同arm板子的驱动代码是社区做的重构,“生命在与运动,代码在于重构。重构是上进程序员每天的进行式.是一项工程而不是靠天份挥洒的艺术”,宋老师引用侯捷的话,颇为触动码农的心。
另外还有ARM的big.little策略:8个ARM核,其中四个是高性能高功耗的A15,另四个是低频率低功耗的A7,可以8个核一起用;也可以在4个高频核和4个低频核之间切换——计算任务小或者不做计算时将task迁移到4个A7核上,一旦计算任务变大,立刻切换到4个A15上,同时只能有4个核在跑。这一切换也是由kernel的CPU scheduler来支持的。
宋宝华

宋宝华老师声音洪亮、讲解清楚
后记:
回来后在网上查了一下“友善之臂”这家公司,哟,这名字居然是从著名的单机游戏《博得之门》里来的,真是勾起我久远的回忆,遥想03年我第一次玩《博得之门》,那真是全身心的投入啊......这公司名字起得好。