本站搜索
页面
分类
最新评论
- liangsuilong 发表于《写在KDE 4.5发布之后》
- Lancer 发表于《写在KDE 4.5发布之后》
- liangsuilong 发表于《VirtualBox的2D视频加速测试》
- 时代桃源 发表于《写在KDE 4.5发布之后》
- 淘宝网美白产品排行榜 发表于《写在KDE 4.5发布之后》
Linux
朋友们的blog
- A Thousand Mile
- apt-blog.net IT民工养成计划 PT博客
- Blinux
- CoffeeCat
- DCY--IT路上……
- DY Feng's Blog 叶毅锋的博客
- Felix's Blog
- HeliumCity The future, in the freedom.
- I’m TualatriX
- Jia Pad
- K.I.S.S. – 简单哲学
- Knowledge == Language
- sychopx
- Yayi's Word
- 七星庐
- 写真と嵐とヒマワリの旅人
- 小杰的博客
- 心之所在的日志
- 歪歪灰主流
- 毛毛's Blog
- 稳 – 不信未作牺牲竟先可拥有 只相信是靠双手找到我欲求
- 读书写字看风景
- 追梦
- 阳光灿烂的日子
-
最新日志
Tag Cloud
按标签归档:硬件
小谈GPU加速视频解码
前两天@Yunkwan在推特上求推荐一款能够硬解的NVIDIA显卡,大家都知道现在随意一款新生产的显卡都可以硬件解码。@wellsgz就一直以为NVIDIA显卡是通过CUDA实现显卡的加速解码,当时听起来有点不可思议,但是认真斟酌以后发现这可能是更好的办法。 首先说说现有的NVIDIA和AMD的做法。NVIDIA的PureVideo技术和AMD的AVIVO HD技术在原理上其实是相差无几的,都是把一个专用的硬件解码单元嵌入到GPU里面,构建在同一块硅芯片上。这一部分和以前专用的解码芯片十分类似,就是一块专门用于视频解码的DSP。NVIDIA称其是Video Proccessor,最新的是VP4,而AMD则称之为Unified Video Decoder,最新的是UVD2.2。性能规格方面都差不多,能够支持H.264、VC-1和MPEG2的全程硬件解码,同时能够解码两条高清视频。这种办法是现在最通用的GPU硬解码的办法。至于优点和缺点,稍后再讨论。 正如@wellsgz所说,利用CUDA等GPGPU技术实现GPU加速视频解码或许是一个更加好的方案。正在兴起的GPU通用运算能够极大地减轻CPU的工作负担,增加运算效率。现在GPU通用运算慢慢地热闹起来了,NVIDIA和AMD都推出了基于自有GPGPU运算平台的视频转码软件,效果十分出色,比纯用CPU转码的速度大有提升。CUDA应用在科学运算领域,而AMD的Steam平台也出现高性能运算市场。既然视频转码和专业领域都能够应用,同样应该可以应用在视频解码方面。利用并行度高性能强大的流处理器,同样获得很好的解码效果。 谈到GPGPU的应用,就不得不提到OpenCL和DirectX 11的DirectCompute了。前者是Apple提出的一个GPU通用计算的规范,能够跨平台实现,在Mac OS X、Linux和Windows都能使用OpenCL。Mac OS X正是使用OpenCL实现GPU视频解码加速。除此之外,Mac OS X的一些新应用都允许使用OpenCL加速。至于DirectX 11的DirectCompute,似乎除了个别的测试工具,还没有实质应用出来,况且DirectCompute仅仅是在Windows使用。 以上三者的目的都是为了借助GPU的力量加速高清解码。虽然现在CPU性能大有提升,应付一般的高清视频解码也绰绰有余,但是CPU使用率依然奇高,影响了其他程序的性能。所以GPU加速解码还是十分必要的。GPU内置专用解码单元的做法有点在于方便省电,但是不够灵活。在新的视频编码格式和规格出来以后,就需要重新设计芯片,继而修改驱动,最后还要修改播放器,工程量十分大。另外专用单元也只能支持特定分辨率硬件解码。对于特定省电的原因是因为在播放高清解码期间只有解码单元在全速运行,流处理器部分则降低到一个很低的频率,相当省电。 CUDA/Srteam/OpenCL/DirectCompute的办法其实是一样的,利用流处理器强大的浮点运算能力和并行能力,协助CPU高清解码。CUDA和Stream是显卡厂商推出的GPGPU方案,只能够在自家显卡上应用。可能是因为自家的显卡更加容易优化吧,所以效率要比后两者要高。而OpenCL则是开放性标准,可以跨平台应用,Mac已经在OpenCL加速视频解码和编码。至于DirectCompute,似乎已经被遗忘了。使用流处理器解码最大的好处在于灵活,即使视频编码格式如何改变都没有问题,只要有编码器解码器支持就可以了,所以无需担心不支持的情况。同样也不存在多流解码的问题,只要有足够的运算资源,就可以实现多个视频加速解码。最大的特点就是可以和CPU协同运算,既可以CPU单独解码,也可以GPU单独解码,更加可以GPU和CPU协同解码,十分灵活。缺点就是因为GPU通用运算尚在起步阶段,优化程度不足效率不够高,即使高端显卡加速也不太明显。此外就是耗电一点,这听起来有点诡异吧。主要是GPU的节能模式比较少,要么在低功耗模式,增加少量负载就马上跳到全速运行模式。这与GPU设计有关吧,一般情况下只会为整个GPU配备一个电压调节单元和一个负载检测单元,并不像CPU那样每一个核心都会有独立的电压设定和频率生成器。或许移动GPU会有更多节能模式,也相信在以后的GPU设计中得到改善。 从本质上而言,专用单元是硬件解码,而流处理器解码则还是属于软件解码,只是有了强劲的GPU参与让解码效率大增。至于哪个更有前途,谁也说不准。现在看来是前者更加成熟,但是后者潜力无限。当然我们是希望GPU解码能够支持更多视频编码格式,质量也越来越好。
ATi R600开源驱动@Karmic
说了这么久,还得是要行动,先把Catalyst卸载掉。卸载Cataslyt倒是比Nvidia的方便,运行一条命令就会把所有东西卸载掉。 sudo /usr/share/fglrx/ati-uninstall.sh 还得要把X的配置文件删除掉,否则重启以后X就不能启动了。当然也得要把备份的配置文件一并删除。 sudo rm -f /etc/X11/xorg.conf* 现在就只剩下就最基本的2D特性。Karmic的mesa和ati开源驱动版本较旧,并没有提供3D加速。所以得加一个PPA源更新,获取较新的mesa和驱动。 sudo add-apt-repository ppa:xorg-edgers 添加以后别太匆忙更新,由于Karmic的2.6.31内核并没有添加支持Radeon的DRM,所以先从Ubuntu Mainline Kernel PPA下载预编译好的内核DEB包。要让ATi开源驱动获得3D加速,需要的是2.6.32及其以后的内核。现时最新的稳定内核是2.6.32.8。2.6.33还在发展之中,还得要等等再更新。以2.6.32.8为例,除了对应架构的linux-image和linux-headers的DEB包以外,别漏了这个linux-headers-2.6.32-02063208_2.6.32-02063208_all.deb文件。 安装完毕以后,开始更新系统了。如果没有定制过Ubuntu的软件包,则可以放心更新即可。如果是定制过Ubuntu的驱动包,则需要安装xserver-xorg-video-ati和xserver-xorg-video-radeon,少不免还得补上mesa的软件包。 sudo apt-get update sudo apt-get dist-upgrade 稍等片刻,当所有安装完成以后,需要重新启动系统一遍。启动的时候,一定要选择2.6.32内核,否则会存在问题。 系统进入到桌面并没有和早前的出现异样。实际上却是翻天覆地的变化。X Server 升级到了1.6.5(其实还是很旧的),Mesa也升级到了7.8的快照版本,xserver-xorg-video-ati也更新到6.12.99。例行查看相关信息和跑了一下glxgears,OpenGL 2.0和GLSL 1.10已经到位。 glxgears分数不错,达到了2000分的级别,但是拖动齿轮窗口的时候会出现影像残留的问题。tty终端的分辨率也跟桌面的保持一致,自动设定在1600×900。此时,Radeon是运行在User-space Mode-Setting的模式。速度确实比Kernel Mode-Setting要高很多,但是问题也很多。大趋势还是KMS,UMS最后还是会被淘汰的。 在模块列表中出现了drm_kms_helper模块,而且是被radeon模块使用着。Mainline Kernel PPA已经能够支持Radeon的KMS模式。但是它没有成为默认选项,需要用户在GRUB添加radeon.modeset=1内核行参数。 重启电脑,开启KMS后进入系统,还是一切如常。glxgears分数猛跌到不足400fps,但是影像残留的问题消失了。3D加速也无法启动,开启Compiz特效也会白屏。 总的来说,在Karmic上,ATi的开源驱动还是挺凑合的。但是依然有很多问题需要跟进。运行Google Earth也已经十分流畅了,Radeon Status也说明Google Earth在Mesa-7.8会达到Platinum级别。 … 继续阅读
Mesa-7.8的新看点
Mesa-7.8将会加入众多改进,除了已知的带有gallium加速的nouveau驱动以外,radeon驱动也能提供OpenGL 2.0的加速了。不过与nouveau不同的是,radeon依然使用传统的mesa渲染库,Gallium3D驱动依然没有达到实用阶段,所以暂时还不会切换到Gallium3D渲染器。 按照X.org上的Status介绍,Mesa-7.8会为radeon增加OpenGL 2.0和GLSL 1.20的支持。然而Mesa-7.8依然在开发中,特性还没有完全实现,现在只有OpenGL 2.0的部分完成了,GLSL还是在1.10的版本。现在离发布还有一个多月的时间,开发人员还会继续努力的。 从Koji上抓来了mesa-7.8的源代码RPM包rebuild,libdrm也需要2.4.17-2版本,同时也得抓下来。一阵子就把这两个东西rebuild好了。装上了mesa,似乎没有大的改变。在glxinfo输出的信息里能够看到OpenGL的版本升级到了2.0。后来跑了一下glxgears,分数没有大的改进。于是尝试一下Savage 2和Heros of Newerth,没有GLSL 1.20的支持,连游戏都进入不了。 看着nouveau的有了Gallium3D驱动,也重新编译了Mesa一遍,这次增加了–enable-gallium-radeon。编译速度快了一点,可能是ccache的缘故吧。radeong驱动出来了,但是对于R600而言,还不能够使用,最起码,连X都启动不了。不过随着Gallium的逐步推进,很快radeong就会出世了。 倒是再回看一下fglrx的进展,虽说已经能够支持OpenGL 3.2和GLSL 1.50,但是对于这个驱动毫无意义可言。无论有多少新特性加入,以前的问题远远还没有修复。2D依然使用着XAA加速,桌面响应依然缓慢。运行3D程序则会有这样那样的问题。Google Earth总是有这样那样的闪屏问题。Heros of Newerth 慢得要死,而Savage 2也跑不了。唉,这样的驱动还能用吗? Catalyst-10.2和10.3驱动的文档似乎让我看到一点希望。我依然在犹豫究竟要不要彻底倒向开源驱动呢…爆晕!
