มีอะไรที่ต้องทำกับซีพียูแบบมัลติคอร์หรือไม่?


45

เมื่อพิจารณาว่าโปรแกรมของเราเป็นมิตรกับหลายเธรดทีมของฉันงงงวยว่ามีอะไรที่ไม่สามารถทำได้บน CPU แบบคอร์เดียวอย่างแน่นอน ฉันโพสต์ว่าการประมวลผลกราฟิกต้องใช้การประมวลผลแบบขนานอย่างหนาแน่น แต่พวกเขาอ้างว่าสิ่งต่างๆเช่น DOOM ทำบน CPU แบบ single-core ที่ไม่มี GPU

มีอะไรที่ต้องทำในตัวประมวลผลแบบมัลติคอร์หรือไม่?

สมมติว่ามีเวลาไม่สิ้นสุดสำหรับการพัฒนาและการทำงาน


8
ในขณะที่คำตอบด้านล่างส่วนใหญ่ดูเหมือนจะ“ ไม่” แต่มีระบบในอดีตที่ไม่สามารถใช้งานได้จริงหากไม่มีตัวประมวลผลร่วมที่จัดการงานบางอย่าง ตัวอย่างที่แข็งแกร่งอย่างหนึ่งที่ฉันรู้คือ Nintendo DS ซึ่งรวมถึง CPU 67MHz ARM9 และ CPU 33MHz ARM7 (ใช้สำหรับการรองรับกลับเมื่อเล่นเกม GBA) สำหรับเกม DS นั้น ARM7 จัดการกับการเล่นเสียงและการสื่อสาร Wi-Fi เนื่องจาก ARM9 ไม่สามารถประมวลผลและวาดบันทึกย่อใด ๆ บนหน้าจอในขณะที่ติดตามการส่งสัญญาณเสียงไปยังชิปเสียงโดยตรง ดังนั้นในขณะที่ @jmite ระบุว่า "ภายใต้ข้อ จำกัด " การไม่มีความเร็วจึงสามารถใช้งานได้หลาย CPU
Slipp D. Thompson

10
ในงานของฉันเราใช้ Xeons แบบหลายคอร์และส่วนขยาย Xenomai ตามเวลาจริงเพื่อทำการประมวลผลเสียงที่มีความหน่วงแฝงต่ำ เรามีขั้นตอนการประมวลผลเสียงสามขั้นตอนและแต่ละขั้นตอนจะได้รับแกนหลักเฉพาะของตัวเองซึ่งใช้รอบ 70 ~ ของ ภารกิจที่ไม่ใช่เรียลไทม์จะใช้แกนที่สี่และรอบใดก็ตามที่เหลืออยู่ในสามตัวแรก สิ่งนี้จะเป็นไปได้ในซีพียูแบบคอร์เดียวหากคอร์นั้นมีความเร็วมากกว่าคอร์ในซีพียูแบบ 4 คอร์ในปัจจุบันมากกว่า 3 เท่า เนื่องจาก CPU ปัจจุบันทำงานที่ 2GHz ซึ่งอาจเป็นเรื่องยากที่จะบรรลุ
Jeremy Friesner

19
ซอฟต์แวร์บน CPU แบบคอร์เดียวสามารถเลียนแบบ CPU แบบมัลติคอร์ ความแตกต่างคือความเร็วเกือบทั้งหมด
user253751

24
สิ่งหนึ่งที่ต้องทำบนระบบมัลติคอร์คือการทดสอบซอฟต์แวร์แบบมัลติเธรด เพราะข้อบกพร่องบางอย่างจะ (เกือบ) ไม่เคยเกิดขึ้นในระบบแกนเดียว ฉันไม่แน่ใจว่ามีคุณสมบัติเป็นคำตอบ แต่ ...
nikie

13
@ นิกกี้ระบบหลักเดียวสามารถเลียนแบบการสั่งซื้อหน่วยความจำและแคชเก่าด้วย - แต่ฉันคิดว่านี่จะไม่มีประสิทธิภาพมาก (เช่น 10 ×ช้าลง)
Nayuki

คำตอบ:


47

หากคุณไม่สนใจเวลาทำงานอะไรที่คุณสามารถทำได้บนเครื่องมัลติคอร์คุณสามารถทำได้บนเครื่องแกนเดี่ยว เครื่องมัลติคอร์เป็นเพียงวิธีการเร่งการคำนวณบางประเภท

