§Ò¹æË¹Öè§
¶éÒãªé¤¹§Ò¹ªèÇ¡ѹ·Ó 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
à»ç¹¼Ùé¹ÓàʹͷÑé§ÊÔ鹤ÃѺ
- SISD ËÃ×Í Single Instruction Single Data stream à»ç¹¡ÒûÃÐÁÇżÅẺ¾×é¹°Ò¹·ÕèÊØ´
¡ÅèÒǤ×Í
Áժش¢éÍÁÙÅà¾Õ§ªØ´à´ÕÂÇ áÅÐ
·Ó§Ò¹´éǤÓÊÑè§à´ÕÂÇ
- MISD ËÃ×Í Multiple Instruction Single Data stream ÇÔ¸Õ¹Õé
¡ç¨Ðà»ç¹¡ÒûÃÐÁÇżŢͧªØ´¢éÍÁÙÅà¾Õ§ªØ´à´ÕÂÇ
áµèÇèÒ ·Ó¡ÑºËÅÒÂæ ¤ÓÊÑè§ àªè¹ A+B,
A*B, A-B áÅÐ A/B à»ç¹µé¹ «Ö觨ÐÇèÒä»
¡ç¤§äÁèÁÕ ËÃ×Í ¹éÍÂÁÒ¡ÅФÃѺ
·Õè¨Ðãªé¡ÒûÃÐÁÇżÅẺ¹Õé
·ÓãËéʶһѵ¡ÃÃÁÍѹ¹Õé
äÁèÁÕã¤Ã¾Ñ²¹Ò
- MIMD ËÃ×Í Multiple Instruction Multiple Data stream ÊÓËÃѺÇÔ¸Õ¹Õé¹Ñé¹
¡ç´ÙàËÁ×͹¨Ðᡡѹ·Ó§Ò¹ä´éàÅÂ
¤×Í ÃѺ¢éÍÁÙÅÁÒËÅÒÂæ ªØ´
áÅéÇ¡ç·Ó§Ò¹ËÅÒÂæ ¤ÓÊÑè§
仾ÃéÍÁæ¡Ñ¹
àÍÒÅФÃѺ ÊÓËÃѺàÃ×èͧ¢Í§ SIMD
¹Õé
¼Á¡ç¤§µéͧ¢Í¨ºà¾Õ§à·èÒ¹Õé¡è͹
ËÒ¡ÁÕ¢éͼԴ¾ÅÒ´ ËÃ×Í ¢éÍàʹÍá¹Ð
»ÃСÒÃã´ ¡ç e-mail ÁÒá¹Ð¹Ó¡Ñ¹ä´é¤ÃѺ
ÂÔ¹´ÕÃѺ¿Ñ§ ¤ÃѺ :-) áÅÐ
ËÒ¡ÁÕ¢éÍÁÙÅà¾ÔèÁàµÔÁ
¡ç¨Ð¹ÓÁÒŧãËéÍèÒ¹¡Ñ¹µèÍ令ÃѺ