??xml version="1.0" encoding="utf-8" standalone="yes"?>久久国产亚洲高清观看,国产精品久久一区二区三区,看久久久久久a级毛片http://www.shnenglu.com/Jedimaster/archive/2007/02/24/18939.html周L周LSat, 24 Feb 2007 06:42:00 GMThttp://www.shnenglu.com/Jedimaster/archive/2007/02/24/18939.htmlhttp://www.shnenglu.com/Jedimaster/comments/18939.htmlhttp://www.shnenglu.com/Jedimaster/archive/2007/02/24/18939.html#Feedback6http://www.shnenglu.com/Jedimaster/comments/commentRss/18939.htmlhttp://www.shnenglu.com/Jedimaster/services/trackbacks/18939.html阅读全文

周L 2007-02-24 14:42 发表评论
]]>
Python与Microsoft Office自动化操?/title><link>http://www.shnenglu.com/Jedimaster/archive/2007/02/21/18895.html</link><dc:creator>周L</dc:creator><author>周L</author><pubDate>Wed, 21 Feb 2007 04:37:00 GMT</pubDate><guid>http://www.shnenglu.com/Jedimaster/archive/2007/02/21/18895.html</guid><wfw:comment>http://www.shnenglu.com/Jedimaster/comments/18895.html</wfw:comment><comments>http://www.shnenglu.com/Jedimaster/archive/2007/02/21/18895.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.shnenglu.com/Jedimaster/comments/commentRss/18895.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Jedimaster/services/trackbacks/18895.html</trackback:ping><description><![CDATA[     摘要: 用Python语言?qing)其库对Excelq行操作实现自动?nbsp; <a href='http://www.shnenglu.com/Jedimaster/archive/2007/02/21/18895.html'>阅读全文</a><img src ="http://www.shnenglu.com/Jedimaster/aggbug/18895.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Jedimaster/" target="_blank">周L</a> 2007-02-21 12:37 <a href="http://www.shnenglu.com/Jedimaster/archive/2007/02/21/18895.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PerlID破解表单密码的实?/title><link>http://www.shnenglu.com/Jedimaster/archive/2007/02/16/18831.html</link><dc:creator>周L</dc:creator><author>周L</author><pubDate>Fri, 16 Feb 2007 13:55:00 GMT</pubDate><guid>http://www.shnenglu.com/Jedimaster/archive/2007/02/16/18831.html</guid><wfw:comment>http://www.shnenglu.com/Jedimaster/comments/18831.html</wfw:comment><comments>http://www.shnenglu.com/Jedimaster/archive/2007/02/16/18831.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/Jedimaster/comments/commentRss/18831.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Jedimaster/services/trackbacks/18831.html</trackback:ping><description><![CDATA[     摘要: PerlID破解表单密码的实?nbsp; <a href='http://www.shnenglu.com/Jedimaster/archive/2007/02/16/18831.html'>阅读全文</a><img src ="http://www.shnenglu.com/Jedimaster/aggbug/18831.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Jedimaster/" target="_blank">周L</a> 2007-02-16 21:55 <a href="http://www.shnenglu.com/Jedimaster/archive/2007/02/16/18831.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用SAH实现kD?wi)快速分割模型实?/title><link>http://www.shnenglu.com/Jedimaster/archive/2007/02/15/18812.html</link><dc:creator>周L</dc:creator><author>周L</author><pubDate>Thu, 15 Feb 2007 14:31:00 GMT</pubDate><guid>http://www.shnenglu.com/Jedimaster/archive/2007/02/15/18812.html</guid><wfw:comment>http://www.shnenglu.com/Jedimaster/comments/18812.html</wfw:comment><comments>http://www.shnenglu.com/Jedimaster/archive/2007/02/15/18812.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.shnenglu.com/Jedimaster/comments/commentRss/18812.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Jedimaster/services/trackbacks/18812.html</trackback:ping><description><![CDATA[     摘要: kD ?wi)是二叉树(wi)结构的一个变U,当前主要用于加速光U跟t的遍历q程。最单的排序二叉?wi)以各个元素的大关pM为分割点Q? kD ?wi)简而言之就是从数据中选择一个“维度”构造一个超q面Ҏ(gu)据集q行分割。比如要对学生数据进行分Ԍ扑և哪些学生的生日小? 2 ? 18 日,那么只要遍历整个集合,把所有的数据分成。如果又要在W合W一ơ条...  <a href='http://www.shnenglu.com/Jedimaster/archive/2007/02/15/18812.html'>阅读全文</a><img src ="http://www.shnenglu.com/Jedimaster/aggbug/18812.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Jedimaster/" target="_blank">周L</a> 2007-02-15 22:31 <a href="http://www.shnenglu.com/Jedimaster/archive/2007/02/15/18812.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>木材工业机械dhttp://www.shnenglu.com/Jedimaster/archive/2007/02/11/18664.html周L周LSun, 11 Feb 2007 11:06:00 GMThttp://www.shnenglu.com/Jedimaster/archive/2007/02/11/18664.htmlhttp://www.shnenglu.com/Jedimaster/comments/18664.htmlhttp://www.shnenglu.com/Jedimaster/archive/2007/02/11/18664.html#Feedback0http://www.shnenglu.com/Jedimaster/comments/commentRss/18664.htmlhttp://www.shnenglu.com/Jedimaster/services/trackbacks/18664.html阅读全文

周L 2007-02-11 19:06 发表评论
]]>
游戏音乐谈http://www.shnenglu.com/Jedimaster/archive/2007/02/10/18621.html周L周LSat, 10 Feb 2007 11:49:00 GMThttp://www.shnenglu.com/Jedimaster/archive/2007/02/10/18621.htmlhttp://www.shnenglu.com/Jedimaster/comments/18621.htmlhttp://www.shnenglu.com/Jedimaster/archive/2007/02/10/18621.html#Feedback0http://www.shnenglu.com/Jedimaster/comments/commentRss/18621.htmlhttp://www.shnenglu.com/Jedimaster/services/trackbacks/18621.html阅读全文

周L 2007-02-10 19:49 发表评论
]]>
矩阵圣经 FOR 3D Computer Graphic Finalhttp://www.shnenglu.com/Jedimaster/archive/2006/12/10/16216.html周L周LSun, 10 Dec 2006 05:46:00 GMThttp://www.shnenglu.com/Jedimaster/archive/2006/12/10/16216.htmlhttp://www.shnenglu.com/Jedimaster/comments/16216.htmlhttp://www.shnenglu.com/Jedimaster/archive/2006/12/10/16216.html#Feedback0http://www.shnenglu.com/Jedimaster/comments/commentRss/16216.htmlhttp://www.shnenglu.com/Jedimaster/services/trackbacks/16216.html阅读全文

