http://review.gzeasy.com/ ¡¾×ªÔØ¡¿ 2005Äê10ÔÂ08ÈÕ 13:50 ÆÀÂÛ
RADEON X1000ϵPixel Shader½á¹¹¡ª¡ª¼«Ï̷ַ߳¢´¦ÀíÆ÷
ÔÚ½éÉÜRADEON X1000ϵPixel ShaderµÄÏ̼߳¼Êõ֮ǰ£¬ÎÒÃÇÓбØÒªÏÈ¿´¿´NVIDIAÒ»Äê¶àǰ¿ªÊ¼Êµ×÷µÄSM3 GPU¡ª¡ªGeForce 6800Êdz¤µÃÔõÑùµÄ¡£
°´ÕÕNVIDIAÔÚIEEE£¨¹ú¼ÊµçÆøºÍµç×Ó¹¤³ÌʦлᣩHotchips 16»áÒéÉÏ·¢±íµÄÂÛÎÄ£¬ÔÚGeForce 6800ÖУ¬ÎªÁËÒþ²ØÔÚÏÔ´æÖвéÕÒÎÆÀíËùÏûºÄµÄÊý°Ù¸öʱÖÓÖÜÆÚ£¬ÔÚÿ¸öPixel Shader£¨ÏñËØ×ÅÉ«Æ÷£©Öж¼Î¬³Ö׏©ÊýÒÔ°Ù¼ÆÍ¬Ê±ÔË×÷µÄThreadingµÄ״̬£¨Ị̈߳©(To hide the latency of texture lookups that fetch from external memory, each fragment processor maintains state for hundreds of in-flight threads)£º
ÉÏͼ¾ÍÊÇÔÚ¸ÃÂÛÎÄÖеÄGeForce 6800Ìåϵ¼Ü¹¹Í¼£¬Í¼ÖеÄShader thread dispatch¾ÍÊÇGeForce 6800µÄ×ÅÉ«Æ÷Ï̷ַ߳¢Æ÷¡£
ÆÁÄ»ÉϵĶ¥µã¡¢ÏñËØ¶¼ÊǷdz£ºÃµÄ²¢Ðл¯´¦Àí¶ÔÏó£¬Òò´ËÔÚGPU±¾Éí¾ÍÊÇÒ»¸ö·Ç³£µäÐ͵ĶàÏ̻߳¯´¦ÀíÆ÷£¬Ã¿¸ö¶¥µã¡¢Ã¿¸öÏñËØ¶¼¿ÉÒÔ¿´×÷ÊÇÒ»¸öỊ̈߳¨Thread£©¡£ÔÚGeForce 6800µÄVertex ShaderÖУ¬Ã¿¸öVS¶¼ÓÐÈý¸öThreadͬʱÔËÐУ¬¶øÔÚPixel ShaderÕâÒ»¼¶ÔòÊǸü¼ÓÅÓ´ó¡£
ATIÔÚRADEON X1000ϵµÄ²úÆ·ÖÐÌá³öÁËUltra-Threading Dispatch ProcessorµÄ¸ÅÄÆäÑùʽҲÊÇÓеãÀàËÆÓÚGeForce 6800µÄ¸ÅÄËù²»Í¬µÄÊÇATI¸üÔ¸Òâ´ó·½µØ¹«¿ªÁËÆäÉè¼ÆµÄһЩ¼¼Êõ²ÎÊý¡£