หากคุณสามารถแก้ปัญหาได้ทันเวลาในบนเครื่องมัลติคอร์ที่มี cores คุณสามารถแก้เวลา (หรือดูกฎของ Amdahlน้อยกว่า) บนเครื่องที่มีแกนเดียว เครื่องแกนเดียวสามารถเลียนแบบเครื่องมัลติคอร์โดยใช้การแบ่งเวลา / การแบ่งปันเวลาn T nTnTn


3
ฉันไม่แน่ใจว่าถูกต้องทั้งหมด ฉันไม่คิดว่าบั๊กความสอดคล้องของหน่วยความจำสามารถสร้างได้ในแกนเดียว (ใช่เราสามารถเลียนแบบระบบมัลติแคชบนยูนิคอร์ แต่การอ้อมนั้นเป็นการโกง) (บางทีอาจเทียบเท่ากับการใช้ reg. swap โดยการย้าย ops ใน VLIW, การใช้ประโยชน์จากการรับประกัน | | ism?) ฉันคิดว่าแม้บนแกนแบบเธรดเดียวมันก็ยังคงเป็นไปได้ที่จะดึงเอนโทรปี เอนโทรปีจะมีขนาดเล็กลงต่อหน่วยเวลา (ซึ่งเป็นเพียงเรื่องของประสิทธิภาพเช่นความแตกต่างอื่น ๆ )
Paul A. Clayton

6
@ PaulA.Clayton ข้อบกพร่องความสอดคล้องของหน่วยความจำมักจะเป็นซอฟต์แวร์ที่ไม่พึงประสงค์และเป็นลายลักษณ์อักษรที่ดีไม่ควรแสดงไว้ แต่ถ้าคุณจริงๆอยากจะคุณสามารถเลียนแบบพวกเขาบน CPU เดียว (แม้ว่ามันอาจจะช้า)
user253751

4
บางครั้งเวลาบนแกนเดี่ยวจะนานกว่าเท่าบนเครื่อง -core ตัวอย่างเช่นการค้นหาด้วยการรีสตาร์ทแบบสุ่มหรือถ้าชิ้นส่วนพอดีกับแคชในหลายแกน แต่ไม่ได้อยู่บนแกนเดี่ยว nnn
András Salamon

11
"เครื่องแกนเดี่ยวสามารถเลียนแบบเครื่องมัลติคอร์โดยใช้การแบ่งเวลา / การแบ่งปันเวลา" และแน่นอนได้ทำเช่นนั้นตั้งแต่รุ่งอรุณของระบบปฏิบัติการ "ทันสมัย"
การแข่งขัน Lightness กับ Monica

1
@ PaulA.Clayton ฉันคิดว่าคุณอาจได้รับปัญหาความมั่นคงของหน่วยความจำ (เช่นการเพิ่มขึ้นแบบไม่ปรมาณู) หากคุณต้องมีกระบวนการที่แตกต่างกันสองกระบวนการที่ทั้งสองแก้ไขหน่วยความจำที่ใช้ร่วมกันเดียวกัน คุณเพียงแค่ต้องมัลติทาสกิ้งล่วงหน้า โดยทั่วไปนี่คือสาเหตุที่ระบบปฏิบัติการสมัยใหม่ไม่มีกระบวนการแชร์หน่วยความจำที่สามารถเขียนได้เหมือนกันเว้นแต่ว่าพวกเขาจะขออย่างชัดเจน
Patrick M

58

คำถามคือ: ภายใต้ข้อ จำกัด อะไร?

มีปัญหาอย่างแน่นอนถ้าเราถามคำถาม "เราจะแก้ปัญหานี้กับฮาร์ดแวร์ X ในระยะเวลาที่กำหนด" คำตอบจะไม่

แต่นี่ไม่ใช่คำตอบ "หลักฐานอนาคต": สิ่งที่ในอดีตไม่สามารถทำได้เร็วพอในแกนเดียวอาจเป็นได้ในขณะนี้และเราไม่สามารถทำนายได้ว่าฮาร์ดแวร์ในอนาคตจะมีความสามารถอะไร

ในแง่ของความสามารถในการคำนวณเรารู้ว่าเครื่องทัวริงเทปเดี่ยวสามารถคำนวณฟังก์ชั่นทั้งหมดเช่นเดียวกับคอมพิวเตอร์เครื่องเดียวหรือมัลติคอร์ดังนั้นเวลาทำงานไม่มีปัญหาที่คอมพิวเตอร์มัลติคอร์สามารถแก้ปัญหาได้ แกนเดียวไม่สามารถ

ในแง่ของบางสิ่งบางอย่างเช่นกราฟิกทุกอย่างที่อยู่บน GPU นั้นสามารถทำได้บน CPU ... หากคุณเต็มใจที่จะรอนานพอ


3
@ JanDvorak ฉันจะบอกว่าจริง ๆ แล้วนี่ไม่ได้ทำโดย GPU เลย)
TomTom

15
หากเวลาไม่มีข้อ จำกัด คุณสามารถทำการคำนวณด้วยมือปากกาและกระดาษทั้งหมด
คณิตศาสตร์ที่

2
@ ผู้คิดว่าใช่เพราะสมองนั้นทัวริงครบถ้วน บางสิ่งที่เปลี่ยนเป็นการถกเถียงที่ยาวนานเกี่ยวกับ Physics Stackexchange
JBentley

4
จริงๆแล้ว @JanDvorak การสร้าง VGA นั้นค่อนข้างง่ายและสามารถทำได้ในซอฟต์แวร์บนคอนโทรลเลอร์ขนาดเล็กที่ 16 MHz เช่นโครงการนี้แสดง: pyroelectro.com/tutorials/arduino_basic_vga
axello

3
@ คณิตศาสตร์ที่จริงเป็นคำถามที่ซับซ้อนกว่ามันจะปรากฏขึ้นครั้งแรก คำตอบสั้น ๆ อาจเป็น "ใช่" เพราะเครื่องพิเศษสามารถสร้างคอมพิวเตอร์ได้โดยไม่ต้องใช้เครื่องมือที่สมบูรณ์ใด ๆ คำตอบที่ยาวกว่าอาจเป็น "ไม่" เพราะความสามารถในการสร้างเครื่องทัวริงอาจหมายความว่ามีเครื่องทัวริงขนาดใหญ่ที่อยู่ในสถานะ "การเริ่มต้น" ซึ่งสร้างส่วนที่เหลือของเครื่องรัฐ คำตอบเต็มรูปแบบมีความซับซ้อนมากขึ้นเพราะเราไม่เคยสร้างอุปกรณ์ทัวริงที่สมบูรณ์ เราได้พัฒนาแนวคิดที่เป็นนามธรรมสำหรับเครื่องจักรที่ ...
Cort Ammon

17

ตามที่คำตอบอื่น ๆ ได้ชี้ให้เห็นซีพียูตัวเดียวสามารถเลียนแบบหลาย ๆ ซีพียูได้โดยการแบ่งเวลาและเล่นบทบาทของซีพียูเสมือนแต่ละตัว การจำลองนี้จะคำนวณคำตอบที่ถูกต้องอย่างแน่นอน

ในโลกแห่งความเป็นจริงเวลาดำเนินการอาจมีความสำคัญ มันอาจหมายถึงความแตกต่างระหว่างอัตราเฟรมปานกลางและประสบการณ์ภาพที่เป็นตัวเอก หรือความแตกต่างระหว่างกำไรและขาดทุนในการซื้อขาย

สถานการณ์ทางพยาธิวิทยาที่หนึ่งซึ่งตัวประมวลผลหลายตัวนั้นเร็วกว่าตัวประมวลผลเดียวอย่างมากคือการประมวลผลเป็นไปป์ไลน์ข้อมูลการสลับบริบทมีราคาแพงและรหัสเครื่องสำหรับแต่ละขั้นตอนไปป์ไลน์นั้นแทบจะพอดีกับแคชของ CPU