周L 2006-12-10 13:46 发表评论
]]>
用姓名汉语拼音首字母查找http://www.shnenglu.com/Jedimaster/archive/2006/11/23/15605.html周L周LThu, 23 Nov 2006 15:53:00 GMThttp://www.shnenglu.com/Jedimaster/archive/2006/11/23/15605.htmlhttp://www.shnenglu.com/Jedimaster/comments/15605.htmlhttp://www.shnenglu.com/Jedimaster/archive/2006/11/23/15605.html#Feedback2http://www.shnenglu.com/Jedimaster/comments/commentRss/15605.htmlhttp://www.shnenglu.com/Jedimaster/services/trackbacks/15605.html 

 1 //  Pyin.cpp : 定义控制台应用程序的入口炏V?br />  2 //
 3
 4 #include  " stdafx.h "
 5 using   namespace  std;
 6
 7 char  GetPYChar( char   *  c)
 8 {
 9     unsigned  char   *  array  =   new  unsigned  char [ 2 ];
10     array[ 0 ] = c[ 0 ];
11     array[ 1 ] = c[ 1 ];
12      int  i  =  ( short )(array[ 0 -   ' \0 ' *   256   +  (( short )(array[ 1 -   ' \0 ' ));
13
14      if  ( i  <   0xB0A1 return   ' * ' ;
15      if  ( i  <   0xB0C5 return   ' a ' ;
16      if  ( i  <   0xB2C1 return   ' b ' ;
17      if  ( i  <   0xB4EE return   ' c ' ;
18      if  ( i  <   0xB6EA return   ' d ' ;
19      if  ( i  <   0xB7A2 return   ' e ' ;
20      if  ( i  <   0xB8C1 return   ' f ' ;
21      if  ( i  <   0xB9FE return   ' g ' ;
22      if  ( i  <   0xBBF7 return   ' h ' ;
23      if  ( i  <   0xBFA6 return   ' g ' ;
24      if  ( i  <   0xC0AC return   ' k ' ;
25      if  ( i  <   0xC2E8 return   ' l ' ;
26      if  ( i  <   0xC4C3 return   ' m ' ;
27      if  ( i  <   0xC5B6 return   ' n ' ;
28      if  ( i  <   0xC5BE return   ' o ' ;
29      if  ( i  <   0xC6DA return   ' p ' ;
30      if  ( i  <   0xC8BB return   ' q ' ;
31      if  ( i  <   0xC8F6 return   ' r ' ;
32      if  ( i  <   0xCBFA return   ' s ' ;
33      if  ( i  <   0xCDDA return   ' t ' ;
34      if  ( i  <   0xCEF4 return   ' w ' ;
35      if  ( i  <   0xD1B9 return   ' x ' ;
36      if  ( i  <   0xD4D1 return   ' y ' ;
37      if  ( i  <   0xD7FA return   ' z ' ;
38      return   ' * ' ;
39 }

40
41 int  _tmain( int  argc, _TCHAR *  argv[])
42 {
43      char *  szArray  =   new   char [ 10 ];
44     strcpy(szArray, " q " );
45      char *  charptr  =  szArray;
46     cout << szArray << endl;
47     
48     cout << sizeof  szArray << endl;
49     cout << GetPYChar(charptr) << endl;
50     cout << GetPYChar(charptr + 2 ) << endl;
51     system( " PAUSE " );
52
53      return   0 ;
54 }

55
56

  老同学做小的编E设计,?sh)话L(fng)本,希望增加一个输入姓名汉语拼音首字母的方式快速找到条目,不知道如何实现。我找?jin)一下,觉得按照q种思\最单?br />  
  首先在条目的数据l构中增加一个动态字W串Q在生成节点的时候动态的把姓名的拼音准备好。等到用q个Ҏ(gu)搜烦(ch)条目的时候只需要对比拼音烦(ch)引,q回W合条g的节Ҏ(gu)针就可以?jin)?img src ="http://www.shnenglu.com/Jedimaster/aggbug/15605.html" width = "1" height = "1" />

周L 2006-11-23 23:53 发表评论
]]>
BattleField 2142引擎囑ŞE序员小访谈http://www.shnenglu.com/Jedimaster/archive/2006/11/10/14953.html周L周LFri, 10 Nov 2006 03:44:00 GMThttp://www.shnenglu.com/Jedimaster/archive/2006/11/10/14953.htmlhttp://www.shnenglu.com/Jedimaster/comments/14953.htmlhttp://www.shnenglu.com/Jedimaster/archive/2006/11/10/14953.html#Feedback0http://www.shnenglu.com/Jedimaster/comments/commentRss/14953.htmlhttp://www.shnenglu.com/Jedimaster/services/trackbacks/14953.html  最q在vLan上面鏖战BF2142Q着实被q个游戏深深地吸引住Q所以就开始关注vBFpd的引擎v来,只知道Script部分是Python完成的。在国外的一个站点上发现?jin)这个小的访谈Q翻译给大家仅供?jin)解?/p>

Continuing our series of occasional interviews with game developers about current and upcoming hardware and game graphics engines, we chat with Marko Kylmamaa, senior graphics programmer for Digital Illusion' Canadian studio.

  本期的采访对象是来自DICE的高U图像程序员Marko Kylmamaa先生?/p>

    FiringSquad: First, Intel and AMD are pushing dual core processors and within the next year four core processors are due to be released. How will DICE support this kind of tech in the Battlefield 2/2142 engine and will there be any need for special programming to fully support multi core CPUs in PCs?

  提问Q目前Intel与AMD力推双核CPUQ目前明q都准备推出Q核?j)的CPU。DICE准备如何在BF2引擎中加入对q种技术的支持Q如果这样做需要什么特D的~程技术么Q?/p>

    Marko Kylmamaa: While a program geared towards a single-core machine may run fine, with some exceptions, and perhaps even somewhat faster on a multi-core machine, in order to realize the real performance benefits a careful attention has to be paid into structuring the code for the correct granularity in mind, to make it suitable for multi-core execution. With the introduction of the next generation consoles and the PC hardware, the whole industry is in a learning phase for understanding the differences between the traditional multi-threading approaches, and multi-threading for multiple cores. DICE is working closely with hardware vendors in making sure that all of the future titles make the maximum use of the available multi-core architecture.

  回答Q本来单核心(j)的机器就可以q行得很好,有些时候甚臌快于多核机器。其实问题主要是在多核心(j)的处理比单核?j)复杂(cM于痛苦的多线E)(j)Q需要正的处理代码的结构与处理同步。随着下一代硬件的普及(qing)Q整个领域开始学?fn)多U程~程技术。DICE也在不断和硬件厂商深入合作发挥多核架构的性能?/p>

    FiringSquad: The 64-bit CPU has taken longer to really appear in mainstream PCs than some people expected. Do you think 64-bit CPUs will become more popular and how does DICE support it in their Battlefield 2/2142 engine ?

  提问Q?4位CPU的普?qing)速度过Z的预计到来得如此之快Q?zhn)认?f)Q4位cpu?x)流行v来么QDICE在BF2引擎中如何支持它呢?

    Marko Kylmamaa: One of the problems with harnessing the full power of 64-bit CPU?is the lack of adoption of 64-bit operating systems. Due to this it?difficult for the game developers to make full use of the 64-bit execution potential without providing a separate set of executables compiled for the different operating systems. The current Battlefield 2 technology has been thoroughly tested on the 64-bit architecture for guaranteeing a solid performance, and optimizations have been made where possible with such architectures in mind.

  回答Q由于现?4bit操作pȝ?4位EQͼ的支持不是非常好Q所以还无法完全发挥Q4位EQͼ的性能。如果不分别的ؓ(f)不同q_~写E序无法发挥6Q位的性能Q这是个隄。BF2已经在6Q位q_上经q测试与优化q?/p>

    FiringSquad: Game physics are getting more and more attention as well with more attention being put into destructible objects and better collisions. Where does DICE stand on this kind of support for its engine and what solution is best; having a dedicated card (AGEIA) using a graphics card (ATI/Havok) or using a CPU to handle it?

  提问Q游戏的物理Ҏ(gu)越来越受到重视。DICE如何看待它?(zhn)认为哪U方案最好呢Q是独立的AGEIA物理卡,q是NV/Havok的图形卡Q还是用CPU处理Q?/p>

    Marko Kylmamaa: Especially with multiplayer games in mind, it is difficult to make use of scaleable physics, since especially from the gameplay perspective all of the players must experience the same end result in simulation regardless of their hardware. This leads to a lot of the scalability of the physics being used for visual effects such as richer particle effects or fluid simulation. The GPU can of course be used for offloading the physics simulation from the CPU, but this will compete with the remaining processing time for graphics. Therefore in most cases it is necessary to strike the right balance between the CPU and GPU usage with the needs of the particular game in mind. The next generation technology at DICE is being built on the bleeding edge and will make use of very comprehensive physical modeling.

  回答Q在多h游戏中用物理特性是相当隑ց的,从玩家的视角来说Q所有的交互角色必须体验到相同的物理Ҏ(gu)而不关系他们说用的是何U硬件。已l用的物理Ҏ(gu)有比如体模拟_子pȝ{等。GQͼ可以分担一些EQͼ的物理模拟计工作,但是q样和囑Ş计算争抢?jin)宝늚资源。虽然如此,我们依旧需要^衡EQͼ和GQͼ之间的负载。DICE会(x)充分的利用下一代技术ؓ(f)玩家构徏最优秀的物理体验?/p>

    FiringSquad: HDR lighting is also getting a lot of attention in more PC games. How does the Battlefield 2/2142 engine support those features and how will that help the graphics in games that use it?

  提问QHDR光照效果也被来多的提?qing)。BF2/2142引擎是如何支持这U特效,而且它将如何提升游戏画面呢?

    Marko Kylmamaa: HDR lighting can add significantly to the perceived realism in the modern graphics engines. It is becoming an increasingly common feature as the new hardware supports full floating point surfaces and has the required processing power for supporting a multitude of such high end features.
    Some aspects of the HDR lighting were simulated especially in the Battlefield 2   Expansion Pack: Special Forces, for adding a degree of realism to the night-time look. The effect is fairly settle and was used mainly for fine tuning the overall look. Battlefield 2142 does not have night-time levels, so the same technology was not applicable to it, however there are a great number of special lighting effects for enhancing the desired futuristic look of the game.

  回答QHDR光照可以作ؓ(f)C囑Ş引擎的一个特性。在新硬件完全支持Q点计的方式下,它可以提高画面质量让它看h更真实,同时也需要相当的计算量。hdr在bf2特别武力 中被使用Q用于夜视效果。BF2142没有夜市(jng)场景Q所以也没有用这U技术(应该是HDRQ,不过我们使用其他的光照效果提高画面的真实感?/p>

    FiringSquad: More and more games are using extensive pixel and vertex shading for visual and art effects. How does the Battlefield 2/2142 engine support these features currently and how will pixel and vertex shaders be used in the future, particularly with Windows Vista and DirectX10 support?

  提问Q越来越q的游戏q泛使用PS?qing)VS技术提高画面质量。BF2/2142的引擎如何支持这些特Ԍ未来PS VS被如何使用Q特别是VISTA和DX10的来_(d)

    Marko Kylmamaa: The Battlefield 2 engine has been built on the DirectX9 architecture and is a fully shader based model. This allowed for a great flexibility during the development, and not supporting the older fixed function pipeline model allowed us to concentrate solely on the high end features. Battlefield 2142 is based on the improved Battlefield 2 technology and will be released later this year, so considering that the DirectX10 hardware won?be widely available just yet, it hasn?been beneficial to re-architect the engine into a DirectX10 based model for this release. This allowed the available time to be used for adding a number of new special effects and polishing the overall look of the existing engine.

  回答Q目前BF2引擎完全构徏于DX9架构Q这是个完全ZShader的模型。这提高?jin)开发的可׾~性,摆脱?jin)FF线模型让我们得以实现最高的特效。BF2142Z改进的BF2引擎技术,不久发布于世,所以考虑到DX10g不会(x)那么快的普及(qing)Q我们将引擎重新构徏以适应DX10的模型。这h们就有时间在以后的日子里l箋加入新的效果Q拓展现有的引擎?/p>

    FiringSquad: What other advanced hardware and graphical features do you think will be supported in upcoming Battlefield 2/2142 engine games and in future graphics engine?

  提问Q?zhn)认?f)BF2/2142引擎会(x)支持哪些高的硬件及(qing)其图形技术,未来的引擎呢Q?/p>

    Marko Kylmamaa: Battlefield 2142 will support a large range of high end special effects geared towards creating the desired futuristic look. These involve for example new atmospheric effects for creating a unique look that is quite different from Battlefield 2.

  回答QBF2142支持许多Ҏ(gu)用来构徏l丽真实的图像。比如,球体光照技术(Atomospheric EffectQ技术就和BF2中的不同?/p>

    FiringSquad: Finally, Mark Rein from Epic has said that Intel is hurting the PC gaming industry through its use of intergrated graphics in PCs. Is this a real threat and if so what can be done about this from the game developer's side?

  提问Q最后,EpicQ不要告诉我不知道,卛_发布的UT2007Q的Mark Rein_(d)Intel正在通过集成囑Şg损害PC游戏工业。从游戏开发者的角度来说(zhn)如何看待这个问题?

    Marko Kylmamaa: Intel produces what you could call the ultra-low end graphics cards for a market segment that typically doesn?wish to invest the money into a higher end, gaming geared hardware. Clearly there is a demand for this type of hardware as Intel?graphics cards boast a large user base. However, this does impose challenges for the games industry in our attempts at reaching especially for the casual gamer market. Hardware requirements for the next generation games keep growing faster than what is needed for running general applications, which increases the rift between the casual and hardcore hardware markets. I believe that we as an industry will also have to recognize the different requirements these markets impose.
    From the perspective of a developer, it can be difficult or in some cases practically impossible to make the high-end game run on the ultra-low end hardware. Supporting such scalability range in performance could be prohibitive with the required development time and cost in mind. It is ultimately up to each developer to find the correct range of hardware which allows for the desired market penetration.

  回答Q买Intel的显卡的人,是那些你称之ؓ(f)C端货的那些hQ他们其实都不会(x)花钱构徏一个游戏^台。虽然事实如此,׃q个原因的媄(jing)响,我们q是不太Ҏ(gu)开拓这L(fng)一个市(jng)场。游戏对g的需求L要远高于商用软gQ其实这也扩大了(jin)g?jng)场的层ơ差距。我怿整个工业?x)对看清楚这个问题。从一个游戏开发者的角度来说Q让高端游戏q行在低端^C着实困难。因支持q些性能不一的硬仉要提高开发的旉和花贏V更本上q是要开发者根据他们所要开发的?jng)场q一角度q行g的^台的选择?/p>

周L 2006-11-10 11:44 发表评论
]]>
GPUq可以做什?—?Brook for GPUs,Stream Computing On GPUshttp://www.shnenglu.com/Jedimaster/archive/2006/10/14/13689.html周L周LSat, 14 Oct 2006 14:21:00 GMThttp://www.shnenglu.com/Jedimaster/archive/2006/10/14/13689.htmlhttp://www.shnenglu.com/Jedimaster/comments/13689.htmlhttp://www.shnenglu.com/Jedimaster/archive/2006/10/14/13689.html#Feedback1http://www.shnenglu.com/Jedimaster/comments/commentRss/13689.htmlhttp://www.shnenglu.com/Jedimaster/services/trackbacks/13689.html
    GPU的SIMD性能强Q比CPU强得太多太多Q由此带来异常强(zhn)的点q算性能Q请看下图?br />
gpgpu.JPG

    d韻I(x)不知道我?200A排在什么地方哈哈?br />
    其实上图有偏颇,q张图节选自Siggraph2004Q而现在ATi 1800XT的SIMD性能已经过?800好多Q可不是游戏性能。不q可以看出,比CPU的Q点运性能高好几倍是不真的事实,可是如何利用呢?

    可编E硬件的到来为我们开?jin)一个好_(d)也许未来计算机硬件的发展势是Q通用计算Generic ComputingQGCQ自造词汇,可不是垃圾收集)(j)。显卡一直以来都是和Pixel打交道,dTexelQ处理PrimitiveQ写入FrameBufferQؓ(f)SIMD的应用打下了(jin)坚实的基。显卡芯片从开始就是ƈ行设计的Q这样从U理单元dTexel时才能发挥效力,当年大名鼎鼎的Riva TNT2的意思其实是TwiNs Textures双纹理,而不是黄色炸药。Geforce3依靠d的几个昂늚register实现?jin)Vertex Programming。NV收购3dfxQ推出NV30pd芯片Q伴随着DX8为PC机引入ShaderQ开创PC机图像画质飞跃的先河Q如今热门游戏大多数已经使用可编E着色技术用来实C往在工作站上才能实现的效果Q这是Z么如今看游戏实时演算的画面都比当qSquare动用sgi工作站集渲染出来的FF8动画效果好的原因。其实高UCG囑Ş理论?0q代已l相当成熟,比如78q的Shadow mappingQW(xu)hite的Ray-tracing{等。那些技术以后我?x)慢慢给大家介绍Q大家不妨去NVIDIA下蝲一个SDK研究一下,q有MS DX SDK也是必需的?br />
    先说目前可编E硬件用作通用计算的局限,而且在我看来Q这个局限在Vista与DX10行后可能依旧得不到解决Q那是API的问题。显卡厂商提供的驱动Q无一例外的都是彻底ؓ(f)昄服务的,而不是用来标榜自己是GPGPU的。虽然说都有?jin)自q本地~译器(主要是用于编译GLSL string codesQHLSL可以预先~译好,然后再由驱动载入执行Q,可是依旧不是Z(jin)计算非图形数据服务。于是找C(jin)Sh。Sh是一个很有趣的东西,使用?jin)metaprogramming技术,模拟囑Ş语言的算法,~译的时候{化ؓ(f)对应的低{ASM语句Q很多Graphic Slide里面q行核心(j)法展示的时候都用的Sh。有兴趣地可以到q里看一下。强烈徏议显卡厂商推出可以直接进行计的驱动Q不要和FrameBuffer牉|Q可以直接通过Bus写入内存Q技术上q不难,也许是个商业问题。关键时Lq是商业左右技术的发展Q而不是技术h员的一厢情愿就可以左右世界发展Q如今已l不是工业革命时代了(jin)?br />
    l大家介l来自Starford University?a >BrookQ听h好像q告Q不q在Shading Language界可是有Starford Shading Language得一席之地的Q。Brook可以理解为是一个C~译器,只不q它~译的不是BinQ而是C++ string codesQ而且是着色计语句数l。比如有q样一DBrook代码Q简单的Alpha混合Q不对,不像Q反正就是它?jin)?x)

kernel void saxpy(float alpha, float4 x<>, float4 y<>,
out float4 result<>) {
result 
= (alpha * x) + y;
}
   
    ~译成最l的C++代码变成Q?br />
static const char* __saxpy_fp30[] = {
"!!FP1.0\n"
"DECLARE alpha;\n"
"TEX R0, f[TEX0].xyxx, TEX0, RECT;\n"
"TEX R1, f[TEX1].xyxx, TEX1, RECT;\n"
"MADR o[COLR], alpha.x, R0, R1;\n"
"END \n"
"##!!BRCC\n"
"##narg:4\n"
"##c:1:alpha\n"
"##s:4:x\n"
"##s:4:y\n"
"##o:4:result\n"
"##workspace:1024\n"
"##!!multipleOutputInfo:0:1:\n"
"",NULL};
void saxpy (const float alpha,const ::brook::stream& x,const ::brook::stream& y,
::brook::stream
& result) {
    static const void *__saxpy_fp[] = {"fp30", __saxpy_fp30, "ps20", __saxpy_ps20,
                    "cpu", (void *) __saxpy_cpu, NULL, NULL };
    static __BRTKernel k(__saxpy_fp);
    k
->PushConstant(alpha);
    k
->PushStream(x);
    k
->PushStream(y);
    k
->PushOutput(result);
    k
->Map();
}
   
    q不是Ua(b)的Shading Language么。不q值得注意的是QBrook通过q行库进行封装,把GPU当作Streaming ProcessorQ由CPUq行控制Q计数据ƈ输出。目前似乎只能进行图形的计算Q比如FFTQRay-Tracing{演C,q没有到达能够计pi的程度?br />
    思考了(jin)一下。精度问题需要解冻IFP16刚刚开始广泛用,FP32q不能够支持gqo(h)。FP32仅仅只是IEEE754 float的精度而已Q更本谈不上double的精度,用在需要精度较高的地方可能q不是很适合。如我设想那Pq行pi的几百万位的计算Q目前来说不太可能,首先QShading Language从来没有提供地址的操作,也就是无法选泽Pixel的位|,也就是无法对FrameBufferq行准确定位。如果可以解册个问题,那么可以进行真正意义上的通用计算Q那个时候FrameBuffer只是一个暂时的~冲容器而已?br />
    SIMD的物理计可以相当的强?zhn)。物理特性计都是强调同时性的Q而GPU可以同时q行计算Q充分发挥了(jin)自己的优势,难怪NVIDIA要和Havokq行合作。记得以前看q博客园中一位先生写的物理引擎,着实震惊,我徏议他不妨研究研究q一块。Stream的概念将在DX10上得到彻底的诠释Q不妨看看我以前译的DX10文章Q其中Geometry Shader很有意思?br />
    我期待下一代API出现Q一个崭新的软硬件组合方案,q样可能ؓ(f)Display Adapterq个古老的东西带来真正的革命。值得注意的是QAMD已经收购?jin)ATiQ而Intelq在?00亿美元收购NV的h(hun)D估的时候,也许下一代变革已l开始了(jin)Q让我们拭目以待?br />
    提到的东西可以在q里扑ֈ
    Brook http://sourceforge.net/projects/brook
    libSh http://sourceforge.net/projects/libsh


周L 2006-10-14 22:21 发表评论
]]>
Wow服务器解析(一Q?/title><link>http://www.shnenglu.com/Jedimaster/archive/2006/10/14/13674.html</link><dc:creator>周L</dc:creator><author>周L</author><pubDate>Sat, 14 Oct 2006 08:27:00 GMT</pubDate><guid>http://www.shnenglu.com/Jedimaster/archive/2006/10/14/13674.html</guid><wfw:comment>http://www.shnenglu.com/Jedimaster/comments/13674.html</wfw:comment><comments>http://www.shnenglu.com/Jedimaster/archive/2006/10/14/13674.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.shnenglu.com/Jedimaster/comments/commentRss/13674.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Jedimaster/services/trackbacks/13674.html</trackback:ping><description><![CDATA[ <p class="MsoNormal" style="TEXT-ALIGN: center" align="center"> <span lang="EN-US">Wow</span> <span style="FONT-FAMILY: 宋体">服务器解析(一Q?/span> </p> <p class="MsoNormal"> <span lang="EN-US"> <span>       </span> </span> <span style="FONT-FAMILY: 宋体">最q抽I研I了(jin)一?/span> <span lang="EN-US">WOW</span> <span style="FONT-FAMILY: 宋体">的服务器l构Q也Z从那些项目中又复?fn)?jin)一?/span> <span lang="EN-US">ManGOs</span> <span style="FONT-FAMILY: 宋体">?/span> <span lang="EN-US">template</span> <span style="FONT-FAMILY: 宋体">方式?/span> <span lang="EN-US">SingleTon</span> <span style="FONT-FAMILY: 宋体">的用方法。不q有些不明白的,如果q样Q?/span> <span lang="EN-US">SingleTon<Master></span> <span style="FONT-FAMILY: 宋体">q样的用,如果传入的类型不同,N传出?/span> <span lang="EN-US">static</span> <span style="FONT-FAMILY: 宋体">是一L(fng)Q不可能吧,如果打印?/span> <span lang="EN-US">this</span> <span style="FONT-FAMILY: 宋体">指针看看呢?抽空我再试试?/span> <span lang="EN-US">SingleTon</span> <span style="FONT-FAMILY: 宋体">在游戏设计中是相当重要的设计模式Q大家一定要好好学习(fn)?/span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 21pt; TEXT-INDENT: -21pt"> <span style="FONT-FAMILY: 宋体">认证q程</span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span lang="EN-US">Wow</span> <span style="FONT-FAMILY: 宋体">的服务器有两部分l成Q?/span> <span lang="EN-US">Logon Server</span> <span style="FONT-FAMILY: 宋体">Q以下简U?/span> <span lang="EN-US">LS</span> <span style="FONT-FAMILY: 宋体">Q和</span> <span lang="EN-US">Realm Server</span> <span style="FONT-FAMILY: 宋体">Q以下简U?/span> <span lang="EN-US">RS</span> <span style="FONT-FAMILY: 宋体">Q?/span> <span lang="EN-US">LS</span> <span style="FONT-FAMILY: 宋体">接受来自</span> <span lang="EN-US">Wow</span> <span style="FONT-FAMILY: 宋体">客户端的q接Q主要有以下几步完成Q?/span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"> <span style="FONT-FAMILY: 宋体">(g)查客L(fng)版本区域{信息,(g)察̎号密?/span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"> <span style="FONT-FAMILY: 宋体">开?/span> <span lang="EN-US">/</span> <span style="FONT-FAMILY: 宋体">l箋传?/span> <span lang="EN-US">Patch</span> <span style="FONT-FAMILY: 宋体">Q如果有Q?/span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"> <span style="FONT-FAMILY: 宋体">与客L(fng)q行</span> <span lang="EN-US">SRP6</span> <span style="FONT-FAMILY: 宋体">的加密会(x)话,把生成的密匙写入数据?/span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"> <span style="FONT-FAMILY: 宋体">Ҏ(gu)客户端请求发?/span> <span lang="EN-US">Realms</span> <span style="FONT-FAMILY: 宋体">列表</span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 21pt"> <span style="FONT-FAMILY: 宋体">当客L(fng)选择?/span> <span lang="EN-US">Realms</span> <span style="FONT-FAMILY: 宋体">后,客户端就?/span> <span lang="EN-US">LS</span> <span style="FONT-FAMILY: 宋体">断开Q连接到</span> <span lang="EN-US">RS</span> <span style="FONT-FAMILY: 宋体">上:(x)</span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"> <span style="FONT-FAMILY: 宋体">认证Q用刚才生成的客户端密?/span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"> <span style="FONT-FAMILY: 宋体">如通过Q进行游戏@环的交互</span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span lang="EN-US">RS</span> <span style="FONT-FAMILY: 宋体">?/span> <span lang="EN-US">LS</span> <span style="FONT-FAMILY: 宋体">使用相同的数据库Q?/span> <span lang="EN-US">SRP6</span> <span style="FONT-FAMILY: 宋体">密匙?/span> <span lang="EN-US">LS</span> <span style="FONT-FAMILY: 宋体">生成q写?/span> <span lang="EN-US">DB</span> <span style="FONT-FAMILY: 宋体">后还要由</span> <span lang="EN-US">RS</span> <span style="FONT-FAMILY: 宋体">d出来q行下一步的认证?/span> </p> <p class="MsoNormal"> <span lang="EN-US"> <?xml:namespace prefix = o /?> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 21pt; TEXT-INDENT: -21pt"> <span lang="EN-US">Logon Server</span> <span style="FONT-FAMILY: 宋体">详解</span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 21pt"> <span style="FONT-FAMILY: 宋体">基本的连接过E如下:(x)</span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"> <span style="FONT-FAMILY: 宋体">客户端准备连接,发?/span> <span lang="EN-US">CMD_AUTH_LOGON_CHALLENGE</span> <span style="FONT-FAMILY: 宋体">数据包,包含?jin)所有登陆所需要的数据比如用户名密码等</span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"> <span style="FONT-FAMILY: 宋体">服务端返?/span> <span lang="EN-US">CMD_AUTH_LOGON_CHALLENGE</span> <span style="FONT-FAMILY: 宋体">数据包,填充字段包括有效验证Q以?qing)计好的服务?/span> <span lang="EN-US">SRP6</span> <span style="FONT-FAMILY: 宋体">数据</span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"> <span style="FONT-FAMILY: 宋体">如果有效Q客L(fng)发?/span> <span lang="EN-US">CMD_AUTH_LOGON_PROOF</span> <span style="FONT-FAMILY: 宋体">数据包,q把自己计算?/span> <span lang="EN-US">SRP6</span> <span style="FONT-FAMILY: 宋体">数据填充q去</span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"> <span style="FONT-FAMILY: 宋体">服务端进行验证,发送回</span> <span lang="EN-US">CMD_AUTH_LOGON_PROOF</span> <span style="FONT-FAMILY: 宋体">Q包含了(jin)</span> <span lang="EN-US">SRP6</span> <span style="FONT-FAMILY: 宋体">验证的结?/span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"> <span style="FONT-FAMILY: 宋体">如果一切正常,客户端发?/span> <span lang="EN-US">CMD_REALM_LIST</span> <span style="FONT-FAMILY: 宋体">数据包,h发送有效的</span> <span lang="EN-US">Realm</span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"> <span style="FONT-FAMILY: 宋体">服务器回?/span> <span lang="EN-US">CMD_REALM_LIST</span> <span style="FONT-FAMILY: 宋体">数据报,q填充过客户端需要的</span> <span lang="EN-US">Realm</span> <span style="FONT-FAMILY: 宋体">数据</span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 21pt"> <span style="FONT-FAMILY: 宋体">客户端的</span> <span lang="EN-US">Realm</span> <span style="FONT-FAMILY: 宋体">列表每隔</span> <span lang="EN-US">3-4</span> <span style="FONT-FAMILY: 宋体">U就?x)从服务器端h一ơ?/span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span lang="EN-US"> <o:p> </o:p> </span> <span style="FONT-FAMILY: 宋体">q个</span> <span lang="EN-US">SPR6</span> <span style="FONT-FAMILY: 宋体">是一U什么样的加密手D呢Q以前我也没有用q,看得最多的?/span> <span lang="EN-US">MD5SHA</span> <span style="FONT-FAMILY: 宋体">{?/span> <span lang="EN-US">hash</span> <span style="FONT-FAMILY: 宋体">法?/span> <span lang="EN-US">SPR</span> <span style="FONT-FAMILY: 宋体">法吸取?/span> <span lang="EN-US">EKE</span> <span style="FONT-FAMILY: 宋体">cd法的优点进行了(jin)改进Q非帔R合于网l的认证服务Q如果我没有记错Q?/span> <span lang="EN-US">J2EE</span> <span style="FONT-FAMILY: 宋体">包含?jin)这个算法的实现。下面简单介l一?/span> <span lang="EN-US">SRP6a</span> <span style="FONT-FAMILY: 宋体">q作机制Q原文见q里?/span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span lang="EN-US">N<span>     </span>N = 2q + 1</span> <span style="FONT-FAMILY: 宋体">Q?/span> <span lang="EN-US">q</span> <span style="FONT-FAMILY: 宋体">是一个素敎ͼ下面所有的取模q算都和q个</span> <span lang="EN-US">N</span> <span style="FONT-FAMILY: 宋体">有关</span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span style="FONT-FAMILY: 宋体"> </span> <span lang="EN-US">g <span>    </span></span> <span style="FONT-FAMILY: 宋体">一?/span> <span lang="EN-US">N</span> <span style="FONT-FAMILY: 宋体">的模敎ͼ应该?/span> <span lang="EN-US">2</span> <span style="FONT-FAMILY: 宋体">个巨大的素数乘得?/span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span lang="EN-US">k<span>     </span>k = H(N,G) </span> <span style="FONT-FAMILY: 宋体">?/span> <span lang="EN-US">SRP6</span> <span style="FONT-FAMILY: 宋体">?/span> <span lang="EN-US">k = 3</span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span lang="EN-US">s<span>      </span>User’s Salt</span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span lang="EN-US">I<span>      </span></span> <span style="FONT-FAMILY: 宋体">用户?/span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span lang="EN-US">p<span>     </span></span> <span style="FONT-FAMILY: 宋体">明文密码</span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span lang="EN-US">H()<span>  </span></span> <span style="FONT-FAMILY: 宋体">单向</span> <span lang="EN-US">hash</span> <span style="FONT-FAMILY: 宋体">函数</span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span lang="EN-US">^<span>      </span></span> <span style="FONT-FAMILY: 宋体">求幂q算</span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span lang="EN-US">u<span>     </span></span> <span style="FONT-FAMILY: 宋体">随机?/span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span lang="EN-US">a,b<span>   </span></span> <span style="FONT-FAMILY: 宋体">保密的(f)时数?/span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span lang="EN-US">A,B<span>  </span></span> <span style="FONT-FAMILY: 宋体">公开的(f)时数?/span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span lang="EN-US">x<span>     </span></span> <span style="FONT-FAMILY: 宋体">U有密匙Q从</span> <span lang="EN-US">p</span> <span style="FONT-FAMILY: 宋体">?/span> <span lang="EN-US">s</span> <span style="FONT-FAMILY: 宋体">计算得来Q?/span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span lang="EN-US">v<span>     </span></span> <span style="FONT-FAMILY: 宋体">密码验证数字</span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span style="FONT-FAMILY: 宋体">其中</span> <span lang="EN-US">x<span>  </span>=<span>  </span>H(s,p)</span> <span style="FONT-FAMILY: 宋体">?/span> <span lang="EN-US">v = g ^ x</span> <span style="FONT-FAMILY: 宋体">Q?/span> <span lang="EN-US">s</span> <span style="FONT-FAMILY: 宋体">是随机选择的,</span> <span lang="EN-US">v</span> <span style="FONT-FAMILY: 宋体">用来来验证密码?/span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span style="FONT-FAMILY: 宋体">L?/span> <span lang="EN-US">{ I,s,v }</span> <span style="FONT-FAMILY: 宋体">存入数据库。认证的q程如下Q?/span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span lang="EN-US"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span style="FONT-FAMILY: 宋体">客户向主机发?/span> <span lang="EN-US">I</span> <span style="FONT-FAMILY: 宋体">Q?/span> <span lang="EN-US">A = g ^ a</span> <span style="FONT-FAMILY: 宋体">Q?/span> <span lang="EN-US">a</span> <span style="FONT-FAMILY: 宋体">是一个随机数Q?/span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span style="FONT-FAMILY: 宋体">L向客户发?/span> <span lang="EN-US">s</span> <span style="FONT-FAMILY: 宋体">Q?/span> <span lang="EN-US">B = kv + g^b</span> <span style="FONT-FAMILY: 宋体">Q发?/span> <span lang="EN-US">salt</span> <span style="FONT-FAMILY: 宋体">Q?/span> <span lang="EN-US">b</span> <span style="FONT-FAMILY: 宋体">是一个随机数字)(j)</span> <span lang="EN-US"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span style="FONT-FAMILY: 宋体">双方同时计算</span> <span lang="EN-US">u = H(A,B)</span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span style="FONT-FAMILY: 宋体">客户计算机算</span> <span lang="EN-US">x = H(s,p)</span> <span style="FONT-FAMILY: 宋体">Q开?/span> <span lang="EN-US">hash</span> <span style="FONT-FAMILY: 宋体">密码Q,</span> <span lang="EN-US">S = ((B - kg^x) ^ (a + ux) )</span> <span style="FONT-FAMILY: 宋体">Q?/span> <span lang="EN-US">K = H(S)</span> <span style="FONT-FAMILY: 宋体">Q(开始计会(x)?/span> <span lang="EN-US">Key</span> <span style="FONT-FAMILY: 宋体">Q?/span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span style="FONT-FAMILY: 宋体">L计算</span> <span lang="EN-US">S = (Av^u)^b</span> <span style="FONT-FAMILY: 宋体">Q?/span> <span lang="EN-US">K = H(S)</span> <span style="FONT-FAMILY: 宋体">Q也生成?x)?/span> <span lang="EN-US">Key</span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span lang="EN-US"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span style="FONT-FAMILY: 宋体">Z(jin)完成认证Q双方交?/span> <span lang="EN-US">Key</span> <span style="FONT-FAMILY: 宋体">Q各自进行如下的计算Q?/span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span style="FONT-FAMILY: 宋体">客户接收到来自主机的</span> <span lang="EN-US">key</span> <span style="FONT-FAMILY: 宋体">后,计算</span> <span lang="EN-US">H(A,M,K)</span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span style="FONT-FAMILY: 宋体">同理Q主?/span> <span lang="EN-US">M = H(H(N) xor H(g), H(I), s, A, B, K)</span> <span style="FONT-FAMILY: 宋体">Q验证是否合自己储存的数值匹配。至此完成验证过E?/span> </p> <p class="MsoNormal"> <span lang="EN-US"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 21pt; TEXT-INDENT: -21pt"> <span lang="EN-US"> <span>三?/span> </span> <span lang="EN-US">Realm Server</span> <span style="FONT-FAMILY: 宋体">详解</span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 21pt"> <span style="FONT-FAMILY: 宋体">?/span> <span lang="EN-US">LS</span> <span style="FONT-FAMILY: 宋体">断开后,开始和</span> <span lang="EN-US">RS</span> <span style="FONT-FAMILY: 宋体">认证Q?/span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"> <span style="FONT-FAMILY: 宋体">q接?/span> <span lang="EN-US">RS</span> <span style="FONT-FAMILY: 宋体">Q向服务器发?/span> <span lang="EN-US">SMSG_AUTH_CHALLENGE</span> <span style="FONT-FAMILY: 宋体">数据包,包含上次所用的随机U子</span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"> <span style="FONT-FAMILY: 宋体">服务器发送回</span> <span lang="EN-US">SMSG_AUTH_CHALLENG</span> <span style="FONT-FAMILY: 宋体">。客L(fng)从服务器端发送回来的U子?/span> <span lang="EN-US">SRP6</span> <span style="FONT-FAMILY: 宋体">数据中生随机种子,生成</span> <span lang="EN-US">SHA1</span> <span style="FONT-FAMILY: 宋体">字符Ԍ用这些数据生?/span> <span lang="EN-US">CMSG_AUITH_SESSION</span> <span style="FONT-FAMILY: 宋体">数据包,发送给服务端?/span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 21pt"> <span style="FONT-FAMILY: 宋体">需要注意的是,q个q程是没有经q加密的。当服务端收到认证回复后Q通过客户端生的U子也生成一?/span> <span lang="EN-US">SHA1</span> <span style="FONT-FAMILY: 宋体">串和来自客户端的q行Ҏ(gu)Q如果相同,一?/span> <span lang="EN-US">OK</span> <span style="FONT-FAMILY: 宋体">?/span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 21pt"> <span lang="EN-US"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span style="FONT-FAMILY: 宋体">下面看一下对账号创徏的角色等操作q行分析。一个̎h多可以徏</span> <span lang="EN-US">50</span> <span style="FONT-FAMILY: 宋体">个角色吧Q我q没有玩q,只是看了(jin)一?/span> <span lang="EN-US">Manual</span> <span style="FONT-FAMILY: 宋体">?/span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"> <span style="FONT-FAMILY: 宋体">客户端发送一?/span><span lang="EN-US">CMSG_CHAR_ENUM</span><span style="FONT-FAMILY: 宋体">数据包请求接受角?/span></p> <p class="MsoNormal" style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"> <span style="FONT-FAMILY: 宋体">服务端发送回包含所有角色信息的</span> <span lang="EN-US">CMSG_CHAR_ENUM</span> <span style="FONT-FAMILY: 宋体">数据?/span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"> <span style="FONT-FAMILY: 宋体">q里客户端可以对q些角色q行操作?jin)?/span> <span lang="EN-US">CMSG_CHAR_CREATE</span> <span style="FONT-FAMILY: 宋体">Q?/span> <span lang="EN-US">CMSG_CHAR_DELETE</span> <span style="FONT-FAMILY: 宋体">Q?/span> <span lang="EN-US">CMSG_CHAR_PLAYER_LOGIN</span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"> <span style="FONT-FAMILY: 宋体">角色登陆完成后,服务器发送回</span> <span lang="EN-US">SMSG_CHAR_DATA</span> <span style="FONT-FAMILY: 宋体">数据?/span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 21pt"> <span lang="EN-US"> <o:p> </o:p> </span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 21pt"> <span style="FONT-FAMILY: 宋体"> <br />在游戏@环中是如何操作的呢?</span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"> <span style="FONT-FAMILY: 宋体">如果玩家立刻退出游戏,那么客户端发?/span> <span lang="EN-US">CMSG_PLAYER_LOGOUT</span> <span style="FONT-FAMILY: 宋体">Q服务器回复</span> <span lang="EN-US">SMSG_LOGOUT_COMPLETE</span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"> <span style="FONT-FAMILY: 宋体">如果玩家选择E后退出游戏,发?/span> <span lang="EN-US">CMSG_LOGOUT_REQUEST</span> <span style="FONT-FAMILY: 宋体">。服务端回复</span> <span lang="EN-US">SMSG_LOGOUT_RESPONSE</span> <span style="FONT-FAMILY: 宋体">。如果玩家在倒计旉D退出,发?/span> <span lang="EN-US">CMSG_PLAYER_LOGOUT</span> <span style="FONT-FAMILY: 宋体">Q那么玩家的角色依旧{倒计时完成后再退出?/span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"> <span style="FONT-FAMILY: 宋体">如果玩家中断?jin)退出l游戏,发?/span> <span lang="EN-US">CMSG_LOGOUT_CANCEL</span> <span style="FONT-FAMILY: 宋体">Q服务器回复</span> <span lang="EN-US">SMSG_LOGOUT_CANCEL_ACK</span> <span style="FONT-FAMILY: 宋体">?/span> <span lang="EN-US"> <o:p> </o:p> </span> </p> <img src ="http://www.shnenglu.com/Jedimaster/aggbug/13674.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Jedimaster/" target="_blank">周L</a> 2006-10-14 16:27 <a href="http://www.shnenglu.com/Jedimaster/archive/2006/10/14/13674.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>World Of Warcraft Server Source Topichttp://www.shnenglu.com/Jedimaster/archive/2006/10/05/13373.html周L周LThu, 05 Oct 2006 05:59:00 GMThttp://www.shnenglu.com/Jedimaster/archive/2006/10/05/13373.htmlhttp://www.shnenglu.com/Jedimaster/comments/13373.htmlhttp://www.shnenglu.com/Jedimaster/archive/2006/10/05/13373.html#Feedback9http://www.shnenglu.com/Jedimaster/comments/commentRss/13373.htmlhttp://www.shnenglu.com/Jedimaster/services/trackbacks/13373.html声明QWorld Of WarcraftQ魔兽世界相关程序的源代码所有权归暴雪公司Blizzard所有。WowWow只是一个Wow的服务器端的模拟E序Q由俄罗斯黑客逆向工程得来Q在q里仅供学习(fn)|络游戏服务器端或者交之用,没有M来自于暴雪公司或者及(qing)其中国运行商?ji)城的源代码。Q何个人或者组l用此源代码经营可能违反法律的事业zd与本人无兟뀂特此声明?/font>

讨厌中国的这些个破网站,下蝲源代码竟然还要花q请什么破VIPQ殊不知sf.net中好的代码多的是?br />
q个是我从国外的一个论坛中拖回来的Q由于自q盘装不下Wow客户端所以也没有测试过Q有条g的可以试试看?br />
我打花些时间用C++重新写一遍,虽然说已l有?jin)类似的MangosQ实在不喜欢C# JAVA之类的虚拟机语言?netZ要蟩出来和我争C#不是虚拟Y件云云,懒得搭理。编译出来的代码很小Q程序启动速度奇慢无比Q还必须?net Frameworks的支持,ȝ(ch)?br />
最早的是WowEmuQ许多单机版Wow附带的也是q个我就不列出地址?jin),BT上多的是?br />
然后是WowwowQ可是它的内总码是不公开的,你可以看到decompiler云云
下蝲地址
附上一个有一些代码的Wowwow Alpha v8.3
下蝲地址

