2012年9月9日参加中国软件开发者大会学习笔记
全文请访问: http://bbs.hpx-party.org/thread-74667-1-1.html
欢迎转发新浪微博: http://weibo.com/1689646705/yBhcSsHMN
欢迎转发腾讯微博: http://t.qq.com/p/t/80701062295897
2012年9月8日参加中国软件开发者大会学习笔记第一天
全文请访问: http://bbs.hpx-party.org/thread-73728-1-1.html
欢迎转发新浪微博: http://weibo.com/1689646705/yAYwSaofl
欢迎转发腾讯微博: http://t.qq.com/p/t/130676054647468
今天有幸受邀参加CSDN( http://csdn.net 新浪微博@CSDN http://e.weibo.com/csdn 腾讯微博@csdnnews http://t.qq.com/csdnnews)主办的SDCC中国软件开发者大会( http://sdcc.csdn.net )。第二天的会议安排得很充实,我在台下也是来不及详细思考,用手机发微博做了几条笔记,不及万一,加上还能记得的一些内容,整理一下,与各位同仁分享,
http://weibo.com/1689646705/yB2xQEhKm
第一天记了很多笔记,晚上忙着整理笔记了,第二天会议的早晨起来晚了,忘带牌了,只好微博求牌,感谢CSDN蒋总在微博上转发(新浪微博@蒋涛CSDN http://weibo.com/csdncto 腾讯微博@蒋涛CSDN http://t.qq.com/csdncto ),感谢CSDN付江专程跑过来给我送来一张牌(新浪微博@CSDN付江 http://weibo.com/fujiang2010 )。
第二天的讲座分专题,有些场次太深奥,怕我自己听不懂,因此选择了上午参加《主题论坛五:编程语言》和下午参加《主题论坛七:异构计算》。下面写一下这些场次场次的笔记整理,回忆的内容难免讲师本意有出入,敬请斧正。笔记中也写了一些本人的观点,才疏学浅,敬请指正。
上午《主题论坛五:编程语言》第一场听创新工场( http://www.chuangxin.com/ 新浪微博@创新工场微招聘 http://e.weibo.com/iwrecruiting 腾讯微博@创新工场 http://t.qq.com/chuangxin )首席布道师蔡学镛先生(新浪微博@蔡学镛 http://weibo.com/rebol )的主题演讲“认识Google Dart语言”
http://weibo.com/1689646705/yB2EW6bbo
http://t.qq.com/p/t/114836126646823
Google Dart编程语言。Chromium with Dart VM称为Dartium。Dart2JS编译器,pub Package Manager,部署与代码分析工具。Dart程序运行的三种形式,编译成JavaScript、直接在Dart VM中运行、编译成Dart Snatshot。第三种不需要解析、不需要加载。
http://weibo.com/1689646705/yB2GU96be
http://t.qq.com/p/t/144119051187316
Dart后台工程师,Dart前端工程师,Dart手机程序员。期待点:Dart发布1.0,Chrome支持Dart,Android支持Dart。为了Web重新发明Java。
Snapshot帮助速度提升10倍,Tree-shaking减少生成不必要的代码。但这两点是矛盾的。为什么?比如生产力和扩容能力在开发,运行速度和起始速度都在运行上,兼容与现有的浏览器也是运行方面。但后两者一定会有冲突。
比较了Dart和CoffeeScript,要考虑生产力、扩充能力、运行速度等方面。想兼容浏览器环境,习惯函数式编程,则CoffeeScript比较好。不考虑兼容浏览器,Dart比较好,因为Dart采用自己的虚拟机。
我对于Dart完全不懂,不过我不看好一种高级语言编译成另一种高级语言的方法,无论是Dart编译成JavaScript,还是CoffeeScript。我认为高级语言编译成C,或者编译成汇编(例如JVM汇编,后面有一场讲座专门讲JVM上的多语言,.MSIL汇编,或者机器码汇编)在体系架构上是清晰的,但是高级语言编译成高级语言就不那么清晰了。
上午《主题论坛五:编程语言》第二场听淘宝( http://taobao.com 新浪微博@淘宝网 http://e.weibo.com/taobao 腾讯微博@淘宝网 http://t.qq.com/taobao )数据平台产品部资深前端开发工程师田永强先生(新浪微博@朴灵 http://weibo.com/shyvo 腾讯微博@aidyll http://t.qq.com/aidyll )的主题演讲“全JavaScript堆栈产品的经验分享—Node的核心与红利”
http://weibo.com/1689646705/yB2KU3S4p
http://t.qq.com/p/t/149619049640088
先讲历史,崛起,拥抱开源。淘宝指数:一站式JavaScript体验。jQuery、express、Connect等等。市面上的误解。今天看到的:C+Scheme+Self+Java。JavaScript的拐点:原型链,函数式编程。最早的ServerSide:LiveWire @1996年
http://weibo.com/1689646705/yB2OT6mnt
http://t.qq.com/p/t/27494089003619
第二次浏览器大战开始了,Web 2.0。第二个拐点:JavaScript引擎性能大幅提升。JavaScript严重依赖浏览器。CommonJS诞生了:JavaScript anywhere,规范指导了JavaScript大规模编程。2009年发明Node.js:需要高性能的Web Server。Web Server也在发展
http://weibo.com/1689646705/yB2S6y06b
http://t.qq.com/p/t/124795088527941
Ryan选择。拐点的作用:V8,JavaScript在服务端基本是空白,事件驱动,CommonJS给予结构化指导。Node.JS的成果:高性能Web服务器->平台。性能逊于Nginx,但Nginx仅是Web Server,而Node.JS可以面向各个业务方向。拐点5:引入异步到业务层。云时代并行的重要性
http://weibo.com/1689646705/yB2VyaRkl
http://t.qq.com/p/t/75415011956652
V8+异步。node.JS是有瑕的。Node Packaged Modules有14576包,每天下载量50万,解决方案比问题还多的技术社区!github上最火的社区JavaScript 20%。因果循环,CommonJS->NodeJS->NPM。V8->NodeJS。官方NPM->本地NPM->项目->开源项目。拐点6:生态系统的形成
我对于Node.JS也是完全不懂,不过我认为在服务端JavaScript历史上还是应该提一下微软的ASP
上午《主题论坛五:编程语言》第三场听39健康网( http://www.39.net 新浪微博@39健康网 http://e.weibo.com/39health 腾讯微博@@healthyworld39 http://t.qq.com/healthyworld39 )技术副总监邢兴先生的主题演讲“Go语言在PHP Web开发中的实践”
http://weibo.com/1689646705/yB36672DB
http://t.qq.com/p/t/70465120270908
Web应用的典型技术架构,PHP的迷思,毫无新意的Go。Web应用的典型技术架构;CDN,Cache,Logical Service,Database,Search Engine。PHP的迷思:没有内建的并行机制,同步机制会扩散异常。MQ,RabbitMQ,Gearman
http://weibo.com/1689646705/yB3bRjIFw
http://t.qq.com/p/t/132677025730951
Go,编译为本地机器码,静态类型,简单的语法:类型推导,简明类型系统,垃圾收集(有争议),内建并行支持。goroutine channel保证内建的并行机制,requester->balancer->worker。之前用Gearman实现异步,Agent,output channel,working loop,input channel
http://weibo.com/1689646705/yB3gCv2Dl
http://t.qq.com/p/t/70965131109337
CombineRPC,消息队列。AsyncCall,RPC goroutine,channel select先到先得(目前没有实现超时机制)。Gearman-Go、CombineRPC、GoEmPHP都已发布为开源项目
我对于Go也是完全不懂.之前在工作中了遇到了类似的PHP没有内建的并行机制的问题,最后还是选择Gearman,不过没有考虑这么多因素。
上午《主题论坛五:编程语言》第四场听Oracle甲骨文( http://oracle.com 新浪微博@甲骨文中国 http://e.weibo.com/oraclechina 腾讯微博@oraclechina http://t.qq.com/oraclechina )JVM编译器团队工程师莫枢先生(新浪微博@RednaxelaFX http://weibo.com/rednaxelafx )的主题演讲“JVM——多语言的平台”
http://weibo.com/1689646705/yB3o003ZI
http://t.qq.com/p/t/49982000900727
上午最后一场JVM。以公司的免责声明开始。除了Java还有很多语言在JVM上实现,在实现一门编程语言时,语法是最容易的部分;类型系统,并发模型,安全模型更重要。为什么创造语言:编程语言可以实现不同的语言,实现库,并包装成语法;库不能限制语言本身的功能
http://weibo.com/1689646705/yB3uEcJmf
http://t.qq.com/p/t/126295112246989
为什么用JVM?线程支持,内存管理,跨平台。为什么Java?健壮,反射,工具丰富,等等。IDE:NetBeans,Eclipse,IntelliJIDEA;ANTLR。在JVM上开发编程语言的步骤:语法,语义(ASM库,dynalink库),底层细节。增加间阶层唯一不能解决间阶层太多的问题
我听到“增加间阶层唯一不能解决间阶层太多的问题”非常有共鸣,近几年“做框架”似乎成了程序员的目标,很多程序员都有着一种自己不发明一个框架就不好意思和别人打招呼的心理,不过框架套框架所引起的问题就被忽视了
http://weibo.com/1689646705/yB3BylWRj
http://t.qq.com/p/t/132177041292240
TailCalls:VM支持,不是所有的尾调用都能方便的优化,常见于函数式语言;期望共用一个栈针,模拟伪递归循环的方式处理,例如Scala。Coroutines:多入口,多出口;例如生产者、消费者模型;模拟实现,可以使用线程模拟;有限状态自动机模拟实现
我觉得TailCalls即是一个老问题,从C语言的年代就在讨论的问题;TailCalls又是一个新问题,从虚拟机的角度来说,有足够的能力把TailCalls做成虚拟机的特性,从并行计算的角度来说,TailCalls非常适合并行计算的编程方式,而且大量的不需要的栈信息也浪费并行计算的VM。
http://weibo.com/1689646705/yB3I8qm0U
http://t.qq.com/p/t/57472080534843
引用计数,某些语言借助引用计数实现一些语言特征,Python在JVM上的Jython就没有引用计数。JDK7中主要增加动态语言的支持,Method Handle提供比反射轻量的调用。未来JDK8会在实现方面有进一步的调整。制定规范最困难
我给其他人讲解编程语言的区别时,会讲到运行时环境(虚拟机)的内存管理方式,比如说Perl的标量值指针,PHP的类似于SmartPtr的引用方式,以VB为代表的RC引用计数,以Java .net为代表的GC垃圾回收,其中我会特意讲到PHP的内存管理在复杂场景中有缺陷,以及VB的引用计数死锁,不过没有特别留意到借助于引用计数来实现一些语言特性的情况。
下午《主题论坛七:异构计算》第一场听ARM( http://www.arm.com 新浪微博@ARM中国 http://e.weibo.com/armcn )事业开发经理蔡武男先生的主题演讲“异构计算—以ARM架构为例”
ARM的开发经理蔡武男(Alan Tsai)分享了ARM架构对异构计算最新动作,主题演讲的英文名称为“Heterogeneous Computing in ARM architecture”
http://weibo.com/1689646705/yB4bC31Fg
http://t.qq.com/p/t/88466015998636
#异构计算#下午第一场ARM。目前的设备本身就是并行计算,GPU的成长速度远远超过CPU。两种并行,任务并行计算,数据并行计算。CPU擅长任务并行计算,GPU擅长数据并行计算(本来就是)
http://weibo.com/1689646705/yB4po2pAR
http://t.qq.com/p/t/90466022511488
数据并行计算之间没有太大的关联。Mobile和Desktop上的带宽差别很大,Mobile共用同一个带宽。计算容易,搬迁很难,目前有一半的运算耗费在内存搬迁上,异构计算就是在尝试解决这个问题
介绍了Mali系列最新产品ARM新一代GPU Mali-T600,探讨在ARM架构下CPU及GPU协同计算的架构设计,如何把现有的处理器中的GPU更好的利用就成为异构计算当下最实际的价值
我对于这个话题是完全不懂
下午《主题论坛七:异构计算》第二场听Adobe( http://adobe.com 新浪微博@Adobe中国官方微博 http://e.weibo.com/adobechina )平台技术推广经理马鉴先生(新浪微博@7yue http://weibo.com/7yue 腾讯微博@Zerlot http://t.qq.com/Zerlot )的主题演讲“Flash Stage3D助力新一代页游”
http://weibo.com/1689646705/yB4u4cQK1
http://t.qq.com/p/t/94453026437921
异构计算第二场Flash stage3D,未来Flash改成Air打包生成。目前全球70%的Webgame使用Flash。Stage3D可以让Flash播放器直接调用GPU。AS3 Framework->Stage3D->GPU。为什么引入Stage3D:Web3D应用数量增加,复杂程度攀升,性能要求越来越高,继续借助硬件加速
Adobe将大力推广Stage3D,通过它在浏览器中不仅可以对视频、2D进行加速,未来还可以实现像《战争机器》一样的大型3D游戏。
http://weibo.com/1689646705/yB4EEc4M0
http://t.qq.com/p/t/135177082923468
Unreal支持未来输出Flash。Stage3D工作流:高级3D开发者。Stage3D在2D中同样使用:愤怒的小鸟,一款宝石消除游戏。2D UI和3D混合现实。Stage3D普及率:11.0支持09年以后的显卡,11.2支持08年以后的显卡,11.4支持06年以后的显卡,甚至继承显卡。Adobe只做底层
我之前虽然也出版过三本Flash相关图书,不过也是近十年前的事情了,今天听了演讲发现自己是完全不懂
下午《主题论坛七:异构计算》第三场听Mozilla( http://firefox.com.cn 新浪微博@火狐 http://e.weibo.com/firefox 腾讯微博@mozilla_firefox http://e.t.qq.com/mozilla_firefox )资深软件工程师张云龙先生的主题演讲“HTML5解密”
http://weibo.com/1689646705/yB4Jzn4nF
http://t.qq.com/p/t/84465091323548
异构计算第三场#HTML5#。HTML5包括三个部分:HTML标记语言新标签;CSS3:JavaScript。新标签增加一些语义标签,例如搜索引擎抓取页面。增加表单标签属性协助验证;表单元素不再需要写在Form标签内部:input type=url email,还支持正则;placeholder的属性
http://weibo.com/1689646705/yB4R2rBtx
http://t.qq.com/p/t/62969074172758
video标签。不用JavaScript,仅使用CSS3可以实现简单的动画,WebGL可以使用JavaScript实现动画。File API支持本地打开文件;Canvas接口实现2D绘图,不规则图形使用贝塞尔曲线;支持像素级操作。video标签可以用JavaScript读取像素,控制按钮放在外面。
http://weibo.com/1689646705/yB4WZfdEG
http://t.qq.com/p/t/146620005016751
Ajax请求和前进后退按钮兼容。依赖于屏幕尺寸加载CSS。优先选择HTML和CSS实现,其次使用Canvas实现。目前浏览器的改良方向就是把Canvas 2D和WebGL 3D改为GPU实现。Mozilla在做Firefox OS,Web APP和Native APP讲合流
下午《主题论坛七:异构计算》第四场听奇虎( http://360.cn 新浪微博@360安全浏览器 http://e.weibo.com/360se 腾讯微博@i360se http://e.t.qq.com/i360se )资深架构师王志刚先生的主题演讲“浏览器的多进程架构与渲染优化”
http://weibo.com/1689646705/yB50hqIJf
http://t.qq.com/p/t/99440019327513
浏览器多进程与渲染优化,360的讲师。之前浏览器是单进程多线程的架构。Google从2008年在Chrome上实现了多进程架构,借助操作系统管理。Webkit2新开了分支,分成渲染进程和UI进程,Safari包括UI进程,Web进程和插件进程。IE提出Loosely Coupled IE
http://weibo.com/1689646705/yB53BFc66
http://t.qq.com/p/t/145120008616050
Chrome有五种进程:Browser进程,Render进程(沙箱),Extended进程(沙箱),Plug In进程,GPU进程。Render进程模型:per site instance网站及可信链接,per site网站,per tab,传统单进程。Chrome沙箱类似于IE保护模式。Token,Job&Desktop Object,Integrity
http://weibo.com/1689646705/yB58fciHG
http://t.qq.com/p/t/64466059640049
Webkit渲染基础。软件渲染步骤。软件渲染架构:主进程创建共享内存,render进程写入共享内存。GPU进程:在弱沙箱中运行,安全性保留render沙箱和GPU沙箱:健壮性独立进程,例如显卡驱动出错;一致性便于移植。GPU渲染架构,共享内存上的Command Buffer
下午《主题论坛七:异构计算》第五场听AND( http://www.amd.com 新浪微博@AMD中国 http://e.weibo.com/amdfansgroup 腾讯微博@amdfansgroup http://e.t.qq.com/amdfansgroup)开发者关系经理谢海波先生的主题演讲“从CPU到CPU+GPU混合编程”
http://weibo.com/1689646705/yB5h6dHse
http://t.qq.com/p/t/21894062020022
计算机体系结构发展,摩尔定律,单核时代,5G CPU失败->多核时代,对称架构->异构计算时代,强调GPU通用计算能力,异构重核时代。2013年GPU将达到一T的计算能力。单核时代:免费的午餐,软件随硬件发展获得性能提升。多核时代改变编程模型
http://weibo.com/1689646705/yB5oNrprD
http://t.qq.com/p/t/166620115739162
分析应用和算法。异构时代并行计算的例子,CPU用大量的芯片面积做缓存。CPU+GPU系统编程的思维转换:找到热点;大规模并行;尽量降低CPU和GPU间的内存开销。2009~2011使用OpenCL计算,未来还要改变。APARAPI:Java转化为OpenCL,Kernel基类,实现线程模型
CPU+GPU系统编程的思维转换
Amdahl's law:找到热点做数据并行!直接影响到应用的最终加速比
大规模并行:这里的大规模意味着数千到数百万线程的并行执行,直接影响到算法的加速比
CPU/GPU协同工作:让CPU和GPU各司其职,为不同设备选择不同的数据集,试图降低CPU/GPU间的数据传输开销
http://weibo.com/1689646705/yB5uoCLtL
http://t.qq.com/p/t/57473010472127
HSA基金会。切换计算时不希望移动数据
我听着GPU计算让我想起十几年前熬夜盯着电脑等matlab计算矩阵的时候,希望未来用GPU能飞速计算矩阵。同时对GPU编程听起来有点像FPGA
下午《主题论坛七:异构计算》第六场听中国科学院软件研究所( http://www.is.cas.cn )助理研究员龙国平先生的主题演讲“基于OpenCL加速的OpenCV扩展库”
http://weibo.com/1689646705/yB5z6ipHV
http://t.qq.com/p/t/84465118768640
还有一场:OpenCL实践:OpenCV。项目背景:能效制导技术演变。编程模型:串行->多线程MPI->CUDA/OpenCL。OpenCV起源于1999年,BSD许可。2010年,尝试用OpenCL改造OpenCV。挑战:不知道严肃的用OpenCL的项目。代码分支OpenCVCL,目前已合并进入主分支
http://weibo.com/1689646705/yB5E6wXNj
http://t.qq.com/p/t/19894066147314
OpenCL比CUDA平均速度相当于1.2倍。性能优化技术:以AMD5850为例。性能优化总体原则:寻求算法结构和硬件结构的最佳匹配。归约/Scan/积分等。硬件结构特点:主从异构通信结构;标量向量指令流水。层次化计算单元组织,挖掘多级应用级并行。复杂的存储层次
http://weibo.com/1689646705/yB5IBvfT5
http://t.qq.com/p/t/97440048118771
5850解读,线程映射层次:Workgroup之间。存储层次:寄存器堆,LDS,L1/L2,Fast Path VS Complete Path。矩阵元素遍历。图像卷积:合理安排缓存。Image VS LDS。并行层次安排:Scan Scan Propagate。非规则计算。OpenCL优化的三种观点。和CUDA比较。
最后说八卦
http://weibo.com/1689646705/yB5d2aCPE
http://t.qq.com/p/t/155620109815613
主持人建议提问的同学直接给@周鸿祎 发微博加入360就可以学习浏览器的内幕了
http://weibo.com/1689646705/yB68bEitG
有网友说:每次开会都是上午电就用光了,下午被关机[怒]强烈要求大会提供手机充电服务
我这两天都带着13000mAh的移动电源,用来保证我连续两天不停的用iPhone发学习笔记