Ultra-Threading Dispatch Processor£¨¼«¶àÏ̷ַ߳¢´¦ÀíÆ÷£©
°´ÕÕATIµÄ°×ƤÊé½éÉÜ£¬ÔÚR520£¨RADEON X1800£©µÄPixel Shader Engine£¨ÏñËØ×ÅÉ«Æ÷ÒýÇæ£©Öаüº¬ÁËÒ»¸öÖÐÊà·Ö·¢µ¥Ôª£¨central dispatch unit£¬CDU£©£¬Õâ¸öCDUÄܹ»ÎªÒ»¸öPixel Shader Processor Array£¨ÏñËØ×ÅÉ«´¦ÀíÆ÷¾ØÕ󣩷ַ¢¸ß´ï512¸öÏ̡߳£ÕâЩÏñËØ×ÅÉ«´¦ÀíÆ÷±»°´ÕÕ4¸öÒ»×éµÄ·½Ê½°óÔÚÒ»×飬ÿ¸öÕâÑùµÄ×é±»³Æ×öQuad Pixel Shader Cores£¨ËÄ·½ÏñËØ×ÅÉ«Æ÷Äںˣ©¡£¸÷¸öÄں˶¼ÊDZ˴ËÏà¶Ô×ÔÁ¢µÄ´¦Àíµ¥ÔªÄܹ»´¦ÀíÒ»¸ö2x2µÄÏñËØ¿é¡£ÕâÖÖQUADµÄÉè¼ÆÆäʵÊÇ×ÔR300¾ÍÒýÈëµÄ£¬ÔÚNVIDIAµÄGF6¡¢GF7ÉÏÒ²¶¼ÊÇÀàËÆµÄµ¥Ôª×é³ÉÅäÖ÷½Ê½¡£
Ò»µ©CDU¾õÖªµ½Ä³¸öQUAD´¦ÓÚÏÐÖÃ״̬µÄʱºò£¬¾Í»áÂíÉϵݽ»Ò»¸öеÄÏ̹߳©ÆäÖ´ÐУ¬ÕâÑùµÄÇé¿ö¶àÊý·¢ÉúQUADÔڵȴýÊý¾Ý»òÕßÍê³ÉÁËÈÎÎñµÄʱºò¡£¸ù¾ÝATIµÄ½éÉÜ£¬ÕâÑùµÄÉè¼Æ¿ÉÒÔÈÃX1800µÄPixel ShaderÄÚºËά³Ö³¬¹ý90%µÄÀûÓÃÂÊ¡£
ΪÁËά³Ö¸ßЧµÄÏß³ÌÇл»£¬ATI¸øX1800Éè¼ÆÁËÒ»¸ö´ó¹æÄ£µÄ¡¢ÄÜͬʱ¶Áд£¨¶à¶Ë¿Ú£©¡¢¸ß´ø¿íµÄͨÓüĴæÆ÷¶Ñ£¬ËùÓеÄÁ¬½Ó×ÜÏß¶¼ÊÇFP32λ¿í£¬È·±£Pixel ShaderÔÚÈκÎʱºò¶¼ÄܸßЧµØÍê³ÉFP32¾«¶È¼ÆËã¡£
ATIµÄUltra-ThreadingÉè¼Æ»¹Äܹ»Ìá¸ßPixel Shader 3.0¶¯Ì¬·ÖÖ§µÄÐÔÄÜ¡£¶¯Ì¬·ÖÖ§±»ÈÏΪÊÇPixel Shader 3.0µÄÖØÒªÐÂÌØÐÔ£¬¿ÉÒÔÈÃPixel Shader¸ù¾Ý¼ÆËã³öÀ´µÄÊýÖµÀ´Åܲ»Í¬µÄ·ÖÖ§»òÕßÑ»·¡£Èç¹ûÕýȷʹÓõϰ£¬¶¯Ì¬·ÖÖ§ÄÜÏÔÖøµØÌá¸ßÐÔÄÜ¡£
ÀýÈçÔÚʹÓÃshadow mapµÄʱºò£¬Èç¹ûÒª¶ÔÒõÓ°×÷±ßÔµÈáºÍÈ¡Ñù£¬Ê¹Óö¯Ì¬·ÖÖ§¿ÉÒÔÔÚÓöµ½²»ÐèÒª×÷È¡ÑùµÄÏñËØÀýÈçµÄʱºò¾ÍÌø¹ýÈ¥£¬ÒÔ½ÚÊ¡´óÁ¿µÄpixel shader¼ÆËã×ÊÔ´¡£
ÔÚÉÏͼÖУ¬ÎÒÃÇÖ»ÐèÒª¶ÔÓÒÏ·½ÕÚÕÖÖеİ×É«ÇøÓò×÷ÈáºÍÒõÓ°È¡Ñù£¬¶øºÚÉ«µÄ²¿·Ö¾Í¿ÉÒÔÊ¡ÂÔµôÕâ¸öÈáºÍÒõÓ°È¡Ñù²½Ö裨ÕâÕÅͼƬ×óÉÏ¡¢ÓÒÉÏ¡¢×óÏÂÈý¸ö²¿·Ö¶¼ÊÇÓÃÀ´Ëã³öÓÒÏ·½µÄÕÚÕÖ£©¡£ºÍÕÒ³öÕÚÕֵ͝×÷Ïà±È£¬ÈáºÍÒõÓ°È¡ÑùµÄÐÔÄÜ¿ªÏúÒª¸ßµÃ¶à£¬ÕâÑùʹÓö¯Ì¬·ÖÖ§ÌÞ³ýÎÞÐè¼ÆËãÒõÓ°È¡ÑùµÄÏñËØ¾ÍºÜ»®ËãÁË¡£
µ«ÊÇÐèҪעÒâµÄÊÇ£¬Ä¿Ç°GPUµÄPixel Shader¶¼ÊDzÉÓô«Í³µÄSIMD¼Ü¹¹£¬¶¯Ì¬·ÖÖ§µÄÔË×÷ÍùÍù»áÆÆ»µµô³ÌÐòµÄ²¢ÐÐÐÔ£¬Ê¹µÃ¶¯Ì¬·ÖÖ§´øÀ´µÄÒæ´¦±»Ñڸǵô¡£
ÎÒÃÇÇ°ÃæÌáµ½£¬°üÀ¨R520¡¢NV40¡¢G70µÈÔÚÄÚµÄshader model 3.0 GPU¶¼ÊDzÉÓÃQUAD×飨4¸öpixel shaderÒ»×飩´îÅ䷽ʽ£¬Í¬Ò»¸öQUADÄÚͬһ¸öÖÜÆÚÖ»ÄÜÅÜͬһÀàÖ¸ÁÒÔ¼ò»¯¿ØÖƵç·¡£ÀýÈçQUADÄÚµÄ4¸öÏñËØ¶¼ÅÜaddÖ¸ÁÄǾͺÜÊæ·þÁË£¬QuadÖ»ÐèÒªÒ»¸öÖÜÆÚ¸ã¶¨ÕâËĸöÏñËØ¡£
µ«ÊÇÈç¹ûÕâ4¸öÏñËØ¸÷×ÔÒªÅܲ»ÊÇͬһÀàÖ¸Á¶ø·Ö±ðÊÇÏñËØAÅÜaddÖ¸Áî¡¢ÏñËØBÅÜmulÖ¸Áî¡¢ÏñËØCÅÜmaddÖ¸Áî¡¢ÏñËØDÅÜsubÖ¸ÁîµÄ»°£¬ÄÇôÕâ¸öQUAD¾ÍÐèÒª4¸öÖÜÆÚ²ÅÄÜÍê³ÉÕâ4¸öÏñËØµÄ´¦Àí£¬±ä³ÉÁËÀàËÆSISDµÄÑù×ÓÁË£¬ÐÔÄÜϽµµ½1/4£¬ÕâÊǵ¥ÖÜÆÚ¶àÊý¾Ý´¦ÀíÆ÷ÅÜ·ÖÖ§µÄÌìÉúÎÊÌâ¡£ÈçÏ£º
| ÖÜÆÚ | SIMD×Óµ¥Ôª1 | SIMD×Óµ¥Ôª2 | SIMD×Óµ¥Ôª3 | SIMD×Óµ¥Ôª4 |
| 1 | add | nop (¿Õ²Ù×÷,×ÊÔ´À˷ѵôÁË) |
nop | nop |
| 2 | nop | mul | nop | nop |
| 3 | nop | nop | madd | nop |
| 4 | nop | nop | nop | sub |
ÎÒÃÇÔÚ½éÉÜNVIDIA NV40/G70µÄʱºò¾ÍÌáµ½£¬Vertex ShaderÊôÓÚMIMDÌåϵ£¨¶àÖ¸Áî¶àÊý¾ÝÁ÷£¬ËäÈ»ALUÒ²ÊÇSIMD£¬µ«ÊǸ÷ALUÄܶÀÁ¢Åܲ»Í¬µÄVSÖ¸Áî¡£NV40ÓÐ6¸öVS£¬Ò»¹²6¸ö4D ALUºÍ6¸ö1D ALU£¬Äܹ»·Ö±ðÅÜ12Ìõ²»Í¬µÄVSÖ¸Á£¬·ÖÖ§Ö¸ÁîµÄ¿ªÏú¼¸ºõ¿ÉÒÔ¿´³ÉÊÇÃâ·ÑµÄ£¬Ö´ÐÐЧÂʷdz£¸ß£¬µ«ÊÇÆäPixel ShaderµÄ¶¯Ì¬·ÖÖ§Ö´Ðл¹ÊÇÊôÓڱȽϳõʼµÄ½×¶Î¡£
ÔÚÖ´Ðж¯Ì¬·ÖÖ§ÉÏÇé¿öÒ²ÊÇÀàËÆ£¬Èç¹ûQUADÄÚÓÐÁ½¸öPixel£¨ÏñËØ£©ÅܵķÖÖ§ÊÇÒ»Ñù£¬Õâ¸öQUAD¾Í¿ÉÒÔ¿´×÷³ÉÒ»¸öSI2D£¨µ¥Ö¸ÁîË«Êý¾ÝÁ÷£©µÄSIMDµ¥Ôª¡£³öÏÖSI2DµÄÇé¿ö£¬ÀíÂÛÉϾÍÒâζ×ÅÕâ¸öQUADµÄЧÄܽµµÍ50%¡£
Ò»°ãÀ´Ëµ£¬ÏñÒõÓ°±ßÔµÈáºÍµÄ¶¯Ì¬·ÖÖ§£¬Ò²¾ÍÊÇÁ½Ìõ·ÖÖ§¶øÒÑ£¨ÔÚÒõÓ°±ßÔµÄÚ²»ÐèҪȡÑùºÍÔÚÒõÓ°±ßÔµÍâÐèҪȡÑù£©¡£
ÉÏͼËù˵µÄÊÇÖ¸ATI X1000ÔÚÅÜ·ÖÖ§³ÌÐòµÄʱºò£¬Äܹ»°ÑÆÁÄ»·Ö³ÉºÜ¶à¸ö4X4µÄС¿éÀ´·Ö±ð´¦Àí£¬ÔÚÕâÑùСµÄÒ»¸öÏñËØ¿éÀïÅöµ½Á½Ìõ²»Í¬µÄ·ÖÖ§µÄ»ú»á¾Í·Ç³£Ð¡£¬½µµÍÁ˳öÏÖSI2DµÄ»ú»á¡£
¶øNVIDIAÔÚÆä¿ª·¢Ö¸ÄÏÖбíʾ£º
¡°in order for it to work optimally, branches should be fairly coherent (for example, over regions of roughly 30 x 30 pixels).¡±
Õâ¶Î»°µÄÒâ˼¾ÍÊÇ£¬ÓÉÓÚNV40¡¢G70µÄ·ÖÖ§Ö¸ÁÏú½Ï´ó£¬Èç¹ûÏëÔÚNV40¡¢G70ÉϸßЧµØÖ´Ðж¯Ì¬·ÖÖ§£¬×îºÃÊÇÆÁÄ»ÉϱȽϴóµÄÒ»¿éÏñËØÀ´Ö´ÐУ¬ÀýÈç30X30¡£¶øÇÒÔÚÕâ¸ö30X30µÄÏñËØ¿éÄÚÒª¾¡Á¿È·±£¶¼ÊÇÅÜͬһ¸ö·ÖÖ§£¬Èç¹ûÏñËØ¿éÄÚÓÐÆäËü·ÖÖ§£¬ÄÇôÕâÒ»Õû¸öÏñËØ¿éµÄ´¦ÀíËٶȶ¼»áϽµ¡£
ATI»¹ÌرðÌáµ½ÁË×Ô¼ºµÄ·ÖÖ§µ¥ÔªÃ»ÓÐÕ¼ÓÃALUʱ¼ä£¬ÔÚ·ÖÖ§¿ªÏúÉÏÒª±È´«Í³¼Ü¹¹µÍ²»ÉÙ£º
ÉÏͼÆäʵ·Ö±ðÊÇNVIDIA GeForce 6800ºÍATI X1800µÄ¶¯Ì¬·ÖÖ§Ö¸ÁîÖ®Ò»µÄ¿ªÏú±È½Ï£¬¶ÔÓ¦NVIDIAµÄ±à³ÌÊֲᣬ¿ÉÒÔ¿´³öATIËù¾ÙµÄÀý×Ó¾ÍÊÇ×ʱ¼äµÄ¡°If /else / endif¡±Ö¸Áî¡£´ó¼Ò¿ÉÒÔ¿´µ½£¬Èç¹ûÅÜͬÑùµÄÁ½Ìõ·ÖÖ§£¬ÔÚÖ´ÐÐif/end/endif·ÖÖ§Ö¸ÁîµÄʱºò£¬¡°´«Í³¼Ü¹¹¡±ÐèÒª»¨20¸öÖÜÆÚ²ÅÄÜÍêÈ«ÅÜÍ꣬¶øATIµÄX1000ϵֻÐèÒª14¸öÖÜÆÚ¡£




¾ÍΪÄÇһĨºì iGame GTX 1660 UltraͼÉÍ
A¿¨ÕæÆì½¢ À¶±¦Ê¯RX 5700 XT ³¬°×½ðͼÉÍ
»ªË¶P8Z77-V DELUXEй¦ÄܽâÎö
È«ººÀ¶±©¾µä°æ550µçÔ´ÆÀ²â