ขอยกตัวอย่างตัวเลข สมมติว่าคุณมี data pip (การเรนเดอร์ 3D ฯลฯ ) ที่มี 4 ขั้นตอนการประมวลผลแต่ละขั้นตอนมีรหัสโปรแกรม 256 KiB และคุณมี CPU 4 ตัวที่มีแคช L2 256 KiB หากคุณพยายามเรียกใช้การประมวลผลนี้บน CPU ตัวเดียวการสลับระหว่างงานทั้ง 4 อย่างนั้นจะมีราคาแพงและอาจจะมีแคชขนาดใหญ่ ในทางกลับกันถ้าคุณเรียกใช้บนระบบ 4 คอร์การคำนวณอาจราบรื่นมากแคชที่หายไปนั้นน้อยที่สุดและคอนเท็กซ์สวิตช์นั้นไม่มีอยู่จริง (ตามหมายเหตุด้านนี้เกี่ยวข้องกับแนวคิดของการปักหมุดแอปพลิเคชันบางอย่างกับคอร์บางตัว - เช่นการดำเนินการเคอร์เนลระบบปฏิบัติการในแกนเดียวหรือการจัดการ TCP / IP เป็นต้น)


7

มันยากมากที่จะพัฒนาการแข่งขันข้อมูลที่เลวร้ายจริงๆด้วย CPU ตัวเดียว ฉันหมายความว่าคุณสามารถดึงออกมาระหว่างคำถ้าคุณขัดจังหวะซีพียูเดี่ยว แต่คุณสามารถสร้างสถานการณ์ที่แปลกใหม่โดยที่ไม่มีการสอดแทรกเธรดเดี่ยวที่คุณต้องการ?

โอเคการทำข้อบกพร่องที่ร้ายกาจอาจไม่ถือว่าเป็นการใช้ความก้าวหน้าหลายโค้ดที่ถูกต้อง ตามที่ปรากฎมีไม่มากที่ mutli-core สามารถทำเช่นนั้นแกนเดียวไม่สามารถให้เวลา เหตุผลง่าย ๆ หากคุณพยายามหลีกเลี่ยงการแข่งขันข้อมูลที่ชั่วร้ายคุณจะต้องมีจุดประสานในรหัสของคุณ หากคุณจำลองรหัสของคุณเป็นโครงร่างการคำนวณที่อินพุตต้องสมบูรณ์และซิงโครไนซ์ก่อนที่คุณจะสามารถคำนวณและสร้างผลลัพธ์ได้ง่ายที่จะเห็นว่า CPU ตัวเดียวสามารถทำงานตามแนวตาข่ายได้โดยคำนวณบล็อกที่มีอยู่ถัดไป .

ในความเป็นจริงหากคุณสามารถแสดงให้เห็นว่าอัลกอริทึมของคุณสามารถแก้ไขได้โดยเครื่องทัวริง (ซึ่งเป็นอัลกอริธึมที่เราใส่ใจ) มันสามารถพิสูจน์ได้ว่าอัลกอริทึมสามารถทำได้โดยไม่เพียง แต่ CPU แกนเดียวเท่านั้น เครื่องรัฐด้วยเทปที่ยาวมากสำหรับหน่วยความจำ!

หมากรุกตรวจจับการแข่งขันจริงยกระดับนี้เพื่อหากรณีการแข่งขัน มันรันทุกอย่างที่มีเธรดเดียวและสำรวจ interleaves ที่เป็นไปได้ทั้งหมดระหว่างเธรดพยายามหาเคสที่การทดสอบล้มเหลวเนื่องจากเคสเรซ CHESS ขึ้นอยู่กับความจริงที่ว่าคุณสามารถเรียกใช้แอพพลิเคชั่นแบบมัลติเธรดบนแกนเดียวได้

เคสที่คุณต้องการมัลติคอร์จะปรากฏขึ้นเมื่อคุณเริ่มขยายขีด จำกัด ของฮาร์ดแวร์ สิ่งที่ชัดเจนคือเมื่อคุณมีเวลา จำกัด ปัญหาบางอย่างเกี่ยวกับข้อ จำกัด ของเวลาแบบเรียลไทม์นั้นเป็นไปไม่ได้ที่จะทำแกนเดี่ยวเพราะพวกมันไม่สามารถขับเคลื่อนนาฬิกาของแกนเดียวได้เร็วพอ มีเหตุผลหลายประการที่ทำให้ซีพียูปีนขึ้นไปที่ 4Ghz แล้วตกลงลงเล็กน้อยเลือกแกนที่มากขึ้นด้วยความเร็วที่ต่ำกว่า

เวอร์ชันที่แปลกใหม่ของข้อ จำกัด เรื่องเวลานี้อยู่ในระบบเวลาจริง ในระบบเรียลไทม์ที่ยากลำบากบริการขัดจังหวะนั้นต้องการให้คุณต้องเลือกซีพียูแบบมัลติคอร์ที่ช่วยให้คุณแบ่งอินเทอร์รัปต์ข้ามคอร์หรือคุณมีข้อ จำกัด ด้านเวลา

