อ่าน 2 นาที
ความขนานของงาน
การประมวลผลแบบขนานของงาน (หรือที่รู้จักกันในชื่อ การประมวลผลแบบขนานของฟังก์ชัน และ การประมวลผลแบบขนานของการควบคุม ) เป็นรูปแบบหนึ่งของ การประมวลผล แบบขนาน ของ รหัสคอมพิวเตอร์ บน...
ความขนานของงาน
การประมวลผลแบบขนานของงาน (หรือที่รู้จักกันในชื่อการประมวลผลแบบขนานของฟังก์ชันและการประมวลผลแบบขนานของการควบคุม ) เป็นรูปแบบหนึ่งของ การประมวลผล แบบขนานของรหัสคอมพิวเตอร์ บน โปรเซสเซอร์หลายตัวในสภาพแวดล้อมการประมวลผล แบบขนาน การประมวลผลแบบขนาน ของงานมุ่งเน้นไปที่การกระจายงาน —ซึ่งดำเนินการพร้อมกันโดยกระบวนการหรือเธรด —ไปยังโปรเซสเซอร์ต่างๆ ตรงกันข้ามกับการประมวลผลแบบขนานของข้อมูลซึ่งเกี่ยวข้องกับการเรียกใช้งานงานเดียวกันบนส่วนประกอบข้อมูลที่แตกต่างกัน การประมวลผลแบบขนานของงานนั้นโดดเด่นด้วยการเรียกใช้งานงานที่แตกต่างกันหลายงานในเวลาเดียวกันบนข้อมูลเดียวกัน[ 1 ]การประมวลผลแบบขนานของงานประเภทหนึ่งที่พบได้ทั่วไปคือการประมวลผลแบบไปป์ไลน์ซึ่งประกอบด้วยการย้ายชุดข้อมูลเดียวผ่านชุดงานที่แยกจากกัน โดยแต่ละงานสามารถดำเนินการได้อย่างอิสระจากงานอื่นๆ
คำอธิบาย
ในระบบมัลติโปรเซสเซอร์ การทำงานแบบขนานของงานจะเกิดขึ้นเมื่อโปรเซสเซอร์แต่ละตัวดำเนินการเธรด (หรือกระบวนการ) ที่แตกต่างกันบนข้อมูลเดียวกันหรือต่างกัน เธรดอาจดำเนินการโค้ดเดียวกันหรือต่างกัน ในกรณีทั่วไป เธรดการทำงานที่แตกต่างกันจะสื่อสารกันในขณะที่ทำงาน แต่นี่ไม่ใช่ข้อกำหนด การสื่อสารมักเกิดขึ้นโดยการส่งข้อมูลจากเธรดหนึ่งไปยังอีกเธรดหนึ่งเป็นส่วนหนึ่งของเวิร์กโฟลว์[ 2 ]
ตัวอย่างง่ายๆ สมมติว่าระบบกำลังรันโค้ดบนระบบประมวลผล 2 ตัว ( ซีพียู "a" และ "b") ใน สภาพแวดล้อม แบบขนานและเราต้องการทำงาน "A" และ "B" เราสามารถสั่งให้ซีพียู "a" ทำงาน "A" และซีพียู "b" ทำงาน "B" พร้อมกันได้ ซึ่งจะช่วยลดเวลาในการประมวลผลลงได้ สามารถกำหนดงานได้โดยใช้คำสั่งเงื่อนไขดังที่อธิบายไว้ด้านล่าง
การขนานงานเน้นลักษณะการกระจาย (ขนาน) ของการประมวลผล (เช่น เธรด) ตรงข้ามกับข้อมูล ( การขนานข้อมูล ) โปรแกรมจริงส่วนใหญ่จะอยู่บนเส้นต่อเนื่องระหว่างการขนานงานและการขนานข้อมูล[ 3 ]
การประมวลผลแบบขนานระดับเธรด ( Thread-level parallelismหรือTLP ) คือการประมวลผลแบบขนานที่มีอยู่ในแอปพลิเคชันซึ่งรันหลายเธรด พร้อม กัน การประมวลผลแบบขนานประเภทนี้พบได้มากในแอปพลิเคชันที่เขียนขึ้นสำหรับเซิร์ฟเวอร์ เชิงพาณิชย์ เช่น ฐานข้อมูล การรันหลายเธรดพร้อมกันทำให้แอปพลิเคชันเหล่านี้สามารถทนต่อปริมาณ I/O และความหน่วงของระบบหน่วยความจำที่สูงซึ่งอาจเกิดขึ้นจากภาระงานได้ ในขณะที่เธรดหนึ่งล่าช้าในการรอการเข้าถึงหน่วยความจำหรือดิสก์ เธรดอื่นๆ ก็สามารถทำงานที่เป็นประโยชน์ได้
การใช้ประโยชน์จากการประมวลผลแบบขนานระดับเธรดเริ่มเข้ามามีบทบาทในตลาดคอมพิวเตอร์เดสก์ท็อปมากขึ้น ด้วยการถือกำเนิดของ ไมโครโปรเซสเซอร์ แบบมัลติคอร์เนื่องจากด้วยเหตุผลหลายประการ การเพิ่มความเร็วสัญญาณนาฬิกาหรือจำนวนคำสั่งต่อสัญญาณนาฬิกาของคอร์เดียวเริ่มทำได้ยากขึ้นเรื่อยๆ หากแนวโน้มนี้ยังคงดำเนินต่อไป แอปพลิเคชันใหม่ๆ จะต้องได้รับการออกแบบให้ใช้ประโยชน์จากหลายเธรด เพื่อให้ได้รับประโยชน์จากพลังการประมวลผลที่เพิ่มขึ้น ซึ่งแตกต่างจากการพัฒนาไมโครโปรเซสเซอร์ในอดีตที่โค้ดที่มีอยู่จะถูกเร่งความเร็วโดยอัตโนมัติเมื่อรันบนคอมพิวเตอร์รุ่นใหม่/ที่เร็วกว่า
ตัวอย่าง
รหัสเทียมด้านล่างนี้แสดงให้เห็นถึงการทำงานแบบขนานของงาน:
โปรแกรม: ... ถ้า CPU = "a" แล้ว ทำภารกิจ "A" มิฉะนั้น ถ้า CPU="b" แล้ว ทำภารกิจ "B" จบถ้า ... โปรแกรมสิ้นสุด
เป้าหมายของโปรแกรมคือการทำงานสุทธิรวมบางอย่าง ("A+B") หากเราเขียนโค้ดดังข้างต้นและเรียกใช้บนระบบ 2 โปรเซสเซอร์ สภาพแวดล้อมการทำงานจะดำเนินการดังต่อไปนี้
- ใน ระบบ SPMD (single program, multiple data) ซีพียู ทั้งสองตัว จะประมวลผลโค้ด
- ในสภาพแวดล้อมแบบคู่ขนาน ทั้งสองกลุ่มจะสามารถเข้าถึงข้อมูลเดียวกันได้
- เงื่อนไข "if" ใช้ในการแยกความแตกต่างระหว่าง CPU CPU "a" จะอ่านค่าเป็นจริงในเงื่อนไข "if" และ CPU "b" จะอ่านค่าเป็นจริงในเงื่อนไข "else if" ซึ่งหมายความว่า CPU แต่ละตัวมีหน้าที่ของตัวเอง
- ขณะนี้ CPU ทั้งสองตัวกำลังประมวลผลบล็อกโค้ดที่แยกจากกันพร้อมกัน โดยทำงานที่แตกต่างกันไปพร้อมๆ กัน
โค้ดที่ประมวลผลโดย CPU "a":
โปรแกรม: ... ทำภารกิจ "A" ... โปรแกรมสิ้นสุด
โค้ดที่ประมวลผลโดย CPU "b":
โปรแกรม: ... ทำภารกิจ "B" ... โปรแกรมสิ้นสุด
แนวคิดนี้สามารถนำไปประยุกต์ใช้กับโปรเซสเซอร์จำนวนเท่าใดก็ได้แล้ว
การสนับสนุนด้านภาษา
การประมวลผลแบบขนานของงานสามารถทำได้ในภาษาโปรแกรมทั่วไปโดยใช้ฟังก์ชันในตัวหรือไลบรารี ตัวอย่างที่น่าสนใจได้แก่:
- Ada: งาน (มีมาให้ในตัว)
- C++ (Intel): ส่วนประกอบพื้นฐานของการทำงานแบบมัลติเธรด
- C++ (Intel): Cilk Plus
- C++ (โอเพนซอร์ส/Apache 2.0): RaftLib
- C, C++, Objective-C, Swift (Apple): Grand Central Dispatch
- D: งานและเส้นใย
- เดลฟี (System.Threading.TParallel)
- Go: goroutines
- Java: การทำงานพร้อมกันในภาษา Java
- .NET: ไลบรารีงานแบบขนาน
ตัวอย่างของภาษาที่สามารถ ประมวล ผลงานแบบขนานได้อย่างละเอียด สามารถพบได้ในกลุ่มภาษาสำหรับการอธิบายฮาร์ดแวร์เช่นVerilogและVHDL
ดูเพิ่มเติม
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ ความขนานของงาน
การประมวลผลแบบขนานของงาน (หรือที่รู้จักกันในชื่อ การประมวลผลแบบขนานของฟังก์ชัน และ การประมวลผลแบบขนานของการควบคุม ) เป็นรูปแบบหนึ่งของ การประมวลผล แบบขนาน ของ รหัสคอมพิวเตอร์ บน...
คำอธิบาย
ในระบบมัลติโปรเซสเซอร์ การทำงานแบบขนานของงานจะเกิดขึ้นเมื่อโปรเซสเซอร์แต่ละตัวดำเนินการเธรด (หรือกระบวนการ) ที่แตกต่างกันบนข้อมูลเดียวกันหรือต่างกัน เธรดอาจดำเนินการโค้ดเดียวกันหรือต่างกัน ในกรณีทั่วไป เธรดการทำงานที่แตกต่างกันจะสื่อสารกันในขณะที่ทำงาน...
ตัวอย่าง
รหัส เทียม ด้านล่างนี้แสดงให้เห็นถึงการทำงานแบบขนานของงาน:
การสนับสนุนด้านภาษา
การประมวลผลแบบขนานของงานสามารถทำได้ในภาษาโปรแกรมทั่วไปโดยใช้ฟังก์ชันในตัวหรือไลบรารี ตัวอย่างที่น่าสนใจได้แก่: