สถาปัตยกรรมคอมพิวเตอร์แบบ SIMD
งานๆหนึ่ง ถ้าใช้คนงานช่วยกันทำ 1 คน ทำงาน ใช้เวลา 100 หน่วยเวลา แต่หากว่า ให้มีผู้ช่วย มาช่วยทำงานก็จะลดเวลาเหลือเพียง 50 หน่วยเวลา แล้วถ้ามีคนมาช่วยกันทำถึง 100 คน เวลาที่จะทำงานให้สำเร็จนั้น ก็เหลือเพียงแค่ 1 หน่วยเวลา ... ทฤษฎีนี้ เป็นไปได้ไหม?
จะว่าเป็นไปได้ ก็ใช่ เพราะหลายๆคนช่วยกันทำงานงานก็จะสำเร็จเร็วขึ้น แต่ จะว่าเป็นไปไม่ได้ ก็ใช่เช่นกัน เพราะว่า การทำงานนั้น บางที ก็ต้องรอผลของอีกขั้นตอนหนึ่งก่อน เพื่อจะมาใช้ในขั้นตอนที่จะทำงานต่อไป เพราะฉะนั้น ให้ 100 คนทำ ก็อาจทำไม่สำเร็จได้ในเวลาเพียง 1 หน่วยเวลา
แนวความคิดนี้ ก็ถูกนำมาพัฒนาใช้กับการทำงานของการประมวลผลของคอมพิวเตอร์เช่นกัน ... กล่าวคือ ถ้าหากว่า ถ้าให้ CPU ทำการประมวลผล แบบตามลำดับ คือ ทีละ 1 คำสั่ง เพราะฉะนั้น ถ้ามีข้อมูลมา 100 ชุด ก็จะใช้เวลา 100 หน่วยเวลา แต่ถ้าหากว่า มีหลายๆ CPU มาช่วยกันทำงานล่ะ ก็น่าจะลดเวลาการทำงานให้เสร็จลงใช่ไหม?
คำตอบก็เหมือนกับการทำงานของคนข้างต้น ... ตัวอย่างเหล่านี้ คือ concept หรือ แนวคิด ของการทำงาน หรือ การประมวลผลแบบขนาน ซึ่งในคราวนี้ เราจะมาพูดถึงกันในเรื่องของสถาปัตยกรรมแบบ SIMD ซึ่ง ก็จัดเป็นประเภทการประมวลผลแบบขนานแบบหนึ่ง
• SIMD คืออะไร?
SIMD หรือ Single Instruction Multiple Data stream หรือ กล่าวคือ เป็นการประมวลผลแบบที่มีข้อมูลเข้ามาหลายๆ ชุด โดยใช้คำสั่งในการประมวลผล เพียงชุดคำสั่งเดียว และได้ผลลัพธ์ออกมาหลายๆผล ( เพราะมีหลายชุดข้อมูล )
• มันทำงานอย่างไร?
ถ้าเราต้องการคูณ Matrix A ขนาด 3*3 เข้ากับ Matrix B ขนาด 3*3 เพื่อให้ได้ผลลัพธ์ คือ 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 หน่วยเวลา เลยด้วยซ้ำ
แต่ในความเป็นจริงนั้น ก็่ใช่ว่าจะสามารถทำได้เช่นนี้จริงๆ เพราะ การที่จะทำเช่นนี้ได้นั้น ( เช่นจากตัวอย่าง การคูณพร้อมๆกันทีละหลายๆ ตัว ) ก็ต้องใช้หน่วยความจำ และ Register มากๆ ซึ่งแน่นอน CPU ไม่รองรับถึงขนาดมากๆ เช่นนั้น มันก็จะมี Limit ของมัน ทำให้ผลที่ได้ ก็ไม่ได้ดีถึงระดับตามทฤษฎี จากตัวอย่างข้างต้น
และในบางเรื่องของการทำงาน ก็ไม่สามารถแสดงประสิทธิภาพออกมาได้อย่างเต็มที่ เช่น Loop ของการบวกค่าที่ ค่าผลลัพธ์ของ Process แรกจะไปเป็น ค่าอินพุทของ Process ถัดไป ดังนี้
A = B + C และ
D = C + A
ซึ่งจะเห็นได้ว่า จะทำการบวกค่า ทั้งสองค่า พร้อมๆกันไม่ได้แน่ๆ เนื่องจากว่า D นั้น จะต้องรอผลลัพธ์จาก A เสียก่อน จึงจะหาค่าของ D ได้ ตรงนี้ ก็ทำให้การประมวลผลแบบนี้ ไม่มีความหมาย หรือไม่ช่วยอะไรเลย
• เอาไปใช้งานได้อย่างไร?
จะเห็นไว้ว่าสถาปัตยกรรมแบบนี้มันจะมีประสิทธิภาพมากๆ โดยเฉพาะเรื่องของการคูณ Matrix ... ซึ่งถ้าดูๆ ไปแล้วอาจมองไม่เห็นถึงประโยชน์ของการคูณ Matrix แต่จริงๆ แล้ว เรื่อง Matrix นี่มีการนำมาใช้ในการ Transform รูปภาพกันมาก ทั้งการหมุนภาพ หรือ การย่อ ขยายภาพนั้น ล้วนแล้วแต่ประยุกต์มาจากเรื่อง Matrix ทั้งนั้น
• สถาปัตยกรรมที่เกี่ยวข้อง
•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 สำหรับวิธีนี้นั้น ก็ดูเหมือนจะแยกกันทำงานได้เลย คือ รับข้อมูลมาหลายๆ ชุด แล้วก็ทำงานหลายๆ คำสั่ง ไปพร้อมๆกัน
ที่มา ฉ 1999 BeyondXtream. Comment or Suggestion : ByX@vision4d.com
http://pantip.inet.co.th/club/comprice/SIMD.html
อัพเดตความรู้ ข้อมูล ข่าวสารด้านคอมพิวเตอร์และเทคโนโลยีสารสนเทศ กับเว็บบล็อก http://computertru.blogspot.com
Music Hit In your life
สมัครสมาชิก:
ส่งความคิดเห็น (Atom)
กสทช
(1)
เกมส์คอมพิวเตอร์
(6)
ข่าวสั้นไอที
(3)
ข่าวไอที
(27)
คุณธรรมสำหรับผู้ใช้งานอินเทอร์เน็ต
(4)
ทิปคอมพิวเตอร์
(13)
เนื้อหา รูปภาพ หรือสื่ออื่นที่ปรากฎเป็นของเจ้าของบทความนั้นๆ
(15)
แนะนำเว็บไซต์
(2)
พระราชบัญญัติว่าด้วยการกระทำความผิดเกี่ยวกับคอมพิวเตอร์
(1)
ระบบเติมเงิน
(1)
ระบบปฏิบัติการ Operating System
(8)
ละเมิด
(1)
Computer IT Technology
(17)
Computer Virus
(7)
Hardware Computer
(32)
Information technology IT
(58)
Network ระบบเครือข่าย
(57)
Software Internet
(28)
ไม่มีความคิดเห็น:
แสดงความคิดเห็น