Linux开发初探

坚持用了十几天的Linux操作系统,学会了很多的东西,但现在必须得抉择如何选择开发工具。在这些天的开发中,各种Linux下的IDE都有所尝试。一向看好的Code::Blocks还是过于简单,用了一阵时间以后还是选择了放弃;后来又尝试了Sun的NetBeans,虽然IDE的界面很棒,但是在WIN下面竟然只能用sun的编译器或者MinGW的;最后用了一段时间的KDevelop,虽然我极力的适应它的IDE环境,也摸索了一阵CMake的编译,但最终,我也不得不选择暂时放弃。

这些IDE普遍存在的问题还是比较弱的智能感知,虽然Visual Studio同样也有这个问题,但好在还有强大的Visual Assist X帮忙。而其他的IDE就没有这么幸运了。缺少智能感知会极大的影响效率,输入都要输入半天,万一出错了还麻烦。第二个问题就是调试器的问题。不得不承认微软的Visual Studio调试器相当的强大,能够展开STL的数据。这一点开源的GDB就要欠缺很多。

当然,这些可能对于很多老手来说不存在什么问题。我想,如果我是从更早的时候开始就一直使用Linux系统,在下面学会Makefile的语法,学会了gcc的编译选项,那么现在可能也不是这个样子。Linux世界存在的法则在于“自定义”。名副其实的网络操作系统,没有网络,光用命令行的话,恐怕寸步难行。

说到底还是一个习惯和熟悉的问题。现在已经习惯了Linux下面的大小写区分,也习惯了很多的操作,唯一觉得不爽的就是什么东东都需要自己去配置一下,麻烦。倒是说来,被Windows娇惯了的人,用Linux就感觉回到了原始社会。不得不承认的是没有太多的时间来学习Linux的生存法则,项目的时间越来越紧,如果再用太多的时间来搞这些配置的话,恐怕会让人得不偿失。目前也明白了一个道理,无论用什么IDE开发,最终的目的还是尽快的把产品成型,只要源代码是有跨平台考虑的,也不用过多的担心移植的问题了。等做好了产品再来移植也不迟。

最后也不得不考虑的一个事实是,微软已经开始收网了。被“毒害”的用户已经习惯了Windows,洋人的鸦片已经没法抗拒了。Visual Studio一样,开发者的“鸦片”,吸吧,免费的用吧,笑到最后的,还是微软那张阴险的脸。

唉,没办法了,为了效率,不得不切换回Windows,继续被“毒害”。希望有朝一日有一种IDE能够让我重返Linux怀抱。

又回家了

才在学校待了两天又回家了,还真是恋家的人哟。呵呵,回来把有些没有带过去的东西拿过去,明天还要去参加一个婚礼,不吃就浪费了哟。下午回来时候天气很好,一路上听收音机渡过的,哎,就是这个诺基亚的原装耳塞太次了,也不知道是不是正品的,听收音机都是一抖一抖的,一会儿信号不好的时候就变成单声道了,听起来郁闷得很。最后还是把线卷成一圈,就OK了。

晚上回来把和老爸一起把DVD机的光驱换了,哈哈,可以感受一下5.1声道的AERO啦,让·雅尔2004年经典的电子音乐。当年也曾驻足音像店,想买一盒DVD和CD的盒装,可是好像是60多块钱哟,对于我来说也有些贵了。主要是当时也没有听过,怕不好听。后来有机会能够下载到MP3了才知道原来是这么的震撼,特别是闭上眼睛,打开PDA上的音效增强,带上森海塞尔MX500耳机以后那个震撼效果,令人久久不能平静。

唯一让人遗憾的是,5.1声道系统的一个中置坏了……

有时候听着听着就没声音了,只有背景音乐了,然后忽然又从一个音箱里面冒出了一些声音,很是奇怪。哎,又只有等下次功放修好了再说了。

蚊子太多了,准备烧蚊香片了,不写了,要不然血被吸完了……

8月28

晃眼就到了8月底了,很不负责的我由于太忙了也没有时间更新日志。今天终于有一些闲暇时间来写写近况。