ข้อ จำกัด อื่นเกิดขึ้นกับบัสข้อมูล พิจารณา Blue Gene / P เป็นตัวอย่าง JUGENE ซึ่งเป็นซุปเปอร์คอมพิวเตอร์ Blue Gene / P โดยเฉพาะมีหน่วยความจำ144 เทราไบต์ พวกเขาไม่ได้สร้างคอมพิวเตอร์ซีพียูเดี่ยวที่สามารถเข้าถึงหน่วยความจำทั้งหมดนั้นได้


1
Re พวกเขาไม่ได้สร้างคอมพิวเตอร์ CPU เครื่องเดียวที่สามารถเข้าถึงหน่วยความจำ "ไม่" ไม่เหมือนกับ "ไม่สามารถ" คุณสามารถออกแบบและสร้างตัวประมวลผลร่วมที่มีหน่วยความจำหลัก 144 เทราไบต์ขึ้นไป เหตุผลเดียวที่ผู้คนไม่ได้เป็นเพราะผลตอบแทนลดลง: มูลค่าที่เพิ่มขึ้นและการใช้งานจริงของการเพิ่มหน่วยความจำให้มากขึ้นในการออกแบบหน่วยประมวลผลเดี่ยวถึงจุดสูงสุดในบางจุดแล้วลดขนาดลงเมื่อขนาดหน่วยความจำเพิ่มขึ้น .
โซโลมอนช้า

@james large นั่นเป็นเหตุผลที่ประโยคนั้นมาในส่วนของคำตอบของฉันที่พูดถึงฮาร์ดแวร์ที่ใช้งานได้จริงในชีวิตและทำไมมันไม่ปรากฏในคำตอบ 2/3 แรกของคำตอบที่กล่าวถึงความสามารถเชิงทฤษฎี
Cort Ammon

"ไม่" กับ "ไม่สามารถ" ถูกแสดงโดยสองระบบในห้องใต้ดินของฉัน ถ้าฉันสามารถเพิ่มหน่วยความจำนั้นลงในการกำหนดค่าฮาร์ดแวร์ของพวกเขาได้จริงซีพียูของพวกเขา "สามารถ" เข้าถึงแต่ละไบต์ได้ แต่ฉันทำไม่ได้ดังนั้นพวกเขาจึง "ไม่สามารถ" ความสามารถของซีพียูนั้นเกินความจริง
user2338816

ฉันกำลังคิดบางอย่างเช่นคำตอบนี้ ดูเหมือนว่าสภาพการแข่งขันจะเป็นไปไม่ได้ (หรือเกิดขึ้น 100% ของเวลา) ในสภาพแวดล้อมแบบแกนเดียว สำหรับแอปพลิเคชันที่ใช้งานได้จริงฉันคิดว่าผู้พัฒนาซอฟต์แวร์สามารถสร้างรูปแบบการป้องกันการคัดลอกที่เป็นเอกลักษณ์โดยใช้การเข้ารหัสการทดสอบสภาพการแข่งขันแปลก ๆ ที่มักจะส่งผ่านฮาร์ดแวร์เป้าหมายเฉพาะเสมอ แต่จะล้มเหลวในฮาร์ดแวร์ . ในกรณีนี้การจำลองโดยระบบมัลติคอร์อาจจะผ่านบางครั้ง แต่ไม่สามารถทำได้
Dan Henderson

6

หากคุณต้องการสังเกตกระบวนการที่ทำงานในองค์ประกอบการประมวลผลเดียวโดยไม่รบกวนพฤติกรรมแบบเรียลไทม์ (หรือน้อยที่สุด) เช่นการเปรียบเทียบหรือการบันทึกกิจกรรมคุณอาจต้องใช้ทรัพยากรการประมวลผลแยกต่างหาก


ดีตัวอย่างย่อของสิ่งที่ต้องการการจำลองที่แม่นยำหากไม่ใช่โปรเซสเซอร์หลายตัว
Ben Leggiero

เฮ้เป็นนี้บัญชีของคุณหรือไม่ คุณต้องการรวมมันด้วยไหม
Evil

4

