ʶһѵ¡ÃÃÁ¤ÍÁ¾ÔÇàµÍÃìẺ SIMD

[ Post : 24 May 1999 ]

§Ò¹æË¹Öè§ ¶éÒãªé¤¹§Ò¹ªèÇ¡ѹ·Ó 1 ¤¹ ·Ó§Ò¹ ãªéàÇÅÒ 100 ˹èÇÂàÇÅÒ áµèËÒ¡ÇèÒ ãËéÁÕ¼ÙéªèÇ ÁÒªèÇ·ӧҹ¡ç¨ÐÅ´àÇÅÒàËÅ×Íà¾Õ§ 50 ˹èÇÂàÇÅÒ áÅéǶéÒÁÕ¤¹ÁÒªèÇ¡ѹ·Ó¶Ö§ 100 ¤¹ àÇÅÒ·Õè¨Ð·Ó§Ò¹ãËéÊÓàÃ稹Ñé¹ ¡çàËÅ×Íà¾Õ§á¤è 1 ˹èÇÂàÇÅÒ ... ·ÄɮչÕé à»ç¹ä»ä´éäËÁ?

¨ÐÇèÒà»ç¹ä»ä´é ¡çãªè à¾ÃÒÐËÅÒÂæ¤¹ªèÇ¡ѹ·Ó§Ò¹§Ò¹¡ç¨ÐÊÓàÃç¨àÃçÇ¢Öé¹ áµè ¨ÐÇèÒà»ç¹ä»äÁèä´é ¡çãªèàªè¹¡Ñ¹ à¾ÃÒÐÇèÒ ¡Ò÷ӧҹ¹Ñé¹ ºÒ§·Õ ¡çµéͧÃͼŢͧÍÕ¡¢Ñ鹵͹˹Öè§¡è͹ à¾×èͨÐÁÒãªéã¹¢Ñ鹵͹·Õè¨Ð·Ó§Ò¹µèÍä» à¾ÃÒЩйÑé¹ ãËé 100 ¤¹·Ó ¡çÍÒ¨·ÓäÁèÊÓàÃç¨ä´éã¹àÇÅÒà¾Õ§ 1 ˹èÇÂàÇÅÒ

á¹Ç¤ÇÒÁ¤Ô´¹Õé ¡ç¶Ù¡¹ÓÁҾѲ¹Òãªé¡Ñº¡Ò÷ӧҹ¢Í§¡ÒûÃÐÁÇżŢͧ¤ÍÁ¾ÔÇàµÍÃìàªè¹¡Ñ¹ ... ¡ÅèÒǤ×Í ¶éÒËÒ¡ÇèÒ ¶éÒãËé CPU ·Ó¡ÒûÃÐÁÇżŠẺµÒÁÅӴѺ ¤×Í ·ÕÅÐ 1 ¤ÓÊÑè§ à¾ÃÒЩйÑé¹ ¶éÒÁÕ¢éÍÁÙÅÁÒ 100 ªØ´ ¡ç¨ÐãªéàÇÅÒ 100 ˹èÇÂàÇÅÒ áµè¶éÒËÒ¡ÇèÒ ÁÕËÅÒÂæ CPU ÁÒªèÇ¡ѹ·Ó§Ò¹ÅèÐ ¡ç¹èÒ¨ÐÅ´àÇÅÒ¡Ò÷ӧҹãËéàÊÃç¨Å§ãªèäËÁ?

¤ÓµÍº¡çàËÁ×͹¡Ñº¡Ò÷ӧҹ¢Í§¤¹¢éÒ§µé¹ ... µÑÇÍÂèÒ§àËÅèÒ¹Õé ¤×Í concept ËÃ×Í á¹Ç¤Ô´ ¢Í§¡Ò÷ӧҹ ËÃ×Í ¡ÒûÃÐÁÇżÅẺ¢¹Ò¹ «Öè§ã¹¤ÃÒǹÕé àÃÒ¨ÐÁÒ¾Ù´¶Ö§¡Ñ¹ã¹àÃ×èͧ¢Í§Ê¶Ò»ÑµÂ¡ÃÃÁẺ SIMD «Öè§ ¡ç¨Ñ´à»ç¹»ÃÐàÀ·¡ÒûÃÐÁÇżÅẺ¢¹Ò¹áººË¹Öè§

SIMD ¤×ÍÍÐäÃ?