暑假也就这样过去了,也算是出旅游了一圈,算是完成了今年年初制定的计划。和以前一样的习惯,回到家了以后就成了宅男,每天早上起来就是中午了,晚上要一两点才睡觉。一天天过去,总是觉得一天很累的样子,就像睡觉,我想可能和生活习惯有一定关系。前天回到学校的,晚上老板一个电话说是叫我第二天帮忙修个电脑。最后还是到学校好了,顺便晚上演示一下3D立体显示的效果。

对于编程这方面,8月也没有过多的做什么东西。3D立体显示花了120块钱,加上以前的一个老CRT显示器就成功了。用了一天的时间就搞出来了,效果令人满意。8月更多的时间用在了试用各种软件开发包,看现在最新的一些技术,期待能够将其合成到一起做一个产品,走在别人的前面。

最近也在使用Linux操作系统了,习惯了以后反而不太怎么用Windows了。由于前段时间经常内存告急,所以前天去多买了1G的内存,加起来就4G内存了。可怜的Windows XP竟然只能识别到3.25G,即便加上了PAE选项那0.75G还是没办法找回来,解决方案使用2003 Server或者VISTA很是郁闷。而Linux系统就不一样了,我用的是Ubuntu 8.04,根据这篇文章所述进行内核重新编译,简单的修改一个内核选项,就可以支持4G以上内存了。之前我还试过用Ubuntu的Server版的内核,可以正确是识别到4G,但是NVIDIA的显卡驱动又不支持这个内核,只好作罢。重新编译内核用了半个多小时时间,还是比较久的,我在想编译的时候能不能像make以上加上-j的参数以后进行多线程编译呢?以后升级内核的时候再管吧。还是感觉Linux系统在这方便占据了很大的优势。

近期也看过CUDA的一些东西,总的来说CUDA对于我的吸引力还是比较大的,写过几个小程序以后基本上知道了CUDA编程是怎么回事了。我还在想做体渲染用CUDA能不能带来速度上的进一步提高?基于Shader的图形方式的编程已经让Texture Unit不堪重负,如果从CUDA的Global Memory里面取体数据,用Stream Processor来计算又能不能释放Texture Unit的能力从而得到更好的速度呢?还是需要实验才能知道,而且算法一定还比较麻烦,要设计到如何有效的从Global Memory里面提取数据然后放到Shared Memory来进行数据缓冲~~但目前我还没有这个打算做下去,目前的显示的速度已经够用了。

基于CUDA的NVIDIA的物理驱动也能够正常运行了,但流体模拟的速度还很缓慢,看来还是需要另一张显卡进行加速。NVIDA的算盘还是挺牛的,没了物理卡,多了显卡装的物理卡。我倒是在想,以后的游戏AI、物理甚至音频计算都到显卡上去了,CPU拿来干嘛么?到时候全部计算都抗到GPU上面了,CPU闲死,GPU累死,反而卡卡卡。再看啦,以后我的项目也可能要用到软物体的模拟的,期待PhysX进一步强大,多多益善~

Vmware Workstation 6.5的RC版本已经发布了,说明已经离正式版很近了。其实Vmware更新一贯是很快的,这次的RC版本提供了增强3D显示的支持。据测试已经能够很好的支持Shader Model 2.0了。我虚拟机里面分配了1.5G内存给虚拟机,将其VESA驱动装好,装了3DMARK 05 1.3版本,测试成绩是2700分左右,基本上达到了6600的水平。然后兴奋的试了试战地2142,竟然能够完美的工作!!最高特效下速度能够达到真实显卡的1/3左右,当然人多的复杂场景帧数会降到15FPS一下,就没有可玩性了。在最低画质的情况下还是能够基本流畅运行,算是一个很大的进不了。

当然我的说完美并不是真正的完美,而是有BUG的完美。BUG是如果没有配置好虚拟机的显示器为使用本机设置,那么到选择重生点的界面时就鼠标就是乱跑的。第二个BUG堪称完美,VESA驱动不支持FOG,也就是雾效。想雾效效果一直以来都是游戏里面最重要的元素,以来是增加了逼真度,而来是减少了显卡渲染的量,以至于2000年左右的时候,很多游戏里面的雾效都达到了夸张的效果,记忆里面那款“猎杀恐龙”你的可是距离就不超过10米~~当然,计算雾效还是需要显卡计算,以前可以固定管线进行计算,而后来则可以使用Shader进行更高级的雾效。也不清楚为什么战地2142里面雾效果没了,驱动没有做雾效还是2142使用的固定管弦的雾处理,倒是雾效在3DMARK05里面是正常的。呵呵,没有了雾效,自然战地2142的狙击手就能够看得更清出了,画面和作弊器没有区别,唯一的好处就是目前不会被反作弊系统踢出来。