คำตอบอื่น ๆ เป็นไปตามมุมมองที่ จำกัด ของการขนานในขณะที่ "การกระจายพร้อมกัน" สิ่งนี้ให้คำตอบ: ในรูปแบบการคำนวณที่สะอาดà la Turing หลายแกนจะไม่ได้เปรียบ ข้อได้เปรียบเดียวที่คุณอาจได้รับคือประสิทธิภาพ

มีสิ่งหนึ่งที่หลายหน่วยประมวลผล (หนอง) สามารถทำเช่นนั้นหนึ่งเดียวไม่สามารถแม้ว่า: ดำเนินการการดำเนินงานในแบบคู่ขนานที่เป็นในเวลาเดียวกัน

สิ่งนี้มีประโยชน์มากหากคุณเรียกใช้หลาย ๆ โปรแกรมพร้อมกัน จริงอยู่ที่คุณต้องการการเรียกใช้งานที่เกิดขึ้นพร้อมกันน้อยมากและการใช้งานส่วนใหญ่ลดลงเพื่อเพิ่มประสิทธิภาพ แต่มีคือความแตกต่างนี้

สมมติว่าคุณต้องการประมวลผลข้อมูลเซ็นเซอร์ข้อมูลจากหลายแหล่งในเวลาจริง อะไรก็ตามที่มีความหมายอย่างแม่นยำในแอปพลิเคชั่นของคุณ PU หนึ่งตัวสามารถจัดการอินพุตสตรีมจำนวนมากได้พร้อมกันโดยไม่ละเมิดการ จำกัด เวลาตอบสนอง ดังนั้นคุณต้องมี PU หลายตัวเมื่อคุณมีเซ็นเซอร์มากเกินไปสำหรับรุ่น PU ปัจจุบันของคุณ

ในดินแดนที่คลาสสิกมากขึ้นหนึ่งอาจจะเป็นตัวอย่างที่น่าเชื่อมีขั้นตอนวิธีการผลงาน สมมติว่าคุณมีปัญหาที่คุณมีอัลกอริธึมหลายอย่าง (พูด ) ด้วยต้นทุนมุมฉาก กรณีที่ดีของหนึ่งเป็นกรณีที่ไม่ดีสำหรับคนอื่น ๆ คุณไม่สามารถบอกได้อย่างรวดเร็วว่าอันไหนดีที่สุดสำหรับอินพุตที่กำหนดk

คุณสามารถเรียกใช้อัลกอริธึมทั้งหมดในแบบขนานและยกเลิกเมื่อเสร็จสิ้นหนึ่งครั้ง หากคุณมีอย่างน้อย PU คุณจะได้รับเวลาทำงานขั้นต่ำในอัลกอริทึมทั้งหมดในพอร์ตโฟลิโอ ด้วย PU เพียงอันเดียวคุณจะได้นั่นโดยสมมติว่าเป็นตัวกำหนดตารางเวลาที่ยุติธรรมรวมทั้งค่าใช้จ่ายทั้งหมดk kkkk


0

จาก CS pov "multicore" นั้นไม่แตกต่างกันมากนักในทางทฤษฎีมากกว่า "การคำนวณแบบกระจาย" แนวคิดพื้นฐานคือ "องค์ประกอบการคำนวณอิสระ (ซึ่งคำนวณในแบบคู่ขนาน" ดังนั้นการใช้คำถามใหม่เล็กน้อย ("มัลติคอร์" ไม่ใช่แนวคิดเชิงทฤษฎีใน CS จริง ๆ ) นำไปสู่ความเป็นไปได้อื่น ๆ ตามที่ระบุไว้ในคำตอบอื่น ๆ เทียบเท่ากับการเขียนโปรแกรมแบบขนานจาก CS pov สิ่งนี้กลับไปที่คำจำกัดความของระบบเชิงทฤษฎีสำหรับการคำนวณคือเครื่องทัวริงการวิเคราะห์เชิงทฤษฎีของประสิทธิภาพการทำงานของ CS นั้นในท้ายที่สุดในแง่ของ TMs ซึ่งความแตกต่างของ แม้ว่าจะมีความคล้ายคลึงคร่าวๆกับMultitape TMs )