SIMD ËÃ×Í Single Instruction Multiple Data stream ËÃ×Í ¡ÅèÒǤ×Í à»ç¹¡ÒûÃÐÁÇżÅẺ·ÕèÁÕ¢éÍÁÙÅà¢éÒÁÒËÅÒÂæ ªØ´ â´Âãªé¤ÓÊÑè§ã¹¡ÒûÃÐÁÇżŠà¾Õ§ªØ´¤ÓÊÑè§à´ÕÂÇ áÅÐä´é¼ÅÅѾ¸ìÍÍ¡ÁÒËÅÒÂæ¼Å ( à¾ÃÒÐÁÕËÅÒªش¢éÍÁÙÅ ) Åͧ´Ù¨Ò¡ÃÙ»¹Ð¤ÃѺ



Áѹ·Ó§Ò¹ÍÂèÒ§äÃ?

àÍÒÅФÃѺ ÁÒ¶Ö§µÃ§¹Õé¡ç¤§¨ÐàÃÔèÁ§§æ¡Ñ¹áÅéÇãªèäËÁ¤ÃѺ ÇèÒ ¶éÒÍÂèÒ§¹ÕéáÅéÇ Áѹ¨ÐÁÕ´ÕÍÂèÒ§äà àÍÒÍÂèÒ§¹Õé¡çáÅéǡѹ¹Ð¤ÃѺ àÃÒ¨ÐÁÒ´ÙµÑÇÍÂèҧ㹡ÒÃãªé§Ò¹¢Í§Áѹ¡Ñ¹¹Ð¤ÃѺ Åͧ¹Ö¡¶Ö§¡Òäٳ Matrix ¡Ñ¹Êѡ˹è͹ФÃѺ ( ¤Ô´ÇèÒ·Ø¡æ·èÒ¹¤§ÃÙé¨Ñ¡ Matrix ¡Ñ¹ÁÒºéÒ§áÅéǹФÃѺ ... äÁèãªèÀҾ¹µÃì·Õè¤Õ¹ÙÃÕ¿áÊ´§¹Ð¤ÃѺ :-P )

¶éÒ¼Áµéͧ¡Òäٳ Matrix A à¢éҡѺ Matrix B à¾×èÍãËéä´é¼ÅÅѾ¸ì ¤×Í Matrix C ´Ñ§ÃÙ»¹Ð¤ÃѺ



â´Â¤èҢͧ Matrix C ¹Ñ鹨Ðä´éÁÒ¨Ò¡ ¼Å¤Ù³áÅÐ ¼ÅºÇ¡¢Í§ Matrix A áÅÐ B ´Ñ§¹Õé¤ÃѺ

c11 = ( a11 * b11 ) + ( a21 * b12 ) + ( a31 * b13 )

«Öè§¡ç¤×Í ¤èҢͧ Matrix C µÑÇáá ( á¶Ç·Õè 1 ËÅÑ¡·Õè 1 ) ¹Ñé¹ ÁÒ¨Ò¡ ¼ÅºÇ¡ ¢Í§¼Å¤Ù³¨Ò¡á¶Ç·Õè 1 ¢Í§ Matrix A ¡Ñº ËÅÑ¡·Õè 1 ¢Í§ Matrix B áÅР㹷ӹͧà´ÕÂǡѹ ÊÓËÃѺ¤èҢͧ C µÑÇ·ÕèÊͧ ( á¶Ç·Õè 1 ËÅÑ¡·Õè 2 ) ¡ç¨ÐÁÒ¨Ò¡ ¼ÅºÇ¡¢Í§¼Å¤Ù³¢Í§á¶Ç·Õè 1 ¢Í§ Matrix A ¡Ñº ËÅÑ¡·Õè 2 ¢Í§ Matrix B ´Ñ§¹Õé¤ÃѺ

c21 = ( a11 * b21 ) + ( a21 * b22 ) + ( a31 * b23 )

¶éÒãËé·Ó¡Òäٳ Matrix ´Ñ§¡ÅèÒÇ ¡çÅͧ¤Ô´´Ù¹Ð¤ÃѺ ÇèҨеéͧãªéàÇÅÒ㹡Ò÷ӧҹà·èÒäà ¶éÒ¤èÍÂæ·Ó·ÕÅÐ ªØ´¢éÍÁÙÅ áÅÐ ªØ´¤ÓÊÑè§ ...