目前我正在分析的是MangosQ老l(f)竟然在sf.net中,介绍是一Ҏ(gu)有提到World of WarQ可是实际上它运行的是它?br />?a >q里?br />
Ƣ迎交流Q如果?zhn)觉得好请回复我一下谢谢咯~~~


周L 2006-10-05 13:59 发表评论
]]>
用SIMD指o(h)优化E序之抛砖引?/title><link>http://www.shnenglu.com/Jedimaster/archive/2006/08/24/11650.html</link><dc:creator>周L</dc:creator><author>周L</author><pubDate>Thu, 24 Aug 2006 07:37:00 GMT</pubDate><guid>http://www.shnenglu.com/Jedimaster/archive/2006/08/24/11650.html</guid><wfw:comment>http://www.shnenglu.com/Jedimaster/comments/11650.html</wfw:comment><comments>http://www.shnenglu.com/Jedimaster/archive/2006/08/24/11650.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.shnenglu.com/Jedimaster/comments/commentRss/11650.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Jedimaster/services/trackbacks/11650.html</trackback:ping><description><![CDATA[ <span style="FONT-FAMILY: 宋体"> <?xml:namespace prefix = o /?> <o:p> </o:p>谈</span> <span lang="EN-US">CPU</span> <span style="FONT-FAMILY: 宋体">~存体系</span> <p class="MsoNormal"> <span style="FONT-FAMILY: 宋体">  现在?/span> <span lang="EN-US">CPU</span> <span style="FONT-FAMILY: 宋体">依旧采用冯诺伊曼体系Q喜Ƣ像d一样从头执行到,中途没有Q何的跌{停顿{待。可是现实情冉|Q大部分E序里面q是不?/span> <span lang="EN-US">IF ELSE</span> <span style="FONT-FAMILY: 宋体">之类的判断,循环更加得多了(jin)。如何优化@环大家可以自q,其实不难Q可以参考一下《高质量</span> <span lang="EN-US">C\C++</span> <span style="FONT-FAMILY: 宋体">~程指南?/span> </p> <p class="MsoNormal"> <span style="FONT-FAMILY: 宋体">  现在</span> <span lang="EN-US">CPU</span> <span style="FONT-FAMILY: 宋体">上都?/span> <span lang="EN-US">Level 1</span> <span style="FONT-FAMILY: 宋体">指o(h)~存Q又叫做</span> <span lang="EN-US">L1 Trace</span> <span style="FONT-FAMILY: 宋体">Q与</span> <span lang="EN-US">Level 1</span> <span style="FONT-FAMILY: 宋体">数据~存Q?/span> <span lang="EN-US">L1 Data Cache</span> <span style="FONT-FAMILY: 宋体">Q?/span> <span lang="EN-US">PMMX</span> <span style="FONT-FAMILY: 宋体">Q?/span> <span lang="EN-US">P2</span> <span style="FONT-FAMILY: 宋体">Q?/span> <span lang="EN-US">P3</span> <span style="FONT-FAMILY: 宋体">Z者都准备?/span> <span lang="EN-US">16kb</span> <span style="FONT-FAMILY: 宋体">Q我?/span> <span lang="EN-US">P4 Northwood</span> <span style="FONT-FAMILY: 宋体">Q以下简U?/span> <span lang="EN-US">P4NW</span> <span style="FONT-FAMILY: 宋体">Q有</span> <span lang="EN-US">8kbL1</span> <span style="FONT-FAMILY: 宋体">数据~存?/span> <span lang="EN-US">12kb</span> <span style="FONT-FAMILY: 宋体">指o(h)~存?/span> <span lang="EN-US">CPU</span> <span style="FONT-FAMILY: 宋体">d</span> <span lang="EN-US">L1 Data Cache</span> <span style="FONT-FAMILY: 宋体">中的数据只需?/span> <span lang="EN-US">1</span> <span style="FONT-FAMILY: 宋体">个时钟周期,速度非常快,应该是仅ơ于寄存器了(jin)。数据缓存是?/span> <span lang="EN-US">256</span> <span style="FONT-FAMILY: 宋体">或?/span> <span lang="EN-US">512</span> <span style="FONT-FAMILY: 宋体">?/span> <span lang="EN-US">32bytes</span> <span style="FONT-FAMILY: 宋体">l成的,也就?/span> <span lang="EN-US">32bytes</span> <span style="FONT-FAMILY: 宋体">寚w的,?/span> <span lang="EN-US">P4NW</span> <span style="FONT-FAMILY: 宋体">?/span> <span lang="EN-US">64bytes</span> <span style="FONT-FAMILY: 宋体">字节寚w的,q行</span> <span lang="EN-US">4</span> <span style="FONT-FAMILY: 宋体">路,d</span> <span lang="EN-US">128</span> <span style="FONT-FAMILY: 宋体">行。当你处理的数据没有载入~存的时候,</span> <span lang="EN-US">CPU</span> <span style="FONT-FAMILY: 宋体">从内存d~存行大的数据Q所以缓存行L寚w到能?/span> <span lang="EN-US">32</span> <span style="FONT-FAMILY: 宋体">整除的物理地址?/span> <span lang="EN-US">CPU</span> <span style="FONT-FAMILY: 宋体">?/span> <span lang="EN-US">L1</span> <span style="FONT-FAMILY: 宋体">数据~存中的数据q行操作是最快速的。所以推荐内存地址最L(fng)?/span> <span lang="EN-US">32byte</span> <span style="FONT-FAMILY: 宋体">寚w的。目前编译器在这个地方的优化已经非常好了(jin)Q一般都?/span> <span lang="EN-US">4byte</span> <span style="FONT-FAMILY: 宋体">寚wQ当然也都是</span> <span lang="EN-US">32</span> <span style="FONT-FAMILY: 宋体">寚w的。在后面你将?x)看刎ͼ?/span> <span lang="EN-US">SSE2</span> <span style="FONT-FAMILY: 宋体">要求数据?/span> <span lang="EN-US">16</span> <span style="FONT-FAMILY: 宋体">字节寚w的?/span> </p> <p class="MsoNormal"> <span lang="EN-US"> <span> </span> </span> <span style="FONT-FAMILY: 宋体">  ~存cM一?/span> <span lang="EN-US">C++ set</span> <span style="FONT-FAMILY: 宋体">容器Q但是不能赋值到一个Q意的内存地址。每行本w都?/span> <span lang="EN-US">1</span> <span style="FONT-FAMILY: 宋体">?/span> <span lang="EN-US">7bit</span> <span style="FONT-FAMILY: 宋体">大小的关联|</span> <span lang="EN-US">set value</span> <span style="FONT-FAMILY: 宋体">Q要和目标内存地址?/span> <span lang="EN-US">5</span> <span style="FONT-FAMILY: 宋体">?/span> <span lang="EN-US">11</span> <span style="FONT-FAMILY: 宋体">位对应(</span> <span lang="EN-US">0-4</span> <span style="FONT-FAMILY: 宋体">位已l忽略了(jin)Q,也可以理解ؓ(f)Q关联值是内存D地址的一部分?/span> <span lang="EN-US">PPro</span> <span style="FONT-FAMILY: 宋体">中,?/span> <span lang="EN-US">128</span> <span style="FONT-FAMILY: 宋体">个关联值对应到</span> <span lang="EN-US">2</span> <span style="FONT-FAMILY: 宋体">行,所以最多可以ؓ(f)L的内存单元准?/span> <span lang="EN-US">2</span> <span style="FONT-FAMILY: 宋体">个缓存行?/span> <span lang="EN-US">PMMX P2 P3 P4NW</span> <span style="FONT-FAMILY: 宋体">?/span> <span lang="EN-US">4</span> <span style="FONT-FAMILY: 宋体">个。由于内存是分段的,所以说</span> <span lang="EN-US">CPU</span> <span style="FONT-FAMILY: 宋体">只能为,</span> <span lang="EN-US">5-11</span> <span style="FONT-FAMILY: 宋体">位地址相同的内存准?/span> <span lang="EN-US">2</span> <span style="FONT-FAMILY: 宋体">或?/span> <span lang="EN-US">4</span> <span style="FONT-FAMILY: 宋体">个不同的~存行。如何ؓ(f)两个内存地址赋予相同的关联值呢Q把</span> <span lang="EN-US">2</span> <span style="FONT-FAMILY: 宋体">个地址的低</span> <span lang="EN-US">5bit</span> <span style="FONT-FAMILY: 宋体">LQ这样就能被</span> <span lang="EN-US">32</span> <span style="FONT-FAMILY: 宋体">整除?jin)。如果这</span> <span lang="EN-US">2</span> <span style="FONT-FAMILY: 宋体">个截断了(jin)的地址都是</span> <span lang="EN-US">4096</span> <span style="FONT-FAMILY: 宋体">Q?/span> <span lang="EN-US">1000H</span> <span style="FONT-FAMILY: 宋体">Q的倍数Q那么这两个地址有?jin)相同的兌倹{?/span> </p> <p class="MsoNormal"> <span lang="EN-US"> <span> </span> </span> <span style="FONT-FAMILY: 宋体">  让我们用汇编加深一下印象,假设</span> <span lang="EN-US">ESI</span> <span style="FONT-FAMILY: 宋体">中是</span> <span lang="EN-US">32</span> <span style="FONT-FAMILY: 宋体">寚w的地址?/span> </p> <p class="MsoNormal"> <span lang="EN-US"> <span> </span> <span>                                        </span>AGAIN:<span>  </span>MOV<span>  </span>EAX,<span>  </span>[ESI]</span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 147pt; TEXT-INDENT: 26.25pt"> <span lang="EN-US">MOV<span>  </span>EBX,<span>  </span>[ESI+13*4096+4]</span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 147pt; TEXT-INDENT: 26.25pt"> <span lang="EN-US">MOV <span> </span>ECX,<span>  </span>[ESI+20*4096+28]</span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 147pt; TEXT-INDENT: 26.25pt"> <span lang="EN-US">DEC<span>  </span><span> </span>EDX</span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 147pt; TEXT-INDENT: 26.25pt"> <span lang="EN-US">JNZ <span>  </span>AGAIN</span> </p> <p class="MsoNormal"> <span style="FONT-FAMILY: 宋体">  </span> <span lang="EN-US">Oh Year</span> <span style="FONT-FAMILY: 宋体">Q这?/span> <span lang="EN-US">3</span> <span style="FONT-FAMILY: 宋体">个地址都有相同的关联|而且地址跨度都超q了(jin)数据~存的大,可这个@环在</span> <span lang="EN-US">PPro</span> <span style="FONT-FAMILY: 宋体">上效率会(x)相当低。当你想d</span> <span lang="EN-US">ECX</span> <span style="FONT-FAMILY: 宋体">的值的时候,没有空闲的~存行了(jin)</span> <span style="FONT-FAMILY: 宋体">—?/span> <span style="FONT-FAMILY: 宋体">因ؓ(f)׃n一个关联|而且</span> <span lang="EN-US">2</span> <span style="FONT-FAMILY: 宋体">行已l被使用?jin)。此?/span> <span lang="EN-US">CPU</span> <span style="FONT-FAMILY: 宋体">腾出最q用的</span> <span lang="EN-US">2</span> <span style="FONT-FAMILY: 宋体">个缓存行Q一个已l被</span> <span lang="EN-US">EAX</span> <span style="FONT-FAMILY: 宋体">使用。然?/span> <span lang="EN-US">CPU</span> <span style="FONT-FAMILY: 宋体">把这个缓存行?/span> <span lang="EN-US">[ESI+20*4096]</span> <span style="FONT-FAMILY: 宋体">?/span> <span lang="EN-US">[ESI+20*4096+31]</span> <span style="FONT-FAMILY: 宋体">的内存数据填充,然后从缓存中d</span> <span lang="EN-US">ECX</span> <span style="FONT-FAMILY: 宋体">。听h好象相当的烦(ch)琐。更加糟p的是,当又需要读?/span> <span lang="EN-US">EAX</span> <span style="FONT-FAMILY: 宋体">的时候,q需要重复上q的q程Q需要对内存~存来回操作Q效率相当的低,甚至不如不用~存。可是,如果我们把第三行Ҏ(gu)Q?/span> </p> <p class="MsoNormal" align="center"> <span lang="EN-US">MOV<span>  </span>ECX,<span>  </span>[ESI+20*4096+32]</span> </p> <p class="MsoNormal"> <span style="FONT-FAMILY: 宋体">  哦,不好Q看hQ我们的地址过?/span> <span lang="EN-US">32</span> <span style="FONT-FAMILY: 宋体">Q不能被整除?jin)。可是这h?jin)不同的兌|也就意味着有了(jin)</span> <span lang="EN-US">1</span> <span style="FONT-FAMILY: 宋体">个新行,不再׃n可怜的</span> <span lang="EN-US">2</span> <span style="FONT-FAMILY: 宋体">个行。这样一来,对三个寄存器的操作就不需要反复的?/span> <span lang="EN-US">2</span> <span style="FONT-FAMILY: 宋体">个缓存行q行调度?jin),各有一个了(jin)。嘿嘿,q次只需?/span> <span lang="EN-US">3</span> <span style="FONT-FAMILY: 宋体">个时钟周期了(jin)Q而上一个要</span> <span lang="EN-US">60</span> <span style="FONT-FAMILY: 宋体">个周期。这是在</span> <span lang="EN-US">PPro</span> <span style="FONT-FAMILY: 宋体">上的Q在后来?/span> <span lang="EN-US">CPU</span> <span style="FONT-FAMILY: 宋体">中都?/span> <span lang="EN-US">4</span> <span style="FONT-FAMILY: 宋体">路的Q也׃存在上面的问题了(jin)。搞W的是,</span> <span lang="EN-US">Intel</span> <span style="FONT-FAMILY: 宋体">的文档却错误的说</span> <span lang="EN-US">P2</span> <span style="FONT-FAMILY: 宋体">的缓存是</span> <span lang="EN-US">2</span> <span style="FONT-FAMILY: 宋体">路的。虽然说很少人在用那么古老的</span> <span lang="EN-US">CPU</span> <span style="FONT-FAMILY: 宋体">Q可是其中的道理大家应该明白?/span> </p> <p class="MsoNormal"> <span style="FONT-FAMILY: 宋体">  可是判断要访问的部分数据是否有相同的兌|也就是关于缓存是否能够命中的问题Q是相当困难的,汇编q好Q用高等U语a~译q的E序鬼知道是否对~存做过优化呢。所以么Q推荐,在程序的核心(j)部分Q对性能要求最高的部分Q先寚w数据Q然后确保用的单个数据块不要超q缓存大,</span> <span lang="EN-US">2</span> <span style="FONT-FAMILY: 宋体">个数据块Q单个不要超q缓存大的一半(仔细xZ么,因ؓ(f)兌值的问题Q可以缓存分Z部分处理两块Q。可是大部分情况下,我们都是使用q比数据~存大的多的l构Q以?qing)编译器自己q回的指针,然后Z(jin)优化你可能希望把所有频J用的变量攑ֈ一个连l的数据块中以充分利用缓存。我们可以这样做Q把?rn)态变量数值拷贝到栈中的局部变量中Q等子函数或者@环结束后再拷贝回来。这样一来就相当于把?rn)态变量放入了(jin)q箋的地址I间中去?/span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span style="FONT-FAMILY: 宋体">当读取的数据不在</span> <span lang="EN-US">L1 Cache</span> <span style="FONT-FAMILY: 宋体">内时Q?/span> <span lang="EN-US">CPU</span> <span style="FONT-FAMILY: 宋体">要?/span> <span lang="EN-US">L2 Cache</span> <span style="FONT-FAMILY: 宋体">d</span> <span lang="EN-US">L1</span> <span style="FONT-FAMILY: 宋体">~存行大的数据?/span> <span lang="EN-US">L1</span> <span style="FONT-FAMILY: 宋体">里去Q大概需?/span> <span lang="EN-US">200ns</span> <span style="FONT-FAMILY: 宋体">的时_(d)也就?/span> <span lang="EN-US">100Mhz</span> <span style="FONT-FAMILY: 宋体">pȝ?/span> <span lang="EN-US">20</span> <span style="FONT-FAMILY: 宋体">个时钟周期)(j)Q但是直C能够使用q些数据前,又需要有</span> <span lang="EN-US">50-100ns</span> <span style="FONT-FAMILY: 宋体">的gq。最p糕的是Q如果数据也不在</span> <span lang="EN-US">L2 Cache</span> <span style="FONT-FAMILY: 宋体">中,那么只能从最慢速的内存里读取了(jin)Q内存的龟速哪能和全速的~存相比?/span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span style="FONT-FAMILY: 宋体">好了(jin)Q关于缓存的知识可以此打住?jin),下面开始讲如何优化~存。无非就?/span> <span lang="EN-US">3</span> <span style="FONT-FAMILY: 宋体">U方法,g预取Q?/span> <span lang="EN-US">Prefetch</span> <span style="FONT-FAMILY: 宋体">Q、Y仉取、用缓存指令。关于预取的注意事项主要有这些:(x)</span> </p> <p class="MsoNormal" style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"><!--[if !supportLists]--> <span lang="EN-US"><span>1?span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">  </span></span></span><!--[endif]--> <span style="FONT-FAMILY: 宋体">合理安排内存的数据,使用块结构,提高~存命中率?/span></p> <p class="MsoNormal" style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"><!--[if !supportLists]--> <span lang="EN-US"><span>2?span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">  </span></span></span><!--[endif]--> <span style="FONT-FAMILY: 宋体">使用~译器提供的预取指o(h)。比?/span><span lang="EN-US">ICC</span><span style="FONT-FAMILY: 宋体">中的</span><span lang="EN-US">_mm_prefetch _mm_stream</span><span style="FONT-FAMILY: 宋体">Q甚?/span><span lang="EN-US">_mm_load</span><span style="FONT-FAMILY: 宋体">{比较“传l”的指o(h)?/span></p> <p class="MsoNormal" style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"><!--[if !supportLists]--> <span lang="EN-US"><span>3?span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">  </span></span></span><!--[endif]--> <span style="FONT-FAMILY: 宋体">可能少的用全局的变量或者指针?/span></p> <p class="MsoNormal" style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"><!--[if !supportLists]--> <span lang="EN-US"><span>4?span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">  </span></span></span><!--[endif]--> <span style="FONT-FAMILY: 宋体">E序可能少的进行判断蟩转@环?/span></p> <p class="MsoNormal" style="MARGIN-LEFT: 39pt; TEXT-INDENT: -18pt"><!--[if !supportLists]--> <span lang="EN-US"><span>5?span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">  </span></span></span><!--[endif]--> <span style="FONT-FAMILY: 宋体">使用</span><span lang="EN-US">const</span><span style="FONT-FAMILY: 宋体">标记Q不要在代码中؜?/span><span lang="EN-US">register</span><span style="FONT-FAMILY: 宋体">声明?/span></p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span style="FONT-FAMILY: 宋体">不过要提醒一句,真正提高E序效率的方法不是那U,从头到尾׃外科手术般的解剖Q一个一个地方的优化Q请抓住E序最核心(j)的部分进行优化,C</span> <span lang="EN-US">80-20</span> <span style="FONT-FAMILY: 宋体">规则?/span> </p> <p class="MsoNormal"> <span lang="EN-US"> <o:p> </o:p> </span> </p> <p class="MsoNormal"> <span style="FONT-FAMILY: 宋体">使用</span> <span lang="EN-US">SIMD</span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span style="FONT-FAMILY: 宋体">先复?fn)一下对齐指令,</span> <span lang="EN-US">__declspec(aliagn(#))</span> <span style="FONT-FAMILY: 宋体">Q?/span> <span lang="EN-US">#</span> <span style="FONT-FAMILY: 宋体">替换为字节数。比如想声明一?/span> <span lang="EN-US">16</span> <span style="FONT-FAMILY: 宋体">字结寚w的QҎ(gu)l,</span> <span lang="EN-US">__declspec(aliagn(16)) float Array[128]</span> <span style="FONT-FAMILY: 宋体">。需要注意的是,最好充分了(jin)解你</span> <span lang="EN-US">CPU</span> <span style="FONT-FAMILY: 宋体">的类型,支持哪些指o(h)集?/span> <span lang="EN-US">SIMD</span> <span style="FONT-FAMILY: 宋体">主要使用在需要同时操作大量数据的工作领域Q比?/span> <span lang="EN-US">3D</span> <span style="FONT-FAMILY: 宋体">囑Ş处理Q游戏)(j)Q物理徏模(</span> <span lang="EN-US">CAD</span> <span style="FONT-FAMILY: 宋体">Q,加密Q以?qing)科学计领域。据我所知,目前</span> <span lang="EN-US">GPGPU</span> <span style="FONT-FAMILY: 宋体">也是使用</span> <span lang="EN-US">SIMD</span> <span style="FONT-FAMILY: 宋体">的代表之一?/span> </p> <p class="MsoNormal"> <span lang="EN-US">MMX</span> </p> <p class="MsoNormal"> <span style="FONT-FAMILY: 宋体">主要Ҏ(gu):(x)</span> <span lang="EN-US">57</span> <span style="FONT-FAMILY: 宋体">条指令,</span> <span lang="EN-US">64bit</span> <span style="FONT-FAMILY: 宋体">?/span> <span lang="EN-US">FP</span> <span style="FONT-FAMILY: 宋体">寄存?/span> <span lang="EN-US">MM0-MM7</span> <span style="FONT-FAMILY: 宋体">Q对齐到</span> <span lang="EN-US">8</span> <span style="FONT-FAMILY: 宋体">?/span> <span lang="EN-US">80bit</span> <span style="FONT-FAMILY: 宋体">?/span> <span lang="EN-US">FP</span> <span style="FONT-FAMILY: 宋体">寄存?/span> <span lang="EN-US">ST0-ST7</span> <span style="FONT-FAMILY: 宋体">。需要数?/span> <span lang="EN-US">8</span> <span style="FONT-FAMILY: 宋体">字节寚wQ也是使用</span> <span lang="EN-US">Packed</span> <span style="FONT-FAMILY: 宋体">数字?/span> </p> <p class="MsoNormal"> <span lang="EN-US">PS</span> <span style="FONT-FAMILY: 宋体">Q这里冒Z(jin)一个问题,Z?/span> <span lang="EN-US">Intel</span> <span style="FONT-FAMILY: 宋体">要把</span> <span lang="EN-US">MMX</span> <span style="FONT-FAMILY: 宋体">的寄存器?/span> <span lang="EN-US">FPU</span> <span style="FONT-FAMILY: 宋体">的寄存器混合h使用呢?因ؓ(f)q里牉|C?/span> <span lang="EN-US">FPU</span> <span style="FONT-FAMILY: 宋体">状态切换问题,后面?x)提刎ͼ当你在一D代码中又要用到</span> <span lang="EN-US">MMX</span> <span style="FONT-FAMILY: 宋体">指o(h)又要用到传统?/span> <span lang="EN-US">FPU</span> <span style="FONT-FAMILY: 宋体">指o(h)Q那么需要保?/span> <span lang="EN-US">FPU</span> <span style="FONT-FAMILY: 宋体">状态,或者退?/span> <span lang="EN-US">MMX</span> <span style="FONT-FAMILY: 宋体">。可是这U操作对?/span> <span lang="EN-US">FPU</span> <span style="FONT-FAMILY: 宋体">来说非常昂贵Q而且对于多Q务操作系l来_(d)q乎于不可能完成的Q?/span> <span style="FONT-FAMILY: 宋体">—?/span> <span style="FONT-FAMILY: 宋体">同时有许多程序,有些需?/span> <span lang="EN-US">MMX</span> <span style="FONT-FAMILY: 宋体">Q有些不需要,而正地q行调度?x)变得非常困难。所?/span> <span lang="EN-US">Intel</span> <span style="FONT-FAMILY: 宋体">保存状态的工作完全交给?/span> <span lang="EN-US">CPU</span> <span style="FONT-FAMILY: 宋体">自己QY件h员无M太多q方面的工作Q这样一来,向前向后兼容了(jin)多Q务操作系l,比如</span> <span lang="EN-US">Windows</span> <span style="FONT-FAMILY: 宋体">?/span> <span lang="EN-US">Linux</span> <span style="FONT-FAMILY: 宋体">。后来随着操作pȝ?/span> <span lang="EN-US">CPU</span> <span style="FONT-FAMILY: 宋体">的不断升U,操作pȝ开发h员发布了(jin)一个补丁包Q就可以让操作系l用新的寄存器。这时h们都发现</span> <span lang="EN-US">Intel</span> <span style="FONT-FAMILY: 宋体">的这U做法是相当短视的,q可以当作一个重大的p。后?/span> <span lang="EN-US">Intel</span> <span style="FONT-FAMILY: 宋体">通过引入?jin)新的QҎ(gu)令集Q这时才加入</span> <span lang="EN-US">XMM</span> <span style="FONT-FAMILY: 宋体">寄存器。可造成q段故事的原因却Ҏ(gu)不是技术问题,保证兼容性也是一个方面,M真的说不清楚。你只要记得无法同时使用</span> <span lang="EN-US">MMX</span> <span style="FONT-FAMILY: 宋体">?/span> <span lang="EN-US">FPU</span> <span style="FONT-FAMILY: 宋体">可以了(jin)Q?/span> <span lang="EN-US">CPU</span> <span style="FONT-FAMILY: 宋体">要进行模式切换?/span> </p> <p class="MsoNormal"> <span lang="EN-US">SSE1</span> </p> <p class="MsoNormal"> <span style="FONT-FAMILY: 宋体">主要Ҏ(gu):(x)</span> <span lang="EN-US">128bit</span> <span style="FONT-FAMILY: 宋体">?/span> <span lang="EN-US">FP</span> <span style="FONT-FAMILY: 宋体">寄存?/span> <span lang="EN-US">XMM0-XMM7</span> <span style="FONT-FAMILY: 宋体">。增加了(jin)数据预取指o(h)。额外的</span> <span lang="EN-US">64bit</span> <span style="FONT-FAMILY: 宋体">整数支持。支持同时处?/span> <span lang="EN-US">4</span> <span style="FONT-FAMILY: 宋体">个单_ֺ点敎ͼ也就?/span> <span lang="EN-US">C\C++</span> <span style="FONT-FAMILY: 宋体">里的</span> <span lang="EN-US">float</span> <span style="FONT-FAMILY: 宋体">?/span> </p> <p class="MsoNormal"> <span style="FONT-FAMILY: 宋体">适用范围Q多媒体信号处理</span> </p> <p class="MsoNormal"> <span lang="EN-US">SSE2</span> </p> <p class="MsoNormal"> <span style="FONT-FAMILY: 宋体">主要Ҏ(gu):(x)</span> <span lang="EN-US">128bit</span> <span style="FONT-FAMILY: 宋体">?/span> <span lang="EN-US">FP</span> <span style="FONT-FAMILY: 宋体">寄存器支持处理同时处?/span> <span lang="EN-US">2</span> <span style="FONT-FAMILY: 宋体">个双_ֺ</span> <span lang="EN-US">double</span> <span style="FONT-FAMILY: 宋体">点敎ͼ以及(qing)</span> <span lang="EN-US">16byte 8word 4dword 2quadword</span> <span style="FONT-FAMILY: 宋体">整数?/span> </p> <p class="MsoNormal"> <span style="FONT-FAMILY: 宋体">适用范围Q?/span> <span lang="EN-US">3D</span> <span style="FONT-FAMILY: 宋体">处理</span> <span style="FONT-FAMILY: 宋体">语音识别</span> <span style="FONT-FAMILY: 宋体">视频~码解码</span> </p> <p class="MsoNormal"> <span lang="EN-US">SSE3</span> </p> <p class="MsoNormal"> <span style="FONT-FAMILY: 宋体">主要Ҏ(gu):(x)增加支持非对U?/span> <span lang="EN-US">asymmetric</span> <span style="FONT-FAMILY: 宋体">和水q?/span> <span lang="EN-US">horizontal</span> <span style="FONT-FAMILY: 宋体">计算?/span> <span lang="EN-US">SIMD</span> <span style="FONT-FAMILY: 宋体">指o(h)。ؓ(f)</span> <span lang="EN-US">SIMD</span> <span style="FONT-FAMILY: 宋体">提供?jin)一条特D的寄存?/span> <span lang="EN-US">load</span> <span style="FONT-FAMILY: 宋体">指o(h)。线E同步指令?/span> </p> <p class="MsoNormal"> <span style="FONT-FAMILY: 宋体">适用范围Q科学计?/span> <span style="FONT-FAMILY: 宋体">多线E程?br /><o:p></o:p><br />手头工具</span> </p> <p class="MsoNormal"> <span lang="EN-US">1</span> <span style="FONT-FAMILY: 宋体">、选择一个合适的~译器,推荐?/span> <span lang="EN-US">Intel C++ Compiler</span> <span style="FONT-FAMILY: 宋体">Q以下简U?/span> <span lang="EN-US">ICC</span> <span style="FONT-FAMILY: 宋体">Q,以及(qing)</span> <span lang="EN-US">Visual Studio .NET 2003</span> <span style="FONT-FAMILY: 宋体">?qing)以?/span> <span lang="EN-US">IDE</span> <span style="FONT-FAMILY: 宋体">附带?/span> <span lang="EN-US">C++</span> <span style="FONT-FAMILY: 宋体">~译器。同Ӟ</span> <span lang="EN-US">Microsoft C++ Compiler</span> <span style="FONT-FAMILY: 宋体">也支?/span> <span lang="EN-US">AMD</span> <span style="FONT-FAMILY: 宋体">?/span> <span lang="EN-US">3DNow</span> <span style="FONT-FAMILY: 宋体">?/span> <span lang="EN-US">GCC C++ Compiler</span> <span style="FONT-FAMILY: 宋体">没有试?/span> </p> <p class="MsoNormal"> <span lang="EN-US">2</span> <span style="FONT-FAMILY: 宋体">?/span> <b> <span lang="EN-US">Intel</span> <span style="FONT-FAMILY: 宋体">以及(qing)</span> <span lang="EN-US">AMD</span> </b> <span style="FONT-FAMILY: 宋体"> <b>的汇~指令集手册。这个是必需的,强烈每个C++ Coder人手准备一份?/b> <br /> </span> </p> <p class="MsoNormal"> <span style="FONT-FAMILY: 宋体"> <o:p> </o:p> <u>所有的都用</u> </span> <u> <span lang="EN-US">C++</span> <span style="FONT-FAMILY: 宋体">混合变成的方式实?/span> </u> </p> <p class="MsoNormal"> <span style="FONT-FAMILY: 宋体">使用范例Q?/span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span style="FONT-FAMILY: 宋体">向量乘法?/span> <span lang="EN-US">3D</span> <span style="FONT-FAMILY: 宋体">处理中非帔R常多Q多半用于计单位矢量的夹角?/span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span style="FONT-FAMILY: 宋体">我们先定义一个顶点结构?/span> </p> <p class="MsoNormal" style="TEXT-INDENT: 21pt"> <span style="FONT-FAMILY: 宋体"> </span> </p> <div style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)"> <!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--> <span style="COLOR: rgb(0,0,0)">__declspec(align(</span> <span style="COLOR: rgb(0,0,0)">16</span> <span style="COLOR: rgb(0,0,0)">)) </span> <span style="COLOR: rgb(0,0,255)">struct</span> <span style="COLOR: rgb(0,0,0)"> Vertex{<br />    </span> <span style="COLOR: rgb(0,0,255)">float</span> <span style="COLOR: rgb(0,0,0)"> x,y,z,w;<br />};</span> </div>    16字节寚w的结构,其实本n也是16字节的东ѝ如果没有对齐,q行时会(x)报错?p></p><p class="MsoNormal" style="TEXT-INDENT: 21pt"><span style="FONT-FAMILY: 宋体">w是其ơ坐标系的参敎ͼ处理向量的时候不需要用到。我的函数是q样的:(x)</span></p><div style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: rgb(0,0,255)">float</span><span style="COLOR: rgb(0,0,0)"> Dot(Vertex</span><span style="COLOR: rgb(0,0,0)">*</span><span style="COLOR: rgb(0,0,0)"> v1,Vertex</span><span style="COLOR: rgb(0,0,0)">*</span><span style="COLOR: rgb(0,0,0)"> v2)<br />{<br />    Vertex tmp;<br />    __asm{<br />        MOV EAX,[v1];<br />        MOVAPS XMM0,[EAX];<br />        MOV EAX,[v2];<br />        MOVAPS XMM1,[EAX];<br />        MULPS XMM0,XMM1;<br />        MOVAPS tmp,XMM0;<br />    };<br />    </span><span style="COLOR: rgb(0,0,255)">return</span><span style="COLOR: rgb(0,0,0)"> tmp.x </span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)"> tmp.y </span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)"> tmp.z;<br />};</span></div><br />    VC中反汇编之:(x)<br /><div style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: rgb(0,128,128)"> 1</span> <span style="COLOR: rgb(0,0,255)">float</span><span style="COLOR: rgb(0,0,0)"> Dot(Vertex</span><span style="COLOR: rgb(0,0,0)">*</span><span style="COLOR: rgb(0,0,0)"> v1,Vertex</span><span style="COLOR: rgb(0,0,0)">*</span><span style="COLOR: rgb(0,0,0)"> v2)<br /></span><span style="COLOR: rgb(0,128,128)"> 2</span> <span style="COLOR: rgb(0,0,0)">{<br /></span><span style="COLOR: rgb(0,128,128)"> 3</span> <span style="COLOR: rgb(0,0,0)">0041C690  push        ebx  <br /></span><span style="COLOR: rgb(0,128,128)"> 4</span> <span style="COLOR: rgb(0,0,0)">0041C691  mov         ebx,esp <br /></span><span style="COLOR: rgb(0,128,128)"> 5</span> <span style="COLOR: rgb(0,0,0)">0041C693  sub         esp,</span><span style="COLOR: rgb(0,0,0)">8</span><span style="COLOR: rgb(0,0,0)"> <br /></span><span style="COLOR: rgb(0,128,128)"> 6</span> <span style="COLOR: rgb(0,0,0)">0041C696  and         esp,0FFFFFFF0h <br /></span><span style="COLOR: rgb(0,128,128)"> 7</span> <span style="COLOR: rgb(0,0,0)">0041C699  add         esp,</span><span style="COLOR: rgb(0,0,0)">4</span><span style="COLOR: rgb(0,0,0)"> <br /></span><span style="COLOR: rgb(0,128,128)"> 8</span> <span style="COLOR: rgb(0,0,0)">0041C69C  push        ebp  <br /></span><span style="COLOR: rgb(0,128,128)"> 9</span> <span style="COLOR: rgb(0,0,0)">0041C69D  mov         ebp,dword ptr [ebx</span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)">4</span><span style="COLOR: rgb(0,0,0)">] <br /></span><span style="COLOR: rgb(0,128,128)">10</span> <span style="COLOR: rgb(0,0,0)">0041C6A0  mov         dword ptr [esp</span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)">4</span><span style="COLOR: rgb(0,0,0)">],ebp <br /></span><span style="COLOR: rgb(0,128,128)">11</span> <span style="COLOR: rgb(0,0,0)">0041C6A4  mov         ebp,esp <br /></span><span style="COLOR: rgb(0,128,128)">12</span> <span style="COLOR: rgb(0,0,0)">0041C6A6  sub         esp,0E8h <br /></span><span style="COLOR: rgb(0,128,128)">13</span> <span style="COLOR: rgb(0,0,0)">0041C6AC  push        esi  <br /></span><span style="COLOR: rgb(0,128,128)">14</span> <span style="COLOR: rgb(0,0,0)">0041C6AD  push        edi  <br /></span><span style="COLOR: rgb(0,128,128)">15</span> <span style="COLOR: rgb(0,0,0)">0041C6AE  lea         edi,[ebp</span><span style="COLOR: rgb(0,0,0)">-</span><span style="COLOR: rgb(0,0,0)">0E8h] <br /></span><span style="COLOR: rgb(0,128,128)">16</span> <span style="COLOR: rgb(0,0,0)">0041C6B4  mov         ecx,3Ah <br /></span><span style="COLOR: rgb(0,128,128)">17</span> <span style="COLOR: rgb(0,0,0)">0041C6B9  mov         eax,0CCCCCCCCh <br /></span><span style="COLOR: rgb(0,128,128)">18</span> <span style="COLOR: rgb(0,0,0)">0041C6BE  rep stos    dword ptr [edi] <br /></span><span style="COLOR: rgb(0,128,128)">19</span> <span style="COLOR: rgb(0,0,0)">    Vertex tmp;<br /></span><span style="COLOR: rgb(0,128,128)">20</span> <span style="COLOR: rgb(0,0,0)">    __asm{<br /></span><span style="COLOR: rgb(0,128,128)">21</span> <span style="COLOR: rgb(0,0,0)">        MOV EAX,[v1];<br /></span><span style="COLOR: rgb(0,128,128)">22</span> <span style="COLOR: rgb(0,0,0)">0041C6C0  mov         eax,dword ptr [v1] <br /></span><span style="COLOR: rgb(0,128,128)">23</span> <span style="COLOR: rgb(0,0,0)">        MOVAPS XMM0,[EAX];<br /></span><span style="COLOR: rgb(0,128,128)">24</span> <span style="COLOR: rgb(0,0,0)">0041C6C3  movaps      xmm0,xmmword ptr [eax] <br /></span><span style="COLOR: rgb(0,128,128)">25</span> <span style="COLOR: rgb(0,0,0)">        MOV EAX,[v2];<br /></span><span style="COLOR: rgb(0,128,128)">26</span> <span style="COLOR: rgb(0,0,0)">0041C6C6  mov         eax,dword ptr [v2] <br /></span><span style="COLOR: rgb(0,128,128)">27</span> <span style="COLOR: rgb(0,0,0)">        MOVAPS XMM1,[EAX];<br /></span><span style="COLOR: rgb(0,128,128)">28</span> <span style="COLOR: rgb(0,0,0)">0041C6C9  movaps      xmm1,xmmword ptr [eax] <br /></span><span style="COLOR: rgb(0,128,128)">29</span> <span style="COLOR: rgb(0,0,0)">        MULPS XMM0,XMM1;<br /></span><span style="COLOR: rgb(0,128,128)">30</span> <span style="COLOR: rgb(0,0,0)">0041C6CC  mulps       xmm0,xmm1 <br /></span><span style="COLOR: rgb(0,128,128)">31</span> <span style="COLOR: rgb(0,0,0)">        MOVAPS tmp,XMM0;<br /></span><span style="COLOR: rgb(0,128,128)">32</span> <span style="COLOR: rgb(0,0,0)">0041C6CF  movaps      xmmword ptr [tmp],xmm0 <br /></span><span style="COLOR: rgb(0,128,128)">33</span> <span style="COLOR: rgb(0,0,0)">    };<br /></span><span style="COLOR: rgb(0,128,128)">34</span> <span style="COLOR: rgb(0,0,0)">    </span><span style="COLOR: rgb(0,0,255)">return</span><span style="COLOR: rgb(0,0,0)"> tmp.x </span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)"> tmp.y </span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)"> tmp.z;<br /></span><span style="COLOR: rgb(0,128,128)">35</span> <span style="COLOR: rgb(0,0,0)">0041C6D3  fld         dword ptr [tmp] <br /></span><span style="COLOR: rgb(0,128,128)">36</span> <span style="COLOR: rgb(0,0,0)">0041C6D6  fadd        dword ptr [ebp</span><span style="COLOR: rgb(0,0,0)">-</span><span style="COLOR: rgb(0,0,0)">1Ch] <br /></span><span style="COLOR: rgb(0,128,128)">37</span> <span style="COLOR: rgb(0,0,0)">0041C6D9  fadd        dword ptr [ebp</span><span style="COLOR: rgb(0,0,0)">-</span><span style="COLOR: rgb(0,0,0)">18h] <br /></span><span style="COLOR: rgb(0,128,128)">38</span> <span style="COLOR: rgb(0,0,0)">};</span></div>    前面都是保护现场入Stack的代码,没有必要。我之所以这P在Stack中声明了(jin)一个零时变量返回之Q是Z(jin)减少代码的行数。有兴趣地可以参考本文后面引用资料中的Intel范例Q代码多的多Q功能却一栗这样就可以利用SIMD计算点乘?jin)。图C:(x)<br />    q种点格式UCؓ(f)AoSQArray of structureQ,q种l构的好处是Q能够和现有的程序结构,比如D3D中的FVF点格式Q和GL中的点格式。但是,׃许多情况下,q没有用第四各点敎ͼq就让SIMD指o(h)费?5%的性能。于是有?jin)SoA格式Q让我们重新来过?br />    我借用?jin)一下上面一个结构的指o(h)Q还是没有用_mm_128格式Q让大家看得清楚一些:(x)<br /><div style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: rgb(0,0,0)">__declspec(align(</span><span style="COLOR: rgb(0,0,0)">16</span><span style="COLOR: rgb(0,0,0)">)) </span><span style="COLOR: rgb(0,0,255)">struct</span><span style="COLOR: rgb(0,0,0)"> Vertex_soa{<br />     </span><span style="COLOR: rgb(0,0,255)">float</span><span style="COLOR: rgb(0,0,0)"> x[</span><span style="COLOR: rgb(0,0,0)">4</span><span style="COLOR: rgb(0,0,0)">],y[</span><span style="COLOR: rgb(0,0,0)">4</span><span style="COLOR: rgb(0,0,0)">],z[</span><span style="COLOR: rgb(0,0,0)">4</span><span style="COLOR: rgb(0,0,0)">],w[</span><span style="COLOR: rgb(0,0,0)">4</span><span style="COLOR: rgb(0,0,0)">];<br />};</span></div>    依旧16字节寚w。计函数如下:(x)<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><br /><div style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: rgb(0,128,128)"> 1</span> <span style="COLOR: rgb(0,0,255)">void</span><span style="COLOR: rgb(0,0,0)"> Dot(Vertex_soa</span><span style="COLOR: rgb(0,0,0)">*</span><span style="COLOR: rgb(0,0,0)"> v1,Vertex</span><span style="COLOR: rgb(0,0,0)">*</span><span style="COLOR: rgb(0,0,0)"> v2,</span><span style="COLOR: rgb(0,0,255)">float</span><span style="COLOR: rgb(0,0,0)">*</span><span style="COLOR: rgb(0,0,0)"> result)<br /></span><span style="COLOR: rgb(0,128,128)"> 2</span> <span style="COLOR: rgb(0,0,0)">{<br /></span><span style="COLOR: rgb(0,128,128)"> 3</span> <span style="COLOR: rgb(0,0,0)">    Vertex tmp1,tmp2;<br /></span><span style="COLOR: rgb(0,128,128)"> 4</span> <span style="COLOR: rgb(0,0,0)">    __asm{<br /></span><span style="COLOR: rgb(0,128,128)"> 5</span> <span style="COLOR: rgb(0,0,0)">        MOV ECX,v1;<br /></span><span style="COLOR: rgb(0,128,128)"> 6</span> <span style="COLOR: rgb(0,0,0)">        MOV EDX,v2;<br /></span><span style="COLOR: rgb(0,128,128)"> 7</span> <span style="COLOR: rgb(0,0,0)"><br /></span><span style="COLOR: rgb(0,128,128)"> 8</span> <span style="COLOR: rgb(0,0,0)">        MOVAPS XMM7,[ECX];<br /></span><span style="COLOR: rgb(0,128,128)"> 9</span> <span style="COLOR: rgb(0,0,0)">        MOVAPS XMM6,[ECX</span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)">16</span><span style="COLOR: rgb(0,0,0)">];<br /></span><span style="COLOR: rgb(0,128,128)">10</span> <span style="COLOR: rgb(0,0,0)">        MOVAPS XMM5,[ECX</span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)">32</span><span style="COLOR: rgb(0,0,0)">];<br /></span><span style="COLOR: rgb(0,128,128)">11</span> <span style="COLOR: rgb(0,0,0)">        MOVAPS XMM4,[ECX</span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)">48</span><span style="COLOR: rgb(0,0,0)">];<br /></span><span style="COLOR: rgb(0,128,128)">12</span> <span style="COLOR: rgb(0,0,0)">        MOVAPS XMM0,XMM7;<br /></span><span style="COLOR: rgb(0,128,128)">13</span> <span style="COLOR: rgb(0,0,0)">        UNPCKLPS XMM7,XMM6;<br /></span><span style="COLOR: rgb(0,128,128)">14</span> <span style="COLOR: rgb(0,0,0)">        MOVLPS [EDX],XMM7;<br /></span><span style="COLOR: rgb(0,128,128)">15</span> <span style="COLOR: rgb(0,0,0)">        MOVHPS [EDX</span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)">16</span><span style="COLOR: rgb(0,0,0)">],XMM7;<br /></span><span style="COLOR: rgb(0,128,128)">16</span> <span style="COLOR: rgb(0,0,0)">        UNPCKHPS XMM0,XMM6;<br /></span><span style="COLOR: rgb(0,128,128)">17</span> <span style="COLOR: rgb(0,0,0)">        MOVLPS [EDX</span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)">32</span><span style="COLOR: rgb(0,0,0)">],XMM0;<br /></span><span style="COLOR: rgb(0,128,128)">18</span> <span style="COLOR: rgb(0,0,0)">        MOVHPS [EDX</span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)">48</span><span style="COLOR: rgb(0,0,0)">],XMM0;<br /></span><span style="COLOR: rgb(0,128,128)">19</span> <span style="COLOR: rgb(0,0,0)"><br /></span><span style="COLOR: rgb(0,128,128)">20</span> <span style="COLOR: rgb(0,0,0)">        MOVAPS XMM0,XMM5;<br /></span><span style="COLOR: rgb(0,128,128)">21</span> <span style="COLOR: rgb(0,0,0)">        UNPCKLPS XMM5,XMM4;<br /></span><span style="COLOR: rgb(0,128,128)">22</span> <span style="COLOR: rgb(0,0,0)">        UNPCKHPS XMM0,XMM4;<br /></span><span style="COLOR: rgb(0,128,128)">23</span> <span style="COLOR: rgb(0,0,0)">        MOVLPS [EDX</span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)">8</span><span style="COLOR: rgb(0,0,0)">],XMM5;<br /></span><span style="COLOR: rgb(0,128,128)">24</span> <span style="COLOR: rgb(0,0,0)">        MOVHPS [EDX</span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)">24</span><span style="COLOR: rgb(0,0,0)">],XMM5;<br /></span><span style="COLOR: rgb(0,128,128)">25</span> <span style="COLOR: rgb(0,0,0)">        MOVLPS [EDX</span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)">40</span><span style="COLOR: rgb(0,0,0)">],XMM0;<br /></span><span style="COLOR: rgb(0,128,128)">26</span> <span style="COLOR: rgb(0,0,0)">        MOVHPS [EDX</span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)">56</span><span style="COLOR: rgb(0,0,0)">],XMM0;<br /></span><span style="COLOR: rgb(0,128,128)">27</span> <span style="COLOR: rgb(0,0,0)"><br /></span><span style="COLOR: rgb(0,128,128)">28</span> <span style="COLOR: rgb(0,0,0)">        MOVAPS XMM3,[EDX];<br /></span><span style="COLOR: rgb(0,128,128)">29</span> <span style="COLOR: rgb(0,0,0)">        MOVAPS XMM2,[EDX</span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)">16</span><span style="COLOR: rgb(0,0,0)">];<br /></span><span style="COLOR: rgb(0,128,128)">30</span> <span style="COLOR: rgb(0,0,0)">        MOVAPS XMM1,[EDX</span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)">32</span><span style="COLOR: rgb(0,0,0)">];<br /></span><span style="COLOR: rgb(0,128,128)">31</span> <span style="COLOR: rgb(0,0,0)">        MOVAPS XMM0,[EDX</span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)">48</span><span style="COLOR: rgb(0,0,0)">];<br /></span><span style="COLOR: rgb(0,128,128)">32</span> <span style="COLOR: rgb(0,0,0)"><br /></span><span style="COLOR: rgb(0,128,128)">33</span> <span style="COLOR: rgb(0,0,0)">        MULPS XMM3,XMM2;<br /></span><span style="COLOR: rgb(0,128,128)">34</span> <span style="COLOR: rgb(0,0,0)">        MULPS XMM1,XMM0;<br /></span><span style="COLOR: rgb(0,128,128)">35</span> <span style="COLOR: rgb(0,0,0)">        MOVAPS tmp2,XMM1;<br /></span><span style="COLOR: rgb(0,128,128)">36</span> <span style="COLOR: rgb(0,0,0)">        MOVAPS tmp1,XMM3;<br /></span><span style="COLOR: rgb(0,128,128)">37</span> <span style="COLOR: rgb(0,0,0)">    };<br /></span><span style="COLOR: rgb(0,128,128)">38</span> <span style="COLOR: rgb(0,0,0)">    result[</span><span style="COLOR: rgb(0,0,0)">0</span><span style="COLOR: rgb(0,0,0)">] </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> tmp1.x </span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)"> tmp1.y </span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)"> tmp1.z;<br /></span><span style="COLOR: rgb(0,128,128)">39</span> <span style="COLOR: rgb(0,0,0)">    result[</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">] </span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)"> tmp2.x </span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)"> tmp2.y </span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)"> tmp2.z;<br /></span><span style="COLOR: rgb(0,128,128)">40</span> <span style="COLOR: rgb(0,0,0)">};</span></div><span style="COLOR: rgb(0,0,255)"></span>    Oh YeahQ就是这样了(jin)Q同时计了(jin)1对乘法。我在代码中借用?jin)一下前面的点l构Q这h便一些。至于SOA格式Q请看前面的声明。很多代码都是{换Stack中的内存格式Q{换成AOS格式Q这h能用SIMD指o(h)计算?br /><br />    通过上面的演C,惛_大家已经对SIMD有了(jin)个直观地认识Q其实在自己的代码中加入q些是非常方便与Ҏ(gu)的。虽然说现在的CPU性能已经提高?jin)许多,性能也强?jin)许多,可是在诸多对性能要求高的地方Q还是非常烤烟程序员的水q的?br /><br />    <b>Ƣ迎大家拍砖Q?/b><br /><img src ="http://www.shnenglu.com/Jedimaster/aggbug/11650.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Jedimaster/" target="_blank">周L</a> 2006-08-24 15:37 <a href="http://www.shnenglu.com/Jedimaster/archive/2006/08/24/11650.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>初学汇编之CPUcd识别http://www.shnenglu.com/Jedimaster/archive/2006/08/18/11423.html周L周LFri, 18 Aug 2006 14:15:00 GMThttp://www.shnenglu.com/Jedimaster/archive/2006/08/18/11423.htmlhttp://www.shnenglu.com/Jedimaster/comments/11423.htmlhttp://www.shnenglu.com/Jedimaster/archive/2006/08/18/11423.html#Feedback1http://www.shnenglu.com/Jedimaster/comments/commentRss/11423.htmlhttp://www.shnenglu.com/Jedimaster/services/trackbacks/11423.htmlclass CIntelCpuInfo{
private:
    DWORD m_VersionInfo;
    DWORD m_Features;
    
    
