西西河

主题:【原创】漫谈浏览器大战 -- (构架篇) -- Highway

共:💬46 🌺488 新:
全看分页树展 · 主题 跟帖
家园 【原创】漫谈浏览器大战 -- (硬件加速篇)

对人民群众来说,硬件加速这个词听着有些别扭,有见买硬件来减速的吗?

硬件加速这是一句IT道上的黑话,意思就是让某些专用芯片来完成一些特定的操作,而不是由CPU运行软件来完成这些任务。以前曾经有很多专用的处理器,比如浮点数协处理器,VCD解压卡等等。但是那些工作量对现代的CPU来说都是小菜一碟,不用也罢。所以现在人们说到硬件加速,其实就是指用Video Card加速。也就是给CPU松绑,给GPU上套(套上马车的套)。

有了说了,把CPU的工作仍给GPU,工作量并没有减少,换汤不换药,有什么好处?

寸有所长,尺有所短。GPU在处理某些任务上比CPU要强得多(很多情况下强几十甚至上百倍),不光是性能上强,而且在能耗上也很有优势。现在的新一代移动芯片,CPU功能未必有多强大,但大多的图像图形处理都交给了GPU,所以很多轻巧的手机,平板电脑都可以轻松回放1080p的高清图像。如果就靠CPU来做,那么一个INTEL的Core 2 Duo都会类的臭死。

既然GPU那么牛,干脆把CPU废了,给GPU扶正不行吗?

不行。因为GPU虽然干某些事情很牛,但毕竟不是通用型处理器,很多事情处理不了。软件工业发展了这么多年的家当能在GPU上跑的还毕竟是个零头。现在搞GPU的厂商(ATI, nVidia)都想拓宽GPU的应用,搞所谓的通用型GPU(GPGPU),但是这件事并不容易,我看离成熟还有些日子。对GPGPU感兴趣的朋友,不妨看看我这篇老帖子 -- GPU作超级计算,有那么美好吗?

所以现在所说的硬件加速,就是尽可能的将一切可以扔给GPU的活都甩给GPU,剩下的就只好还是由CPU来做了。这件事听起来容易做起来难,但是呢,一旦做成了性能有质的飞跃,诱惑还是很大的。新一代的浏览器对图像图形要求极高,并且3D可能马上就要全面在网上展开,如何解决好这一新的问题成了各个浏览器厂商的当务之急。

有人说了,其实浏览器根本不需要操这个心,新一代的高清视频和3D图形交给对应的Plug-in不就行了吗?比如说Flash或是SVG。事实上,Plug-in的厂商也在兜售这个概念,Flash 10.2 Beta和刚刚发布的Silverlight 5.0都支持硬件加速的高清视频回放。

但是,plug-in终究不是浏览器本身,新一代的浏览器都想甩掉plug-in直接支持HTML5里面的那些新的TAG,比如video, audio, canvas等等。

就硬件加速这个环节而言,个人以为现在是IE9做的最好。用他们的话就是IE9是“全程硬加速(Full HA)”,而其他浏览器呢都是“局部硬加速(Partial HA)”。他们的口号是“IE9 -- Surf on Metal with GPU Powered HTML5”。

点看全图

外链图片需谨慎,可能会被源头改

IE9提供了一两个网站,Test Drive Site Map,大家可以自己试试看。我试过IE9, FF4,Chrome8.0, 9.0 Beta和10.0Canary buiild,感觉还是IE最好,无论是图像操作,3D SVG,还是文字缩放,IE9表现的都很好。Chrome和FF表现参差不齐,有的和IE很相近,有的则惨不忍睹。

有人说了,这是微软自己提供的网站,选的那些例子都是IE9擅长的,所以没什么参考意义。这话呢,有一定道理,厂家自己的测试总是给自己脸上贴金的。不过呢,这些测试都是很基本的HTML5操作,很透明的,玩“猫腻”的机会有限。所以不妨先作为一个benchmark用着。

为什么微软能在这个领域跑在前面呢,我认为有两个主要原因。

1)微软的DirectX搞了快15年了,现在都到11.0版本了。他不仅搞API给游戏厂商用,他自己也搞3D游戏。所以就图形图像加速这一头,微软的功力别家还真比不了。从Vista开始,微软翻新了显示驱动这一子系统,为应用程序使用硬件加速奠定了基础。不用说浏览器了,就是用。NET开发的程序都能用上这一功能。比如你用.NET写WPF程序,都是基于DirectX之上的。再比方说,用Media Player回放高清视频,CPU占用率真的很低,更改对比亮度什么的也不影响CPU usage。如果用第三方的播放器,比如大名鼎鼎的VLC,CPU占用率就上去了,如果调整一下contrast,CPU就更忙了。

2)微软的IE9没有跨平台这一顾虑,它甚至连WindowsXP都不支持,所以它可以完全按照Windows Vista/7的图形系统来写。如果有什么不方便的地方,连OS的文件都可以更新。IE9是我试用的浏览器中唯一需要重启系统的。Chrome和FF不同,他们要考虑其他平台,通常呢,一个抽象层就要引入(abstraction layers),这样性能就不可避免的要有折扣。如果想要让各个平台上的版本都有相近的表现,那么可能技术上就更困难一些。因为在Windows上用DirectX实现的东西可能在Linux就没那么个API,可能需要多个OpenGL的调用才能带到同样的目的。当年我曾解释过Java 1.4以后的数学运算为什么比1.3以前还要慢的秘密(参考拙作Java Fantasy 漫谈),基本上就是“跨平台”拖了后腿。显然的,FF和Chrome制肘的地方要比IE9多。

IE9的硬件加速功能,如下图所示,三个主要的阶段IE9都有动作。

点看全图

外链图片需谨慎,可能会被源头改

1. 内容渲染段(Content Rendering Phase). IE9使用Windows的Direct2D和DirectWrite子系统,所以呢,文字和矢量图形的现实都很平滑。这个阶段使用GPU,对HTML的一些最基本元素都有提升效果,比如文字,图像,背景和边框等等。

2. 页面组合段(Page Composition Phase). IE9在这个阶段使用了微软自己的Direct3D,对于图像密集操作的那一类页面,性能有一个飞跃。大家可能看过IE9的一个DEMO,就是一个阵列浏览器的LOGO在屏幕上飞来飞去,有了GPU加速,CPU基本上不怎么出力,那一群图像已经在屏幕上舞的如痴如狂了。GPU的一个绝活就是飞快的现实bitmap图像,并且这些图像都在GPU自己的显存里面,再次显示的时候把显存的图像拿出来就成,怎能不快!

点看全图

外链图片需谨慎,可能会被源头改

3. 桌面组合段(Desktop Composition Phase)。浏览器拼装好的页面,最后要交给Desktop Window Manager (DWM)来反映到屏幕上。IE9使用的是纯DirectX和DWM打交道,比起以前的DirectX和GDI+的混合模式要更直截了当,GPU内存开销小,稳定性也更好,

当然了,我的这些结论都是基于现在Beta版本的,将来正式版本的情况还要到时候才能说。还有,这个HTML5是不是能成为下一代的标准还有待观察。所以呢,就这个话题我们可以以后再聊。现在就先告一段落了。

======================================

1.【原创】漫谈浏览器大战 -- (构架篇)

2.【原创】漫谈浏览器大战 -- (JavaScript篇)

=======================================

关键词(Tags): #硬件加速# 浏览器元宝推荐:铁手,
全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河