´Ù¡Ñ¹§èÒÂæ ¡Ñ¹¡è͹¡çä´é¤ÃѺ ÊÓËÃѺ¡ÒÃËÒ¤èÒ ¢Í§ c11 ¶éÒ¼Á¡Ó˹´ãËé¡Òäٳ¹Ñé¹ãªéàÇÅÒ㹡ÒûÃÐÁÇżŤ×Í 4 ˹èÇÂàÇÅÒ áÅÐ ¡Òúǡà»ç¹ 1 ˹èÇÂàÇÅÒ

à¾ÃÒЩйÑ鹡Ò÷ӧҹẺ»¡µÔ ËÃ×Í ·ÓµÒÁÅӴѺ¢Ñé¹ ¡ç¨ÐµéͧàÊÕÂàÇÅÒ㹡Òäٳ 3 ¤ÃÑé§ ¡ç¤×Í a11*b11 áÅÐ a21*b12 áÅÐ a31*b13 «Öè§¡ç¨ÐãªéàÇÅÒ ä»·Ñé§ÊÔé¹ 3*4 = 12 ˹èÇÂàÇÅÒ áÅÐ ÂѧµéͧàÊÕ¡ÒúǡÍÕ¡ 2 ¤ÃÑé§ à¾ÃÒÐ㹡Òúǡ µéͧºÇ¡·ÕÅÐ 2 ¤èÒ äÁèÊÒÁÒöºÇ¡¤ÃÑé§à´ÕÂÇ´éǤèÒ 3 ¤èÒä´é ¡ç¨ÐàÊÕÂàÇÅÒ㹡ÒúǡÍÕ¡ 1*2 = 2 ˹èÇÂàÇÅÒ à¾ÃÒЩйÑé¹ ¡ç¨ÐãªéàÇÅÒ㹡ÒÃËÒ¤èҢͧ c11 ·Ñé§ÊÔé¹ 14 ˹èÇÂàÇÅÒ «Öè§ÊÓËÃѺ Matrix ¹Õé à»ç¹ Matrix ·ÕèÁÕ¢¹Ò´ 3x3 ¤×Í ¨ÐÁÕÊÁÒªÔ¡·Ñé§ËÁ´ 9 µÑÇ à¾ÃÒЩйÑé¹ ¡ç¨ÐãªéàÇÅÒ㹡ÒÃËҼŤٳ·Ñé§ËÁ´ 9*14 = 126 ˹èÇÂàÇÅÒàÅ·Õà´ÕÂÇ

·Õ¹ÕéàÃÒÅͧÁÒ´Ù¡ÒûÃÐÁÇżŢͧʶһѵ¡ÃÃÁẺ SIMD ¡Ñ¹ºéÒ§ ʶһѵ¡ÃÃÁẺ¹Õé¹Ñé¹ ÍÂèÒ§·Õè¡ÅèÒÇÁÒáÅéÇ ¡ç¤×Í ¨ÐÊÒÁÒö»ÃÐÁÇżŠ´éǪش¢éÍÁÙÅËÅÒÂæªØ´ «Öè§äÁèà¡ÕèÂÇ¢éͧ¡Ñ¹ ´éǤÓÊÑè§à´ÕÂǡѹä´é¾ÃéÍÁæ¡Ñ¹àÅ à¾ÃÒЩйÑé¹ ¡Òäٳ¡ç¨Ð·Óä´é¾ÃéÍÁæ¡Ñ¹àÅ·Ñé§ 3 ¤èÒ ¤×ÍÊÒÁÒöËÒ¤èÒ¢Í a11*b11áÅÐ a12*b12 áÅÐ a31*b13 ä´éã¹àÇÅÒà´ÕÂǡѹàŤÃѺ à¾ÃÒЩйÑé¹àÇÅÒ·Õèãªé 㹡Òäٳ 3 ¤èÒ¹Õé ¡ç¤×Í 4 ˹èÇÂàÇÅÒà·èÒ¹Ñé¹ áÅÐÊÓËÃѺ¡Òúǡ ¡çÂѧ¤§µéͧãªé 2 ¤ÃÑé§ à¾ÃÒÐäÁèÇèҨкǡÂÑ§ä§ ¡çäÁèÊÒÁÒöºÇ¡¡Ñ¹·ÕÅÐ 3 ¤èÒä´é áÅÐ ·ÕèÊӤѭ¡ç¤×Í 3 ¤èÒ¹Ñé¹ áºè§¡Ñ¹ºÇ¡·ÕÅÐ 2 ¡çäÁèä´é à¾ÃÒЩйÑé¹ ¡çµéͧàÊÕÂàÇÅÒÍÕ¡ 2 ¤ÃÑ駤×Í 1*2 = 2 ˹èÇÂàÇÅÒ ÊÃØ»¡ç¤×ͨÐãªéàÇÅÒ㹡ÒÃËÒ¤èÒ˹Öè§æ ¤×Í 4+2 = 6 ˹èÇÂàÇÅÒà·èÒ¹Ñé¹àͧ áÅÐËÒ¡à»ç¹¡ÒÃËÒ¤èҢͧ·Ñé§ Matrix ·Ñé§ 9 µÑÇ ¡çÊÒÁÒöãªéàÇÅÒ㹡Òäٳ¤èÒ·Ñé§ËÁ´à¾Õ§ 4 à·èÒ¹Ñé¹ áÅéÇ¡çàÊÕÂàÇÅÒ㹡Òúǡ à¾Õ§ 2 à·èÒ¹Ñé¹ àªè¹¡Ñ¹¤ÃѺ à¾ÃÒÐÇèÒ·Ó§Ò¹´éǤÓÊÑè§à´ÕÂǡѹ áµèµèÒ§ªØ´¢éÍÁÙšѹ áÅÐ ¢éÍÁÙŹÑé¹äÁèà¡ÕèÂÇà¹×èͧ¡Ñ¹ à¾ÃÒЩйÑé¹ ¼Å¤Ù³¢Í§·Ñé§ Matrix ¡ç¨ÐÊÒÁÒöËÒÁÒä´éà¾Õ§á¤è 6 ˹èÇÂàÇÅÒ àÅ´éÇ«éÓ