void GetFeatures();
    
void GetVersionInfo();
public:
    CIntelCpuInfo() {};
    
~CIntelCpuInfo() {};
    
void Show();
};

void CIntelCpuInfo::Show()
{
    
this->GetVersionInfo();
    
this->GetFeatures();
};

void CIntelCpuInfo::GetVersionInfo()
{
    DWORD VER;
    DWORD BACKUP;

    DWORD STEP,MODEL,FAMILY;
    __asm{
        MOV EAX,01H;
        CPUID;
        MOV VER,EAX;
        MOV BACKUP,EAX;
        AND EAX,0000000FH;
        MOV STEP,EAX;
        MOV EAX,BACKUP;
        SHR EAX,
4;
        AND EAX,0000000FH;
        MOV MODEL,EAX;
        MOV EAX,BACKUP;
        SHR EAX,
8;
        AND EAX,0000000FH;
        MOV FAMILY,EAX;
    };
    cout
<<"Family I(yng)D : "<<FAMILY<<" Stepping I(yng)D : "<<STEP<<" Model : "<<MODEL<<endl;
};

void CIntelCpuInfo::GetFeatures()
{
    DWORD C,D;
    DWORD SSE3Tag;
    DWORD SSTEPTag;
    DWORD SSE2Tag;
    DWORD SSE1Tag;
    DWORD MMXTag;
    __asm{
        MOV EAX,01H;
        CPUID;
        MOV C,ECX;
        PUSH ECX;
        AND ECX,01H;
        MOV SSE3Tag,ECX;
        POP ECX;
        AND ECX,0080H;
        MOV SSTEPTag,ECX;
        SHR SSTEPTag,
7;
        MOV D,EDX;
        SHR EDX,
23;
        PUSH EDX;
        PUSH EDX;
        AND EDX,01H;
        MOV MMXTag,EDX;
        POP EDX;
        SHR EDX,
2;
        AND EDX,01H;
        MOV SSE1Tag,EDX;
        POP EDX;
        SHR EDX,
3;
        AND EDX,01H;
        MOV SSE2Tag,EDX;
    };
    cout
<<"SSE3 Support ? "<<SSE3Tag<<endl;
    cout
<<"SSE2 Support ? "<<SSE2Tag<<endl;
    cout
<<"SSE1 Support ? "<<SSE1Tag<<endl;
    cout
<<"Enhanced SpeedStepping ? "<<SSTEPTag<<endl;
};
我的CPU?002q下半年的,Intel Pentium 4 Northwood 1.8GAQ嗬嗬,搞得多么先进一栗截囑֦下,