VMWARE的UNITY模式也好算是能够正常运行了,只是速度确实太慢了,托窗口都不能流畅拖动。原理我想可能就是在后太有一个抓屏的软件,然后传到前台窗体里面,将图贴上去就可以了。期待正式版能够进一步完善,加强速度。呵呵。

好玩的东西都玩玩了。接下来的任务还是一样的繁重,只是回到了学校,又恢复了基本正常的生活规律,人也没那么恼火了。

Ubuntu 越来越好玩~

这些天学习VTK顺便研究一下Ubuntu。抱着本看没用,还是要实际用起来才知道。为了解决显卡声卡的问题还是学了不少东西,然后编译什么的。为了支付淘宝的费用,最后费了多大功夫装了个IE6,最后把钱给了,还可以浏览QQ空间。最后试了试qq2008,竟然可以在wine的支持下很好的运行~~~最牛的竟然QQ2008的截图功能能够很正常的使用,太强了~~继续探索中~~

测试GPU的材质填充率

体渲染最重要的一个优化就是减少GPU的采样工作。测试GPU的材质填充率能够指导我们的工作。要知道为什么GPU在800*600的环境中只能达到12FPS么?这就要看GPU每秒钟采样的次数啦。

我写了一个简单的OSG程序,用来测试采样次数:[download id=”3”]

程序原理很简单,分几步:创建窗口->生成和设置纹理->载入SHADER->渲染。具体如何做要看程序里面啦,这里就不再贴出来了。

直接说最后的测试的结果了。我的8800GTS(G80)官方资料说材质填充率能够达到24Billion/Sec,官方资料给的核心频率500Mhz,着色器频率1200Mhz,显存800Mhz。我将我的显卡也按照这个数据进行了降频。

测试环境:窗口800600,3D贴图256256*256,数据是LUMINACE_ALPHA,每个像素2BYTE。每个像素的Shader采样3D贴图512次。

最后得到测试FPS为11.98帧。算算:800600512*11.98=2,944,204,800,因为是3D纹理所以每个采样实际要有8次采样工作,所以最终的材质填充率:23,553,638,400,和24Billion/Sec很接近了。

换用2D贴图可以得到相似的结果,只是FPS会快一倍。原因是三线性采样的工作量是二线性采样的两倍,很显然FPS会提升一倍。

那么怎么去优化呢?下面做一些测试:

  1. 减小3D贴图的大小,以便尽可能的装到CACHE里面。直接设置为111,结果发现性能一样。
  2. 更换3D贴图的internal format为RGBA,发现性能一样。
  3. 超频:超核心,性能提升百分比和超频百分比几乎一样。超Shader,几乎没变化。超显存,几乎没变化。
  4. 降频:降核心,性能降低百分比和降频百分比几乎一样。降Shader,几乎没办法。降显存,一直降到400Mhz也没有变化。
  5. 降低每像素采样率:降低为256后,性能提升一倍,和预期一样。
    最终的结果很明显。3D贴图的采样已经成了整个系统的瓶颈,已经让显卡的贴图单元达到了极限。Shader处理器由于计算量很小,所以还很空闲。由于采样过滤的繁忙,贴图单元也不需要很大的显存带宽,所以显存的影响几乎没有。

优化的措施:只能尽可能的减少采样次数,或者找更快的卡。目前看来只有G92的9800GTX或者8800GTS的采样率能够达到43.2Billion/Sec以上,GTX280官方资料也只能达到48.2Billion/Sec,GTX260 36.9Billion/Sec。9800GX2能够达到76.8Billion/Sec,就是不知道实际SLI的性能能不能满足需要了。看来如何选择适合体渲染的卡已经有一个理论和实际的指导了。