แต่การพิจารณาคำถามนี้น้อย abstractly, กระจายการคำนวณเป็นจริงที่เหนือกว่าหรืออาจจะเกือบแม้จำเป็นสำหรับปัญหาบางอย่างที่เกี่ยวข้องกับการยอมรับความผิด ในพื้นที่นี้มีแนวคิดที่ใช้เมื่อ / ที่องค์ประกอบการคำนวณอิสระถูกนำไปใช้ในระดับที่ไม่น่าเชื่อถือ (นี่ไม่ใช่ข้อสมมติฐานที่ใช้บังคับได้จริงสำหรับบริบททั้งหมด) นี่คือหลายกรณีที่การปรับปรุงความทนทานต่อความผิดปกติมีหรือต้องมีองค์ประกอบการประมวลผลอิสระ

  • พิจารณาว่าตัวประมวลผลแต่ละตัวมีโอกาส "[x]%" อิสระในการล้มเหลวระหว่างการคำนวณ ระบบสามารถคิดค้นได้โดยการสื่อสารการยอมรับข้อผิดพลาดโดยรวมของระบบดีกว่าส่วนประกอบแต่ละตัว สิ่งนี้ถูกนำไปใช้เมื่อหลายสิบปีก่อนเช่นในระบบกระสวยอวกาศ เมื่อเร็ว ๆ นี้มีโปรโตคอลพื้นฐานการออกแบบมาเพื่อใช้มันเช่นPaxosซึ่งแก้ปัญหาที่เรียกว่าปัญหาความเห็นเป็นเอกฉันท์ อีกตัวอย่างหนึ่งที่ไม่ได้มาจากโลกคือ Google ซึ่งมีอัลกอริธึมที่เป็นกรรมสิทธิ์จำนวนมากเพื่อสร้างซูเปอร์คอมพิวเตอร์จากองค์ประกอบที่ไม่น่าเชื่อถือเป็นรายบุคคลควบคู่ไปกับอัลกอริธึมที่ทนทานต่อความผิดพลาด

  • Bitcoin เกี่ยวข้องกับการทำธุรกรรมแบบกระจายเพื่อคำนวณบัญชีแยกประเภทซึ่งไม่ได้เกิดจากการประมวลผลปัญหาโหลดเท่านั้น อัลกอริทึมได้รับการออกแบบอย่างระมัดระวังเพื่อป้องกันโหนดที่เสียหาย ในระยะสั้น ๆ มัน "แก้ปัญหา" / ดำเนินการปัญหาไบเซนไทน์นายพลซึ่งไม่เพียง แต่เกี่ยวกับการเพิ่มประสิทธิภาพการทำงานแบบขนานมันเกี่ยวข้องกับหน่วยงานอิสระ "ตรวจสอบ" ซึ่งกันและกันและ "อัลกอริทึม / cryptographically / ปลอดภัย" ปฏิเสธการคำนวณที่ไม่ถูกต้อง คอรัปชั่น".

  • การวิเคราะห์แบบขนานของการสรุปแบบคลาสสิกสรุปว่ามีรูปแบบปัญหา 7 แบบ "พื้นฐาน" ที่ย่อยสลายเป็นการแยกย่อยการประมวลผลแบบขนานโดยเฉพาะ ดูภูมิทัศน์ของการวิจัยการคำนวณแบบขนาน: มุมมองจาก Berkeley

  • มีองค์ประกอบบางส่วนของคำถามเชิงทฤษฎีแบบเปิดที่นี่ข้อควรพิจารณาเกี่ยวกับประสิทธิภาพของคำตอบอื่น ๆ คำถามที่ว่ามีปัญหาใด ๆ ที่ "เร็วกว่าโดยเนื้อแท้" ในแบบขนานกว่าลำดับเป็นที่รู้กันอย่างคร่าว ๆ ว่า P =? NC ปัญหาที่NCถูกพิจารณาว่าเป็นคลาสของอัลกอริธึม "อย่างขนานได้อย่างมีประสิทธิภาพ" และPคือ "อัลกอริธึม "


1
ฉันรักคำตอบนี้! ฉันได้เรียนรู้อะไรมากมายจากตัวอย่างของคุณ: D
Ben Leggiero

+1 สำหรับการยอมรับข้อบกพร่องในสภาพแวดล้อมที่มีความสำคัญต่อภารกิจพร้อมด้วยรังสี -1 สำหรับการขาดแคปและความซ้ำซ้อน
Cees Timmerman
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.