o_ASM.JPG

l果完全正确。有?jin)一些经验,在以后的E序中,可以通过识别CPUcdq行额外的优化,以后好好的研IIntel的Manual?br />


周L 2006-08-18 22:15 发表评论
]]>
LINUXpȝ不能l治桌面之理?Ƣ迎讨论http://www.shnenglu.com/Jedimaster/archive/2006/08/10/11109.html周L周LThu, 10 Aug 2006 13:25:00 GMThttp://www.shnenglu.com/Jedimaster/archive/2006/08/10/11109.htmlhttp://www.shnenglu.com/Jedimaster/comments/11109.htmlhttp://www.shnenglu.com/Jedimaster/archive/2006/08/10/11109.html#Feedback1http://www.shnenglu.com/Jedimaster/comments/commentRss/11109.htmlhttp://www.shnenglu.com/Jedimaster/services/trackbacks/11109.html
  • l构冗繁。尚不说安装一个普通的LINUX发行版需要多包Q就是包和包之间的依赖关p,可是比理子还困难一癑ր。最讨厌看到的就是在命o(h)行下兴冲冲的输入安装命o(h)时蟩Z个个require提示Q得Q插入碟一个一个安装吧?/li>
  • 体积庞大。WINDOWS98多大Q全部安?00MQ?000多大Q普通安?.3GQXP多大Q普通安?.1GQVISTAq不知道。反正我知道SUSE已经用DVD装蝲?jin)。这一Ҏ(gu)M$先进Q可是硬盘空间呢Q是否系l真的需要那么多的东西么Q非?/li>
  • 工具花哨不统一。我知道LINUX FANS的水q_高,可是是没有M$出的软g那么手实用Q就拿播攑֙来说Q各式各L(fng)东西Q从KDE自己的MP3播放器开始,C造WINAMP的播攑֙Q还有各UCD播放器。WINDOWS下就是方便多?jin),ASPI+EAC可以搞定所有的CD抓取工作Qfoobar2000+Media Player ClassicQ搞定了(jin)音频视频。即使是对大多数人来_(d)也有诸如WMPQPowerDVD{对于入门用户也非常有亲和力的Y件。这U高手充光也是普通的HackerQ不是EngineerQ更不是Professinal Developer?/li>
  • 基础教育没有普及(qing)。好象还没有人给大多数入门者解释过X-WINDOWS是什么东西,当初我是׃(jin)不少旉才弄明白X11R6 XFree86 XServer{等是是什么东西,然后才会(x)安装NVIDIA的驱动程序,手动更改配置文g。也没有释过Q当初h们如何用命o(h)行访问httpQ访问NFSQ大多数?x)用WINDOWS下的“网上邻居”,“CuteFTP”。如果想要推qLINUXQ学校这一关不可忽视。可是…?/li>
  • 需要最L(fng)让所有的人都要明白C\C++语言是怎么回事。想升pȝQ先拿内核开刀。可是这个内核究竟是什么东西,Z么要~译Qؓ(f)什么编译时需要用C个叫做makefile的东西?一切的一切,对于普通h来说Q可是非帔R峭的学习(fn)曲线?/li>
  • 开发h员没有一个完整强大的C\C++ IDE。IDEQ最基本的功能莫q于工程理和代码提C。Borland造了(jin)一个,那是Z(jin)DelphiQ可是C\C++人员呢?Nq是vim敲字W?手动makeQ?/li>
  • 驱动E序规范不统一。有的驱动程序要求重新编译内核,以及(qing)各种各样的安装方式?D是最要命的,除了(jin)NVIDIAU极外,其他的厂商看不出什么动作。还?D APIQ纯软g跨^台的Mesa3DQ还有一个GLX?/li>

    周L 2006-08-10 21:25 发表评论
    ]]>GPU水L模拟之关键提?/title><link>http://www.shnenglu.com/Jedimaster/archive/2006/08/03/10801.html</link><dc:creator>周L</dc:creator><author>周L</author><pubDate>Thu, 03 Aug 2006 01:50:00 GMT</pubDate><guid>http://www.shnenglu.com/Jedimaster/archive/2006/08/03/10801.html</guid><wfw:comment>http://www.shnenglu.com/Jedimaster/comments/10801.html</wfw:comment><comments>http://www.shnenglu.com/Jedimaster/archive/2006/08/03/10801.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/Jedimaster/comments/commentRss/10801.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Jedimaster/services/trackbacks/10801.html</trackback:ping><description><![CDATA[     摘要: q些都是出White Paper的经验ȝQ如有错误,请多多指正谢谢!  1、用哪个苦力  你可以用GPU或者是CPUQ计随旉变化的高E。听h用GPU的Vertex Shader计算高程好像非常先进Q其实不然。因为GPU与CPU的运作机制不同,每个FPSQ传入时间Uniform变量?x)导致GPU效率低下Q在NVIDIA的GPU优化指南中提到过q一炏V所以我q是推荐用CPU计算高程Q因为牵...  <a href='http://www.shnenglu.com/Jedimaster/archive/2006/08/03/10801.html'>阅读全文</a><img src ="http://www.shnenglu.com/Jedimaster/aggbug/10801.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Jedimaster/" target="_blank">周L</a> 2006-08-03 09:50 <a href="http://www.shnenglu.com/Jedimaster/archive/2006/08/03/10801.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Direct3D 10 Preview 别h有翻译过 自己又翻译了(jin)一?/title><link>http://www.shnenglu.com/Jedimaster/archive/2006/08/01/10767.html</link><dc:creator>周L</dc:creator><author>周L</author><pubDate>Tue, 01 Aug 2006 14:14:00 GMT</pubDate><guid>http://www.shnenglu.com/Jedimaster/archive/2006/08/01/10767.html</guid><wfw:comment>http://www.shnenglu.com/Jedimaster/comments/10767.html</wfw:comment><comments>http://www.shnenglu.com/Jedimaster/archive/2006/08/01/10767.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/Jedimaster/comments/commentRss/10767.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/Jedimaster/services/trackbacks/10767.html</trackback:ping><description><![CDATA[     摘要: The Direct3D 10 System 注:(x)SIGGRAPH 2006卛_在L士顿开q,微Y也将发布DirectX10的相兌料。ؓ(f)此特地翻译了(jin)源自微YDirectX开发社区的一PDF文Q“The Direct3D 10 System”,原文地址为http://download.microsoft.co...  <a href='http://www.shnenglu.com/Jedimaster/archive/2006/08/01/10767.html'>阅读全文</a><img src ="http://www.shnenglu.com/Jedimaster/aggbug/10767.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/Jedimaster/" target="_blank">周L</a> 2006-08-01 22:14 <a href="http://www.shnenglu.com/Jedimaster/archive/2006/08/01/10767.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.vkqn.cn" target="_blank">޹ŮƷþþþá</a>| <a href="http://www.ppxp.com.cn" target="_blank">ŷۺҹҹþ</a>| <a href="http://www.fkmlt.cn" target="_blank">ۺϾþþþþ</a>| <a href="http://www.gn-online.com.cn" target="_blank">þۺɫHEZYO</a>| <a href="http://www.yczu.cn" target="_blank">þþþþüƷþþ</a>| <a href="http://www.yt-tongyong.cn" target="_blank">þþƷ69Ʒ </a>| <a href="http://www.sh-ar.cn" target="_blank">鶹avþavʢav</a>| <a href="http://www.caribbeanlagoon.com.cn " target="_blank">þþþƵ</a>| <a href="http://www.ghfsp.cn" target="_blank">þˬˬƬAV鶹</a>| <a href="http://www.ningxue520.cn" target="_blank">һþaþþƷۺҹҹ </a>| <a href="http://www.uoip.cn" target="_blank">99þ뾫Ʒϵ</a>| <a href="http://www.caster.org.cn" target="_blank">þۺɫˮ99ž</a>| <a href="http://www.xiatiancaiwu.cn" target="_blank">þҹ³˿Ƭϼ</a>| <a href="http://www.xyzl8.cn" target="_blank">һõþۺϺݺݰ</a>| <a href="http://www.9r6.com.cn" target="_blank">޾þþһ</a>| <a href="http://www.hy129.cn" target="_blank">þþþþþ</a>| <a href="http://www.5icsw.cn" target="_blank">þ99Ƶ</a>| <a href="http://www.liuyunying.cn" target="_blank">þûƵ</a>| <a href="http://www.94byq.cn" target="_blank">þˬˬƬav鷳</a>| <a href="http://www.ruimen.com.cn" target="_blank">aѹۿþav</a>| <a href="http://www.mizhewang.cn" target="_blank">þþþþþAv</a>| <a href="http://www.pb-wines.cn" target="_blank">þþƷ99þ㽶</a>| <a href="http://www.pu1166.cn" target="_blank">91޹˾þþƷַ</a>| <a href="http://www.ktrb.net.cn" target="_blank">ƷŷƬþùŷ...</a>| <a href="http://www.pochai.cn" target="_blank">Ʒһþ</a>| <a href="http://www.bddp.com.cn" target="_blank">þӰۺ</a>| <a href="http://www.bodycode.net.cn" target="_blank">þþþƷһ </a>| <a href="http://www.qhsy217.cn" target="_blank">ĻƷѾþ</a>| <a href="http://www.dongzhounews.cn" target="_blank">˾þô߽avӰԺ</a>| <a href="http://www.gaguni.cn" target="_blank">˾þþƷһ</a>| <a href="http://www.funziot.cn" target="_blank">˾þۺ2020</a>| <a href="http://www.96papa.cn" target="_blank">ŷպþAV</a>| <a href="http://www.jiangyuyun.cn" target="_blank">ŷɫ۾þþƷ</a>| <a href="http://www.uxiw.cn" target="_blank">97þþƷˬ</a>| <a href="http://www.puruimu.cn" target="_blank">˾þþƷһ</a>| <a href="http://www.hedaji.cn" target="_blank">þþŮ붯ȺëƬ</a>| <a href="http://www.gznfrc.com.cn" target="_blank">þþþӰԺŮ</a>| <a href="http://www.siteni.cn" target="_blank">ҹŷƷþþþþþ </a>| <a href="http://www.hgflt.cn" target="_blank">þùƵ</a>| <a href="http://www.llqu.cn" target="_blank">þþþ뾫Ʒ</a>| <a href="http://www.youk6.cn" target="_blank">þþþþëƬѿ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>