¤ÃѺ¹Õè¡çà»ç¹µÑÇÍÂèÒ§¤ÃèÒÇæ ÊÓËÃѺ¡ÒûÃÐÁÇżŢͧʶһѵ¡ÃÃÁẺ SIMD ¹Ð¤ÃѺ «Öè§¡ç´ÙáÅéÇ ãËé¼Å·ÕèàÃçÇ¢Öé¹ÁÒ¡æ àÅ áµè 㹤ÇÒÁà»ç¹¨ÃÔ§¹Ñé¹ ¡çèãªèÇèÒ¨ÐÊÒÁÒö·Óä´éàªè¹¹Õé¨ÃÔ§æ à¾ÃÒÐ ¡Ò÷Õè¨Ð·Óàªè¹¹Õéä´é¹Ñé¹ ( àªè¹¨Ò¡µÑÇÍÂèÒ§ ¡Òäٳ¾ÃéÍÁæ¡Ñ¹·ÕÅÐËÅÒÂæ µÑÇ ) ¡çµéͧãªé˹èǤÇÒÁ¨Ó áÅÐ Register ÁÒ¡æ «Öè§á¹è¹Í¹ CPU äÁèÃͧÃѺ¶Ö§¢¹Ò´ÁÒ¡æ àªè¹¹Ñé¹ËÅèФÃѺ Áѹ¡ç¨ÐÁÕ Limit ¢Í§Áѹ ·ÓãËé¼Å·Õèä´é ¡çäÁèä´é´Õ¶Ö§ÃдѺµÒÁ·ÄÉ®Õ ¨Ò¡µÑÇÍÂèÒ§¢éÒ§µé¹ÅйФÃѺ

áÅÐ㹺ҧàÃ×èͧ¢Í§¡Ò÷ӧҹ ¡çäÁèÊÒÁÒöáÊ´§»ÃÐÊÔ·¸ÔÀÒ¾ÍÍ¡ÁÒä´éÍÂèÒ§àµçÁ·Õè àªè¹ Loop ¢Í§¡Òúǡ¤èÒ·Õè ¤èÒ¼ÅÅѾ¸ì¢Í§ Process áá¨Ðä»à»ç¹ ¤èÒÍÔ¹¾Ø·¢Í§ Process ¶Ñ´ä» ´Ñ§¹Õé¤ÃѺ

A = B + C áÅÐ
D = C + A

«Ö觨ÐàËç¹ä´éÇèÒ ¨Ð·Ó¡Òúǡ¤èÒ ·Ñé§Êͧ¤èÒ ¾ÃéÍÁæ¡Ñ¹äÁèä´éá¹èæ à¹×èͧ¨Ò¡ÇèÒ D ¹Ñé¹ ¨ÐµéͧÃͼÅÅѾ¸ì¨Ò¡ A àÊÕ¡è͹ ¨Ö§¨ÐËÒ¤èҢͧ D ä´é µÃ§¹Õé ¡ç·ÓãËé¡ÒûÃÐÁÇżÅẺ¹Õé äÁèÁÕ¤ÇÒÁËÁÒ ËÃ×ÍäÁèªèÇÂÍÐäÃàÅÂ

àÍÒä»ãªé§Ò¹ä´éÍÂèÒ§äÃ?

¨Ò¡·ÕèàËç¹áÅéǹФÃѺ ÇèÒÁѹ¨ÐÁÕ»ÃÐÊÔ·¸ÔÀÒ¾ÁÒ¡æ â´Â੾ÒÐàÃ×èͧ¢Í§¡Òäٳ Matrix ... «Öè§¶éÒ´Ùæ ä»áÅéÇÍÒ¨ÁͧäÁèàËç¹¶Ö§»ÃÐ⪹ì¢Í§¡Òäٳ Matrix ãªèäËÁ¤ÃѺ? ¨ÃÔ§æ áÅéÇ àÃ×èͧ Matrix ¹ÕèÁÕ¡ÒùÓÁÒãªé㹡Òà Transform ÃÙ»ÀÒ¾¡Ñ¹ÁÒ¡æ àÅ ·Ñé§¡ÒÃËÁعÀÒ¾ ËÃ×Í ¡ÒÃÂèÍ ¢ÂÒÂÀÒ¾¹Ñé¹ ÅéǹáÅéÇáµè»ÃÐÂØ¡µìÁÒ¨Ò¡àÃ×èͧ Matrix ·Ñé§¹Ñé¹àÅÂ

¼Áà¤Âà¢Õ¹ Program ¡ÒÃËÁعÀÒ¾ Bitmap Ẻ 2 ÁÔµÔ ¡çãªéÇÔ¸Õ¡Òäٳ Matrix ¹ÕèËÅèФÃѺ 㹡Ò÷ӡÒÃËÁعÀÒ¾ «Ö觵ç¹Õé¨ÐäÁè¢Í͸ԺÒÂàÃ×èͧ¢Í§¡Òà coding ÅйФÃѺ à¾ÃÒШй͡àÃ×èͧàÍÒ áµèËÒ¡ÇèÒʹ㨠¡ç¨Ð¹ÓÁÒàʹÍãËé·ÃÒº¡Ñ¹µèÍ令ÃѺ

¡ç¢Í¡µÑÇÍÂèÒ§àÃ×èͧ¡ÒùÓä»ãªé§Ò¹ ´éÒ¹à´ÕÂÇ¡è͹¹Ð¤ÃѺ ( áËÐæ ¹Ö¡ÍÍ¡µÍ¹¹Õé ·Õèà´è¹ªÑ´ ¡çÁÕàÃ×èͧ¹ÕéËÅèФÃѺ )

ʶһѵ¡ÃÃÁ·Õèà¡ÕèÂÇ¢éͧ

äË¹æ ¡çä˹æ áÅéÇ ¡ç¢Í¡ÅèÒÇà¾ÔèÁàµÔÁà¡ÕèÂǡѺʶһѵ¡ÃÃÁ·Õèà¡ÕèÂÇ¢éͧ¡Ñº SIMD Êѡ˹è͹ФÃѺ à¾ÃÒеèÒ§¡çà»ç¹»ÃÐàÀ·¢Í§Ê¶Ò»ÑµÂ¡ÃÃÁ¡ÒûÃÐÁÇżÅẺ¢¹Ò¹ ·Õè Flynn à»ç¹¼Ùé¹ÓàʹͷÑé§ÊÔ鹤ÃѺ

àÍÒÅФÃѺ ÊÓËÃѺàÃ×èͧ¢Í§ SIMD ¹Õé ¼Á¡ç¤§µéͧ¢Í¨ºà¾Õ§à·èÒ¹Õé¡è͹ ËÒ¡ÁÕ¢éͼԴ¾ÅÒ´ ËÃ×Í ¢éÍàʹÍá¹Ð »ÃСÒÃã´ ¡ç e-mail ÁÒá¹Ð¹Ó¡Ñ¹ä´é¤ÃѺ ÂÔ¹´ÕÃѺ¿Ñ§ ¤ÃѺ :-) áÅÐ ËÒ¡ÁÕ¢éÍÁÙÅà¾ÔèÁàµÔÁ ¡ç¨Ð¹ÓÁÒŧãËéÍèÒ¹¡Ñ¹µèÍ令ÃѺ

1