การคำนวณแบบขนาน

จากวิกิพีเดีย สารานุกรมเสรี
ข้ามไปที่การนำทาง ข้ามไปที่การค้นหา

การคำนวณแบบขนานเป็นประเภทของการคำนวณที่มีการคำนวณหรือกระบวนการหลายอย่างพร้อมกัน[1]ปัญหาใหญ่มักจะแบ่งออกเป็นปัญหาเล็ก ๆ ซึ่งสามารถแก้ไขได้ในเวลาเดียวกัน : มีหลายรูปแบบที่แตกต่างกันของการประมวลผลแบบขนานเป็นบิตระดับ , การเรียนการสอนระดับ , ข้อมูลและงานที่เท่าเทียมขนานได้รับการว่าจ้างในการประมวลผลที่มีประสิทธิภาพสูงแต่ได้รับความสนใจในวงกว้างเนื่องจากข้อ จำกัด ทางกายภาพการป้องกันการปรับความถี่ [2]ขณะที่การใช้พลังงาน (และทำให้เกิดความร้อน) โดยคอมพิวเตอร์ได้กลายเป็นความกังวลในปีที่ผ่านมา[3]การคำนวณแบบขนานได้กลายเป็นกระบวนทัศน์ที่โดดเด่นในสถาปัตยกรรมคอมพิวเตอร์ส่วนใหญ่อยู่ในรูปแบบของการประมวลผลแบบ multi-core [4]

การคำนวณแบบขนานมีความเกี่ยวข้องอย่างใกล้ชิดกับการคำนวณแบบพร้อมกัน — มักใช้ร่วมกันและมักจะซ้อนกัน แม้ว่าทั้งสองจะมีความแตกต่างกัน: มีความเป็นไปได้ที่จะมีการทำงานขนานกันโดยไม่มีการทำงานพร้อมกัน (เช่นการขนานระดับบิต ) และการทำงานพร้อมกันโดยไม่มีการขนานกัน (เช่น การทำงานหลายอย่างพร้อมกัน) โดยแบ่งเวลาบน CPU แบบ single-core) [5] [6]ในการคำนวณแบบคู่ขนาน งานคำนวณโดยทั่วไปจะแบ่งออกเป็นงานย่อยที่คล้ายกันมาก ซึ่งมักจะมีหลายงาน ซึ่งสามารถประมวลผลได้อย่างอิสระและรวมผลลัพธ์หลังจากนั้น เมื่อเสร็จสิ้น ในทางตรงกันข้าม ในการคำนวณพร้อมกัน กระบวนการต่างๆ มักไม่เกี่ยวข้องกับงานที่เกี่ยวข้อง เมื่อทำตามปกติในการคำนวณแบบกระจายงานที่แยกจากกันอาจมีลักษณะแตกต่างกัน และมักต้องมีการสื่อสารระหว่างกระบวนการระหว่างการดำเนินการ

คอมพิวเตอร์แบบขนานสามารถจำแนกได้คร่าวๆ ตามระดับที่ฮาร์ดแวร์รองรับการทำงานแบบขนาน โดยคอมพิวเตอร์แบบมัลติคอร์และมัลติโพรเซสเซอร์ที่มีองค์ประกอบการประมวลผลหลายส่วนภายในเครื่องเดียว ในขณะที่คลัสเตอร์ , MPPและกริดใช้คอมพิวเตอร์หลายเครื่องเพื่อทำงานเหมือนกัน งาน. สถาปัตยกรรมคอมพิวเตอร์คู่ขนานแบบพิเศษบางครั้งใช้ควบคู่ไปกับโปรเซสเซอร์แบบเดิมเพื่อเร่งงานเฉพาะ

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

ทฤษฎีบนผูกพันในความเร็วสูงขึ้นของโปรแกรมเดียวเป็นผลมาจากแบบขนานจะได้รับจากกฎหมายของดาห์ล

ความเป็นมา

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

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

การปรับความถี่เป็นเหตุผลหลักสำหรับการปรับปรุงประสิทธิภาพของคอมพิวเตอร์ตั้งแต่กลางทศวรรษ 1980 จนถึงปี 2004 รันไทม์ของโปรแกรมเท่ากับจำนวนคำสั่งคูณด้วยเวลาเฉลี่ยต่อคำสั่ง การรักษาค่าอื่นๆ ให้คงที่ การเพิ่มความถี่สัญญาณนาฬิกาจะลดเวลาเฉลี่ยที่ใช้ในการดำเนินการตามคำสั่ง ความถี่ที่เพิ่มขึ้นจึงลดรันไทม์สำหรับโปรแกรมที่ผูกกับคอมพิวเตอร์ทั้งหมด[10]อย่างไรก็ตาม การใช้พลังงานPโดยชิปถูกกำหนดโดยสมการP = C × V 2 × Fโดยที่Cคือความจุถูกเปลี่ยนตามรอบสัญญาณนาฬิกา (ตามสัดส่วนกับจำนวนทรานซิสเตอร์ที่อินพุตเปลี่ยน) Vคือแรงดันไฟฟ้าและFคือความถี่ของโปรเซสเซอร์ (รอบต่อวินาที) [11]ความถี่ที่เพิ่มขึ้นจะเพิ่มปริมาณพลังงานที่ใช้ในโปรเซสเซอร์ การใช้พลังงานโปรเซสเซอร์ที่เพิ่มขึ้นส่งผลให้Intelยกเลิกโปรเซสเซอร์Tejas และ Jayhawkเมื่อวันที่ 8 พฤษภาคม 2547 ซึ่งโดยทั่วไปแล้วจะอ้างถึงจุดสิ้นสุดของการปรับขนาดความถี่เป็นกระบวนทัศน์สถาปัตยกรรมคอมพิวเตอร์ที่โดดเด่น(12)

เพื่อจัดการกับปัญหาการใช้พลังงานและความร้อนสูงเกินไป ผู้ผลิตหน่วยประมวลผลกลางรายใหญ่(CPU หรือโปรเซสเซอร์) ได้เริ่มผลิตโปรเซสเซอร์ที่มีประสิทธิภาพด้านพลังงานที่มีหลายคอร์ แกนหลักคือหน่วยคำนวณของโปรเซสเซอร์ และในโปรเซสเซอร์แบบมัลติคอร์ แต่ละคอร์จะเป็นอิสระและสามารถเข้าถึงหน่วยความจำเดียวกันได้พร้อมกันโปรเซสเซอร์แบบมัลติคอได้นำคอมพิวเตอร์ขนานกับคอมพิวเตอร์เดสก์ทอปดังนั้นการขนานของโปรแกรมอนุกรมจึงกลายเป็นงานเขียนโปรแกรมหลัก ในปี 2012 โปรเซสเซอร์ Quad-core กลายเป็นมาตรฐานสำหรับคอมพิวเตอร์เดสก์ท็อปในขณะที่เซิร์ฟเวอร์มีโปรเซสเซอร์ 10 และ 12 คอร์ จากกฎของมัวร์สามารถคาดการณ์ได้ว่าจำนวนคอร์ต่อโปรเซสเซอร์จะเพิ่มขึ้นเป็นสองเท่าทุก 18–24 เดือน ซึ่งอาจหมายความว่าหลังจากปี 2020 โปรเซสเซอร์ทั่วไปจะมีคอร์หลายสิบหรือหลายร้อยคอร์ [13]

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

กฎของแอมดาห์ลและกฎของกุสตาฟสัน

การแสดงกราฟิกของกฎหมายของดาห์ลการเร่งความเร็วของโปรแกรมจากการทำให้ขนานกันนั้นถูกจำกัดด้วยจำนวนโปรแกรมที่สามารถทำการขนานได้ ตัวอย่างเช่น หาก 90% ของโปรแกรมสามารถขนานกันได้ ความเร็วสูงสุดตามทฤษฎีโดยใช้การคำนวณแบบขนานจะเป็น 10 เท่าไม่ว่าจะใช้โปรเซสเซอร์กี่ตัวก็ตาม
สมมติว่างานมีสองส่วนที่เป็นอิสระและBส่วนBใช้เวลาประมาณ 25% ของเวลาของการคำนวณทั้งหมด ด้วยการทำงานหนักมาก เราอาจจะทำให้ส่วนนี้เร็วขึ้น 5 เท่า แต่สิ่งนี้จะช่วยลดเวลาในการคำนวณทั้งหมดได้เพียงเล็กน้อยเท่านั้น ในทางตรงกันข้าม เราอาจต้องทำงานน้อยลงเพื่อให้ส่วนAเร็วขึ้นสองเท่า สิ่งนี้จะทำให้การคำนวณเร็วกว่าการเพิ่มประสิทธิภาพ part Bแม้ว่าความเร็วของpart Bจะมากกว่าตามอัตราส่วน (5 เท่าเทียบกับ 2 เท่า)

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

การเพิ่มความเร็วที่เป็นไปได้ของอัลกอริธึมบนแพลตฟอร์มการคำนวณแบบขนานนั้นกำหนดโดยกฎของ Amdahl [15]

ที่ไหน

  • S แฝงเป็นศักยภาพเพิ่มความเร็วในความล่าช้าของการดำเนินการของงานทั้ง;
  • sคือการเพิ่มความเร็วในเวลาแฝงของการดำเนินการในส่วนที่ขนานกันได้ของงาน
  • Pคือเปอร์เซ็นต์ของเวลาการดำเนินการของงานทั้งหมดที่เกี่ยวข้องกับการมีส่วนร่วม parallelizable ของงานก่อนที่จะทำคู่ขนาน

เนื่องจากS latency < 1/(1 - p )แสดงว่าส่วนเล็ก ๆ ของโปรแกรมที่ไม่สามารถขนานกันได้จะจำกัดความเร็วโดยรวมที่มีอยู่จากการทำให้ขนานกัน โปรแกรมที่แก้ปัญหาทางคณิตศาสตร์หรือทางวิศวกรรมขนาดใหญ่โดยทั่วไปจะประกอบด้วยชิ้นส่วนที่ขนานกันได้หลายส่วนและส่วนที่ไม่ขนานกัน (อนุกรม) หลายส่วน หากส่วนที่ไม่เท่ากันของโปรแกรมคิดเป็น 10% ของรันไทม์ ( p= 0.9) เราสามารถเร่งความเร็วได้ไม่เกิน 10 เท่า ไม่ว่าจะเพิ่มโปรเซสเซอร์กี่ตัวก็ตาม สิ่งนี้ทำให้ขีดจำกัดสูงสุดของประโยชน์ของการเพิ่มหน่วยดำเนินการแบบขนานมากขึ้น "เมื่อไม่สามารถแบ่งงานได้เนื่องจากข้อจำกัดตามลำดับ การใช้ความพยายามมากขึ้นจะไม่ส่งผลต่อกำหนดการ การคลอดบุตรใช้เวลาเก้าเดือน ไม่ว่าผู้หญิงจะได้รับมอบหมายกี่คนก็ตาม" [16]

การแสดงภาพกฎของกุสตาฟสัน

กฎหมายของ Amdahl ใช้เฉพาะกับกรณีที่ขนาดปัญหาได้รับการแก้ไขแล้วเท่านั้น ในทางปฏิบัติ เมื่อมีทรัพยากรการคำนวณมากขึ้น พวกมันก็มักจะใช้กับปัญหาที่ใหญ่กว่า (ชุดข้อมูลที่ใหญ่กว่า) และเวลาที่ใช้ในส่วนที่ขนานกันได้มักจะเพิ่มขึ้นเร็วกว่างานต่อเนื่องโดยเนื้อแท้ [17]ในกรณีนี้กฎของกุสตาฟสันให้การประเมินประสิทธิภาพคู่ขนานในแง่ร้ายน้อยกว่าและมีเหตุผลมากกว่า: [18]

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

การอ้างอิง

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

ให้P iและP jเป็นสองส่วนของโปรแกรม เงื่อนไขของ Bernstein [19]อธิบายเมื่อทั้งสองเป็นอิสระและสามารถดำเนินการควบคู่กันได้ สำหรับP ฉันให้ฉันฉันจะทั้งหมดของตัวแปรและO ฉันตัวแปรที่ส่งออกและเช่นเดียวกันสำหรับพีเจ P iและP jเป็นอิสระหากพวกเขาพอใจ

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

พิจารณาฟังก์ชันต่อไปนี้ ซึ่งแสดงให้เห็นถึงการพึ่งพาหลายประเภท:

1: ฟังก์ชั่น Dep (a, b)
2: c := a * b
3: d := 3 * c
4: สิ้นสุดฟังก์ชัน

ในตัวอย่างนี้ คำสั่ง 3 ไม่สามารถดำเนินการได้ก่อน (หรือกระทั่งควบคู่ไปกับ) คำสั่งที่ 2 เนื่องจากคำสั่งที่ 3 ใช้ผลลัพธ์จากคำสั่งที่ 2 ซึ่งละเมิดเงื่อนไข 1 และทำให้เกิดการพึ่งพาโฟลว์

1: ฟังก์ชั่น NoDep (a, b)
2: c := a * b
3: d := 3 * b
4: e := a + b
5: ฟังก์ชั่นสิ้นสุด

ในตัวอย่างนี้ ไม่มีการขึ้นต่อกันระหว่างคำสั่ง ดังนั้นจึงสามารถรันพร้อมกันทั้งหมดได้

เงื่อนไขของ Bernstein ไม่อนุญาตให้ใช้หน่วยความจำร่วมกันระหว่างกระบวนการต่างๆ สำหรับการที่บางคนใช้วิธีการบังคับใช้สั่งระหว่างการเข้าถึงเป็นสิ่งที่จำเป็นเช่นsemaphores , อุปสรรคหรืออื่น ๆวิธีการทำข้อมูลให้ตรงกัน

สภาพการแข่งขัน การยกเว้นร่วมกัน การซิงโครไนซ์ และการชะลอตัวแบบคู่ขนาน

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

เธรด A กระทู้B
1A: อ่านตัวแปร V 1B: อ่านตัวแปร V
2A: เพิ่ม 1 ให้กับตัวแปร V 2B: เพิ่ม 1 ให้กับตัวแปร V
3A: เขียนกลับไปที่ตัวแปร V 3B: เขียนกลับไปที่ตัวแปร V

หากดำเนินการคำสั่ง 1B ระหว่าง 1A และ 3A หรือหากดำเนินการคำสั่ง 1A ระหว่าง 1B และ 3B โปรแกรมจะสร้างข้อมูลที่ไม่ถูกต้อง นี้เป็นที่รู้จักในฐานะที่เป็นสภาพการแข่งขัน โปรแกรมเมอร์จะต้องใช้ล็อคเพื่อให้การยกเว้นร่วมกัน ล็อคคือโครงสร้างภาษาโปรแกรมที่อนุญาตให้เธรดหนึ่งควบคุมตัวแปรและป้องกันไม่ให้เธรดอื่นอ่านหรือเขียน จนกว่าตัวแปรนั้นจะถูกปลดล็อค เธรดที่ยึดตัวล็อคนั้นสามารถเรียกใช้ส่วนที่สำคัญได้ฟรี (ส่วนของโปรแกรมที่ต้องมีการเข้าถึงตัวแปรบางตัวโดยเฉพาะ) และเพื่อปลดล็อกข้อมูลเมื่อเสร็จสิ้น ดังนั้น เพื่อรับประกันการทำงานของโปรแกรมที่ถูกต้อง โปรแกรมข้างต้นสามารถเขียนใหม่เพื่อใช้การล็อกได้:

เธรด A กระทู้B
1A: ล็อคตัวแปร V 1B: ล็อคตัวแปร V
2A: อ่านตัวแปร V 2B: อ่านตัวแปร V
3A: เพิ่ม 1 ให้กับตัวแปร V 3B: เพิ่ม 1 ให้กับตัวแปร V
4A: เขียนกลับไปที่ตัวแปร V 4B: เขียนกลับไปที่ตัวแปร V
5A: ปลดล็อกตัวแปร V 5B: ปลดล็อกตัวแปร V

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

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

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

การทำ Parallelization ไม่ได้ทั้งหมดส่งผลให้เร็วขึ้น โดยทั่วไป เมื่องานถูกแบ่งออกเป็นเธรดมากขึ้นเรื่อยๆ เธรดเหล่านั้นจะใช้เวลาส่วนที่เพิ่มมากขึ้นในการสื่อสารระหว่างกันหรือรอกันและกันเพื่อเข้าถึงทรัพยากร [26] [27]เมื่อโอเวอร์เฮดจากการแย่งชิงทรัพยากรหรือการสื่อสารครอบงำเวลาที่ใช้ในการคำนวณอื่น ๆ การทำให้ขนานกัน (นั่นคือ การแยกเวิร์กโหลดไปยังเธรดที่มากขึ้น) จะเพิ่มขึ้นแทนที่จะลดระยะเวลาที่ต้องใช้ในการทำให้เสร็จ ปัญหานี้เป็นที่รู้จักชะลอตัวขนาน , [28]สามารถปรับปรุงในบางกรณีโดยการวิเคราะห์และการออกแบบซอฟแวร์ [29]

เนื้อละเอียด เนื้อหยาบ และความเท่าเทียมที่น่าอาย

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

อนุกรมวิธานของฟลินน์

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

การจัดประเภท single-instruction-single-data (SISD) เทียบเท่ากับโปรแกรมแบบต่อเนื่องทั้งหมด การจำแนกประเภทคำสั่งเดียว-หลายข้อมูล (SIMD) นั้นคล้ายคลึงกับการดำเนินการเดียวกันซ้ำๆ ในชุดข้อมูลขนาดใหญ่ โดยทั่วไปจะทำในแอปพลิเคชันประมวลผลสัญญาณ Multiple-instruction-single-data (MISD) เป็นการจำแนกประเภทที่ไม่ค่อยได้ใช้ ในขณะที่สถาปัตยกรรมคอมพิวเตอร์เพื่อจัดการกับสิ่งนี้ถูกคิดค้นขึ้น (เช่นsystolic arrays ) แอปพลิเคชั่นบางตัวที่เหมาะกับคลาสนี้เกิดขึ้นจริง โปรแกรมหลายคำสั่ง-หลายข้อมูล (MIMD) เป็นโปรแกรมคู่ขนานทั่วไป

ตามที่David A. PattersonและJohn L. Hennessyกล่าว "แน่นอนว่าเครื่องจักรบางเครื่องเป็นลูกผสมของหมวดหมู่เหล่านี้ แต่รุ่นคลาสสิกนี้รอดมาได้เพราะเรียบง่าย เข้าใจง่าย และให้การประมาณเบื้องต้นที่ดี นอกจากนี้ยัง— อาจเป็นเพราะความเข้าใจได้ ซึ่งเป็นรูปแบบที่ใช้กันอย่างแพร่หลายที่สุด" [31]

ประเภทของความขนาน

ความขนานระดับบิต

Taiwania 3 ของไต้หวันอุปกรณ์ซูเปอร์คอมพิวเตอร์แบบขนานที่เข้าร่วมการวิจัยCOVID-19

ตั้งแต่การถือกำเนิดของเทคโนโลยีการผลิตชิปคอมพิวเตอร์แบบบูรณาการขนาดใหญ่มาก (VLSI) ในปี 1970 จนถึงประมาณปี 1986 การเพิ่มความเร็วในสถาปัตยกรรมคอมพิวเตอร์ได้รับแรงหนุนจากการเพิ่มขนาดคำในคอมพิวเตอร์เป็นสองเท่าซึ่งเป็นปริมาณข้อมูลที่โปรเซสเซอร์สามารถจัดการได้ต่อรอบ[32]การเพิ่มขนาดคำจะลดจำนวนคำสั่งที่โปรเซสเซอร์ต้องดำเนินการเพื่อดำเนินการกับตัวแปรที่มีขนาดมากกว่าความยาวของคำ ตัวอย่างเช่น เมื่อตัวประมวลผล8 บิตต้องเพิ่มจำนวนเต็ม16 บิต สองตัว ตัวประมวลผลต้องเพิ่มบิตลำดับที่ต่ำกว่า 8 บิตจากจำนวนเต็มแต่ละตัวโดยใช้คำสั่งการบวกมาตรฐาน จากนั้นจึงเพิ่มบิตลำดับที่สูงกว่า 8 ตัวโดยใช้ add-with - พกคำแนะนำและพกบิตจากการเพิ่มลำดับที่ต่ำกว่า ดังนั้น โปรเซสเซอร์ 8 บิตจึงต้องการสองคำสั่งในการดำเนินการเดียวให้เสร็จสิ้น โดยที่โปรเซสเซอร์ 16 บิตจะสามารถดำเนินการให้เสร็จสิ้นได้ด้วยคำสั่งเดียว

ในอดีตไมโครโปรเซสเซอร์4 บิตถูกแทนที่ด้วยไมโครโปรเซสเซอร์ 8 บิต จากนั้น 16 บิต และไมโครโปรเซสเซอร์ 32 บิต แนวโน้มนี้มักจะจบลงด้วยการเปิดตัวโปรเซสเซอร์ 32 บิต ซึ่งเป็นมาตรฐานในการคำนวณเอนกประสงค์มาเป็นเวลาสองทศวรรษแล้ว จนกระทั่งช่วงต้นทศวรรษ 2000 ด้วยการถือกำเนิดของสถาปัตยกรรมx86-64 โปรเซสเซอร์64 บิตจึงกลายเป็นเรื่องธรรมดา

ความขนานระดับคำสั่ง

หน่วยประมวลผลเป็นที่ยอมรับโดยไม่ต้องท่อใช้เวลาห้ารอบสัญญาณนาฬิกาเพื่อดำเนินการหนึ่งคำสั่งให้สมบูรณ์ ดังนั้นโปรเซสเซอร์จึงสามารถแสดงประสิทธิภาพระดับย่อย ( IPC = 0.2 < 1 )

โดยพื้นฐานแล้ว โปรแกรมคอมพิวเตอร์คือสตรีมของคำสั่งที่ดำเนินการโดยโปรเซสเซอร์ หากไม่มีความขนานระดับคำสั่ง โปรเซสเซอร์สามารถออกคำสั่งได้น้อยกว่าหนึ่งคำสั่งต่อรอบสัญญาณนาฬิกา ( IPC < 1 ) โปรเซสเซอร์เหล่านี้เรียกว่าโปรเซสเซอร์ย่อยสเกลาร์ คำสั่งเหล่านี้สามารถจัดลำดับใหม่และรวมเป็นกลุ่มซึ่งจะดำเนินการแบบคู่ขนานกันโดยไม่เปลี่ยนแปลงผลลัพธ์ของโปรแกรม สิ่งนี้เรียกว่าความขนานระดับคำสั่ง ความก้าวหน้าในการขนานระดับคำสั่งครอบงำสถาปัตยกรรมคอมพิวเตอร์ตั้งแต่กลางทศวรรษ 1980 จนถึงกลางปี ​​1990 [33]

โปรเซสเซอร์ไปป์ไลน์ห้าขั้นตอนที่เป็นที่ยอมรับในกรณีที่ดีที่สุด จะใช้เวลาหนึ่งรอบสัญญาณนาฬิกาเพื่อดำเนินการหนึ่งคำสั่งให้สมบูรณ์ ดังนั้นตัวประมวลผลสามารถออกประสิทธิภาพสเกลาร์ ( IPC = 1 )

โปรเซสเซอร์ที่ทันสมัยมีหลายขั้นตอนท่อการเรียนการสอน แต่ละขั้นตอนในไปป์ไลน์สอดคล้องกับการกระทำที่แตกต่างกันที่ตัวประมวลผลดำเนินการกับคำสั่งนั้นในสเตจนั้น โปรเซสเซอร์ที่มีไปป์ไลน์N- stage สามารถมีคำสั่งที่แตกต่างกันได้ถึงNคำสั่งในขั้นตอนต่างๆ ของการเสร็จสิ้น ดังนั้นจึงสามารถออกคำสั่งหนึ่งคำสั่งต่อรอบสัญญาณนาฬิกา ( IPC = 1 ) โปรเซสเซอร์เหล่านี้เรียกว่าโปรเซสเซอร์สเกลาร์ ตัวอย่างมาตรฐานของตัวประมวลผลแบบไพพ์ไลน์คือตัวประมวลผลRISCซึ่งมีห้าขั้นตอน: การดึงคำสั่ง (IF) การถอดรหัสคำสั่ง (ID) การดำเนินการ (EX) การเข้าถึงหน่วยความจำ (MEM) และการเขียนรีจิสเตอร์ (WB) Pentium 4โปรเซสเซอร์มีท่อ 35 ขั้นตอน[34]

โปรเซสเซอร์ไปป์ไลน์ห้าขั้นตอนตามรูปแบบบัญญัติที่มีหน่วยดำเนินการสองหน่วย ในกรณีที่ดีที่สุด จะใช้เวลาหนึ่งรอบสัญญาณนาฬิกาเพื่อดำเนินการสองคำสั่งให้สมบูรณ์ ดังนั้นโปรเซสเซอร์จึงสามารถให้ประสิทธิภาพที่เหนือกว่า ( IPC = 2 > 1 )

โปรเซสเซอร์ที่ทันสมัยส่วนใหญ่ยังมีหลายหน่วยปฏิบัติพวกเขามักจะรวมคุณลักษณะนี้กับการวางท่อ และสามารถออกคำสั่งได้มากกว่าหนึ่งคำสั่งต่อรอบสัญญาณนาฬิกา ( IPC > 1 ) โปรเซสเซอร์เหล่านี้เรียกว่าโปรเซสเซอร์superscalarโปรเซสเซอร์ Superscalar แตกต่างจากโปรเซสเซอร์แบบมัลติคอร์ตรงที่หน่วยประมวลผลหลายตัวไม่ใช่โปรเซสเซอร์ทั้งหมด (เช่น หน่วยประมวลผล) คำแนะนำสามารถจัดกลุ่มเข้าด้วยกันได้ก็ต่อเมื่อไม่มีการพึ่งพาข้อมูลระหว่างกันScoreboardingและอัลกอริธึม Tomasulo (ซึ่งคล้ายกับ Scoreboarding แต่ใช้การเปลี่ยนชื่อ register) เป็นสองเทคนิคที่พบบ่อยที่สุดสำหรับการดำเนินการนอกคำสั่งและการทำงานขนานระดับคำสั่ง

งานคู่ขนาน

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

ความเท่าเทียมกันระดับ Superword

ความขนานระดับ Superword เป็นเทคนิคเวคเตอร์ตามการคลายลูปและการสร้างเวคเตอร์บล็อกพื้นฐาน มันแตกต่างจากอัลกอริธึม loop vectorization ตรงที่มันสามารถใช้ประโยชน์จากการขนานกันของโค้ดอินไลน์เช่น การจัดการพิกัด ช่องสี หรือในลูปที่คลี่ออกด้วยมือ [37]

ฮาร์ดแวร์

หน่วยความจำและการสื่อสาร

หน่วยความจำหลักในคอมพิวเตอร์แบบขนานคือหน่วยความจำแบบแบ่งใช้ (แบ่งใช้ระหว่างองค์ประกอบการประมวลผลทั้งหมดในพื้นที่ที่อยู่เดียว) หรือหน่วยความจำแบบกระจาย (ซึ่งองค์ประกอบการประมวลผลแต่ละรายการมีพื้นที่ที่อยู่ในเครื่องของตัวเอง) [38]หน่วยความจำแบบกระจายหมายถึงความจริงที่ว่าหน่วยความจำถูกแจกจ่ายตามตรรกะ แต่มักจะบอกเป็นนัยว่ามีการกระจายทางกายภาพเช่นกันหน่วยความจำที่ใช้ร่วมกันแบบกระจายและการจำลองเสมือนของหน่วยความจำรวมทั้งสองวิธีเข้าด้วยกัน โดยที่องค์ประกอบการประมวลผลมีหน่วยความจำภายในของตัวเองและการเข้าถึงหน่วยความจำบนตัวประมวลผลที่ไม่ใช่แบบโลคัล การเข้าถึงหน่วยความจำภายในมักจะเร็วกว่าการเข้าถึงหน่วยความจำที่ไม่ใช่ภายในเครื่อง บนซูเปอร์คอมพิวเตอร์กระจายพื้นที่หน่วยความจำที่ใช้ร่วมกันสามารถดำเนินการใช้รูปแบบการเขียนโปรแกรมเช่นPGAS โมเดลนี้อนุญาตให้ประมวลผลบนโหนดคอมพิวท์หนึ่งเพื่อเข้าถึงหน่วยความจำระยะไกลของโหนดคอมพิวท์อื่นอย่างโปร่งใส โหนดคอมพิวท์ทั้งหมดยังเชื่อมต่อกับระบบหน่วยความจำที่ใช้ร่วมกันภายนอกผ่านการเชื่อมต่อความเร็วสูง เช่นInfinibandระบบหน่วยความจำที่ใช้ร่วมกันภายนอกนี้เรียกว่าburst bufferซึ่งโดยทั่วไปแล้วจะสร้างขึ้นจากอาร์เรย์ของหน่วยความจำแบบไม่ลบเลือนที่กระจายทางกายภาพผ่าน I/ หลายตัว O โหนด

มุมมองเชิงตรรกะของสถาปัตยกรรมการเข้าถึงหน่วยความจำที่ไม่สม่ำเสมอ (NUMA) โปรเซสเซอร์ในไดเร็กทอรีหนึ่งสามารถเข้าถึงหน่วยความจำของไดเร็กทอรีนั้นโดยมีเวลาแฝงน้อยกว่าที่สามารถเข้าถึงหน่วยความจำในหน่วยความจำของไดเร็กทอรีอื่นได้

สถาปัตยกรรมคอมพิวเตอร์ที่แต่ละองค์ประกอบของหน่วยความจำหลักสามารถเข้าถึงได้โดยมีเวลาแฝงและแบนด์วิธเท่ากันเรียกว่าระบบการเข้าถึงหน่วยความจำแบบสม่ำเสมอ (UMA) โดยทั่วไปแล้ว สามารถทำได้โดยระบบหน่วยความจำแบบแบ่งใช้เท่านั้น ซึ่งหน่วยความจำไม่ได้ถูกแจกจ่ายแบบฟิสิคัล ระบบที่ไม่มีคุณสมบัตินี้เรียกว่าสถาปัตยกรรมการเข้าถึงหน่วยความจำที่ไม่สม่ำเสมอ (NUMA) ระบบหน่วยความจำแบบกระจายมีการเข้าถึงหน่วยความจำที่ไม่สม่ำเสมอ

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

การสื่อสารระหว่างโปรเซสเซอร์โปรเซสเซอร์และโปรเซสเซอร์และหน่วยความจำสามารถนำไปใช้กับฮาร์ดแวร์ได้หลายวิธี รวมถึงผ่านหน่วยความจำที่ใช้ร่วมกัน (ทั้งแบบหลายพอร์ตหรือมัลติเพล็กซ์ ) สวิตช์แบบคานขวางบัสที่ใช้ร่วมกันหรือเครือข่ายที่เชื่อมต่อถึงกันของโทโพโลยีมากมายเช่นstar , ring , tree , hypercube , hypercube ไขมัน (hypercube ที่มีมากกว่าหนึ่งหน่วยประมวลผลที่โหนด) หรือn มิติตาข่าย

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

คลาสของคอมพิวเตอร์คู่ขนาน

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

การคำนวณแบบมัลติคอร์

โปรเซสเซอร์แบบมัลติคอร์คือโปรเซสเซอร์ที่มีหน่วยประมวลผลหลายตัว(เรียกว่า "คอร์") บนชิปตัวเดียวกัน โปรเซสเซอร์นี้แตกต่างจากโปรเซสเซอร์superscalarซึ่งรวมถึงหน่วยดำเนินการหลายหน่วยและสามารถออกคำสั่งได้หลายคำสั่งต่อรอบสัญญาณนาฬิกาจากสตรีมคำสั่งเดียว (เธรด) ในทางตรงกันข้าม โปรเซสเซอร์แบบมัลติคอร์สามารถออกคำสั่งได้หลายคำสั่งต่อรอบสัญญาณนาฬิกาจากสตรีมคำสั่งต่างๆ ไมโครโปรเซสเซอร์ CellของIBMออกแบบมาเพื่อใช้ในSony PlayStation 3 เป็นโปรเซสเซอร์แบบมัลติคอร์ที่โดดเด่น แต่ละคอร์ในโปรเซสเซอร์แบบมัลติคอร์อาจเป็นซูเปอร์สเกลาร์เช่นกัน นั่นคือในทุกรอบสัญญาณนาฬิกา แต่ละคอร์สามารถออกคำสั่งได้หลายคำสั่งจากเธรดเดียว

Multithreading พร้อมกัน (ซึ่งHyper-Threadingของ Intel เป็นที่รู้จักกันดีที่สุด) เป็นรูปแบบแรกของ pseudo-multi-coreism โปรเซสเซอร์ที่สามารถทำงานแบบมัลติเธรดได้พร้อมกันจะรวมหน่วยดำเนินการหลายหน่วยในหน่วยประมวลผลเดียวกัน นั่นคือมีสถาปัตยกรรมซูเปอร์สเกลาร์ และสามารถออกคำสั่งได้หลายคำสั่งต่อรอบสัญญาณนาฬิกาจากหลายเธรด Temporal multithreadingรวมหน่วยประมวลผลเดียวในหน่วยประมวลผลเดียวกัน และสามารถออกคำสั่งครั้งละหนึ่งคำสั่งจากหลายเธรด

การประมวลผลหลายตัวแบบสมมาตร

มัลติสมมาตร (SMP) เป็นระบบคอมพิวเตอร์ที่มีโปรเซสเซอร์ที่เหมือนกันหลายว่าหน่วยความจำร่วมกันและการเชื่อมต่อผ่านทางรถบัส [39] การแย่งชิงบัสป้องกันสถาปัตยกรรมบัสจากการปรับขนาด ด้วยเหตุนี้ โดยทั่วไป SMP จึงไม่ประกอบด้วยโปรเซสเซอร์มากกว่า 32 ตัว [40]เนื่องจากโปรเซสเซอร์มีขนาดเล็กและความต้องการแบนด์วิดท์บัสที่ลดลงอย่างมากจากแคชขนาดใหญ่ มัลติโปรเซสเซอร์ที่สมมาตรดังกล่าวจึงคุ้มค่าอย่างยิ่ง โดยมีแบนด์วิดท์หน่วยความจำเพียงพอ [39]

การคำนวณแบบกระจาย

คอมพิวเตอร์แบบกระจาย (หรือที่เรียกว่ามัลติโปรเซสเซอร์หน่วยความจำแบบกระจาย) เป็นระบบคอมพิวเตอร์หน่วยความจำแบบกระจายซึ่งองค์ประกอบการประมวลผลเชื่อมต่อกันด้วยเครือข่าย คอมพิวเตอร์แบบกระจายสามารถปรับขนาดได้สูง คำว่า " การคำนวณพร้อมกัน " " การคำนวณแบบขนาน " และ " การคำนวณแบบกระจาย " มีความทับซ้อนกันอยู่มาก และไม่มีความแตกต่างที่ชัดเจนระหว่างคำเหล่านี้ [41]ระบบเดียวกันอาจมีลักษณะเป็น "ขนาน" และ "กระจาย"; โปรเซสเซอร์ในระบบแบบกระจายทั่วไปทำงานแบบขนานกัน [42]

การคำนวณคลัสเตอร์

คลัสเตอร์คือกลุ่มของคอมพิวเตอร์ที่เชื่อมต่อกันอย่างหลวมๆ ที่ทำงานร่วมกันอย่างใกล้ชิด เพื่อให้สามารถถือได้ว่าเป็นคอมพิวเตอร์เครื่องเดียวในบางประการ[43]คลัสเตอร์ประกอบด้วยเครื่องสแตนด์อโลนหลายเครื่องที่เชื่อมต่อกันด้วยเครือข่าย แม้ว่าเครื่องจักรในคลัสเตอร์ไม่จำเป็นต้องสมมาตร แต่การทำโหลดบาลานซ์จะยากกว่าหากไม่เป็นเช่นนั้น ชนิดที่พบมากที่สุดของคลัสเตอร์คือคลัสเตอร์วูล์ฟซึ่งเป็นคลัสเตอร์ดำเนินการเหมือนกันหลายพาณิชย์ปิดชั้นวางของคอมพิวเตอร์ที่เชื่อมต่อกับTCP / IP Ethernet เครือข่ายท้องถิ่น [44]เทคโนโลยี Beowulf ได้รับการพัฒนาโดยThomas SterlingและDonald Becker. 87% ของซูเปอร์คอมพิวเตอร์Top500ทั้งหมดเป็นกลุ่ม[45]ส่วนที่เหลือคือ Massively Parallel Processors อธิบายไว้ด้านล่าง

เนื่องจากระบบกริดคอมพิวติ้ง (อธิบายไว้ด้านล่าง) สามารถจัดการกับปัญหาคู่ขนานที่น่าอับอายได้อย่างง่ายดาย คลัสเตอร์สมัยใหม่จึงได้รับการออกแบบเพื่อจัดการกับปัญหาที่ยากขึ้น ซึ่งก็คือปัญหาที่ต้องใช้โหนดเพื่อแบ่งปันผลลัพธ์ขั้นกลางระหว่างกันบ่อยขึ้น สิ่งนี้ต้องการแบนด์วิดธ์สูงและที่สำคัญกว่านั้นคือเครือข่ายการเชื่อมต่อระหว่างกันที่มีความหน่วงต่ำซูเปอร์คอมพิวเตอร์ในอดีตและปัจจุบันจำนวนมากใช้ฮาร์ดแวร์เครือข่ายประสิทธิภาพสูงที่ปรับแต่งได้ซึ่งออกแบบมาโดยเฉพาะสำหรับการประมวลผลแบบคลัสเตอร์ เช่น เครือข่าย Cray Gemini [46]ในขณะที่ปี 2014, ซูเปอร์คอมพิวเตอร์ในปัจจุบันส่วนใหญ่ใช้บางส่วนออก -the-shelf ฮาร์ดแวร์เครือข่ายมาตรฐานมักMyrinet , InfiniBandหรือGigabit Ethernet

การคำนวณแบบขนานขนาดใหญ่
ตู้จากBlue Gene/L ซูเปอร์คอมพิวเตอร์แบบขนานขนาดใหญ่ของIBM

โปรเซสเซอร์ขนานหนาแน่น (MPP) คือคอมพิวเตอร์เครื่องเดียวที่มีโปรเซสเซอร์เครือข่ายจำนวนมาก MPP มีลักษณะหลายอย่างเหมือนกันกับคลัสเตอร์ แต่ MPP มีเครือข่ายที่เชื่อมต่อถึงกันแบบพิเศษ (ในขณะที่คลัสเตอร์ใช้ฮาร์ดแวร์แบบสินค้าโภคภัณฑ์สำหรับเครือข่าย) MPP ยังมีแนวโน้มที่จะมีขนาดใหญ่กว่าคลัสเตอร์ โดยทั่วไปจะมีโปรเซสเซอร์ "มากกว่า" มากกว่า 100 ตัว [47]ใน MPP "ซีพียูแต่ละตัวมีหน่วยความจำและสำเนาของระบบปฏิบัติการและแอปพลิเคชันของตัวเอง ระบบย่อยแต่ละระบบจะสื่อสารกับผู้อื่นผ่านการเชื่อมต่อระหว่างกันความเร็วสูง" [48]

Blue Gene/LของIBMซึ่งเป็นซูเปอร์คอมพิวเตอร์ที่เร็วที่สุดอันดับห้าของโลกตามการจัดอันดับTOP500ในเดือนมิถุนายน 2552 เป็น MPP

การคำนวณแบบกริด

การคำนวณแบบกริดเป็นรูปแบบการคำนวณแบบขนานที่มีการกระจายมากที่สุด ใช้คอมพิวเตอร์ที่สื่อสารผ่านอินเทอร์เน็ตเพื่อแก้ไขปัญหาที่กำหนด เนื่องจากแบนด์วิดท์ต่ำและเวลาแฝงที่สูงมากบนอินเทอร์เน็ต การคำนวณแบบกระจายมักจะจัดการกับปัญหาคู่ขนานที่น่าอับอายเท่านั้น มีการสร้างแอปพลิเคชันการคำนวณแบบกระจายจำนวนมากซึ่งSETI@homeและFolding@homeเป็นตัวอย่างที่รู้จักกันดีที่สุด [49]

แอปพลิเคชันการคำนวณแบบกริดส่วนใหญ่ใช้มิดเดิลแวร์ (ซอฟต์แวร์ที่อยู่ระหว่างระบบปฏิบัติการและแอปพลิเคชันเพื่อจัดการทรัพยากรเครือข่ายและทำให้อินเทอร์เฟซซอฟต์แวร์เป็นมาตรฐาน) มิดเดิลแวร์การคำนวณแบบกระจายที่พบบ่อยที่สุดคือBerkeley Open Infrastructure for Network Computing (BOINC) บ่อยครั้ง ซอฟต์แวร์การคำนวณแบบกระจายใช้ "วงจรสำรอง" เพื่อทำการคำนวณในบางครั้งที่คอมพิวเตอร์ไม่ทำงาน

คอมพิวเตอร์คู่ขนานเฉพาะทาง

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

การคำนวณที่กำหนดค่าใหม่ได้ด้วยอาร์เรย์เกทที่สามารถตั้งโปรแกรมฟิลด์ได้

การคำนวณที่กำหนดค่าใหม่ได้คือการใช้field-programmable gate array (FPGA) เป็นตัวประมวลผลร่วมกับคอมพิวเตอร์เอนกประสงค์ โดยพื้นฐานแล้ว FPGA คือชิปคอมพิวเตอร์ที่สามารถต่อสายไฟใหม่ได้สำหรับงานที่กำหนด

FPGAs สามารถตั้งโปรแกรมด้วยภาษาคำอธิบายฮาร์ดแวร์เช่นVHDL [50]หรือVerilog [51]อย่างไรก็ตาม การเขียนโปรแกรมในภาษาเหล่านี้อาจเป็นเรื่องที่น่าเบื่อหน่าย ผู้ค้าหลายรายได้สร้างภาษา C ถึง HDLที่พยายามเลียนแบบไวยากรณ์และความหมายของภาษาการเขียนโปรแกรม Cซึ่งโปรแกรมเมอร์ส่วนใหญ่คุ้นเคย ที่รู้จักกันดี C ถึงภาษา HDL มีMitrion-C , Impulse C , DIME-Cและฮัน-Cสามารถใช้ชุดย่อยเฉพาะของSystemC ที่ใช้ C ++ เพื่อจุดประสงค์นี้ได้

การตัดสินใจของ AMD ในการเปิดเทคโนโลยี HyperTransportให้กับผู้จำหน่ายบุคคลที่สามได้กลายเป็นเทคโนโลยีที่เปิดใช้งานสำหรับการประมวลผลที่กำหนดค่าใหม่ได้ประสิทธิภาพสูง [52]ตามที่ Michael R. D'Amour ประธานเจ้าหน้าที่ฝ่ายปฏิบัติการของDRC Computer Corporationกล่าว "เมื่อเราเดินเข้าไปใน AMD ครั้งแรก พวกเขาเรียกเราว่า 'ผู้ขโมยซ็อกเก็ต ' ตอนนี้พวกเขาเรียกเราว่าหุ้นส่วนของพวกเขา” [52]

การคำนวณเอนกประสงค์บนหน่วยประมวลผลกราฟิก (GPGPU)

วัตถุประสงค์ทั่วไปคอมพิวเตอร์บนกราฟิกหน่วยประมวลผล (GPGPU) เป็นแนวโน้มล่าสุดอย่างเป็นธรรมในการวิจัยวิศวกรรมคอมพิวเตอร์ GPU เป็นโปรเซสเซอร์ร่วมที่ได้รับการปรับแต่งอย่างมากสำหรับการประมวลผลกราฟิกของคอมพิวเตอร์[53]การประมวลผลกราฟิกของคอมพิวเตอร์เป็นเขตข้อมูลที่ถูกครอบงำโดยการดำเนินการแบบขนานของข้อมูล—โดยเฉพาะอย่างยิ่งการดำเนินการ เมทริกซ์พีชคณิตเชิงเส้น

ในช่วงแรกๆ โปรแกรม GPGPU ใช้กราฟิก API ปกติสำหรับการรันโปรแกรม อย่างไรก็ตาม ภาษาและแพลตฟอร์มการเขียนโปรแกรมใหม่ ๆ ได้ถูกสร้างขึ้นเพื่อใช้ในการคำนวณวัตถุประสงค์ทั่วไปบน GPU โดยที่ทั้งNvidiaและAMDปล่อยสภาพแวดล้อมการเขียนโปรแกรมด้วยCUDAและStream SDKตามลำดับ การเขียนโปรแกรมภาษาอื่น ๆ รวมถึง GPU BrookGPU , PeakStreamและRapidMind Nvidia ยังได้เปิดตัวผลิตภัณฑ์ที่เฉพาะเจาะจงในการคำนวณในของพวกเขาชุดเทสลากลุ่มเทคโนโลยี Khronos Group ได้เปิดตัวOpenCLข้อกำหนดซึ่งเป็นกรอบสำหรับการเขียนโปรแกรมที่ทำงานข้ามแพลตฟอร์มที่ประกอบด้วย CPU และ GPU เอเอ็มดี , แอปเปิ้ล , Intel , Nvidiaและคนอื่น ๆ จะสนับสนุนOpenCL

วงจรรวมเฉพาะแอปพลิเคชัน

หลายโปรแกรมเฉพาะวงจรรวม (ASIC) วิธีการได้รับการวางแผนสำหรับการรับมือกับการใช้งานแบบขนาน [54] [55] [56]

เนื่องจาก ASIC เป็น (ตามคำจำกัดความ) เฉพาะสำหรับแอปพลิเคชันที่กำหนด จึงสามารถเพิ่มประสิทธิภาพได้อย่างเต็มที่สำหรับแอปพลิเคชันนั้น เป็นผลให้สำหรับแอปพลิเคชันที่กำหนด ASIC มีแนวโน้มที่จะมีประสิทธิภาพสูงกว่าคอมพิวเตอร์เอนกประสงค์ อย่างไรก็ตาม ASICs ถูกสร้างขึ้นโดยphotolithography รังสียูวีกระบวนการนี้ต้องใช้ชุดมาสก์ซึ่งอาจมีราคาแพงมาก ชุดหน้ากากมีราคามากกว่าหนึ่งล้านเหรียญสหรัฐ[57] (ยิ่งทรานซิสเตอร์ที่จำเป็นสำหรับชิปมีขนาดเล็กเท่าใด หน้ากากก็จะยิ่งมีราคาแพงมากขึ้นเท่านั้น) ในขณะเดียวกัน ประสิทธิภาพในการประมวลผลทั่วไปก็เพิ่มขึ้นเมื่อเวลาผ่านไป (ตามที่อธิบายโดยกฎของมัวร์ ) มักจะขจัดกำไรเหล่านี้ออกไปในหนึ่งหรือ ชิปสองรุ่น[52]ต้นทุนเริ่มต้นที่สูง และแนวโน้มที่จะถูกแซงโดยการคำนวณเพื่อวัตถุประสงค์ทั่วไปที่ขับเคลื่อนด้วยกฎหมายของมัวร์ ทำให้ ASIC ไม่สามารถทำได้สำหรับแอปพลิเคชันการคำนวณแบบขนานส่วนใหญ่ อย่างไรก็ตาม มีการสร้างบางส่วน ตัวอย่างหนึ่งคือเครื่อง PFLOPS RIKEN MDGRAPE-3ซึ่งใช้ ASIC ที่กำหนดเองสำหรับการจำลอง ไดนามิกของโมเลกุล

โปรเซสเซอร์เวกเตอร์
Cray-1เป็นหน่วยประมวลผลเวกเตอร์

โปรเซสเซอร์เวกเตอร์คือระบบ CPU หรือคอมพิวเตอร์ที่สามารถดำเนินการคำสั่งเดียวกันกับชุดข้อมูลขนาดใหญ่ ตัวประมวลผลเวกเตอร์มีการดำเนินการระดับสูงที่ทำงานกับอาร์เรย์เชิงเส้นของตัวเลขหรือเวกเตอร์ การดำเนินการเช่นเวกเตอร์เป็น= B × Cที่, BและCแต่ละเวกเตอร์ 64 องค์ประกอบของ 64 บิตลอยจุดหมายเลข[58]มีความเกี่ยวข้องอย่างใกล้ชิดกับการจำแนก SIMD ของ Flynn [58]

คอมพิวเตอร์Crayมีชื่อเสียงในด้านคอมพิวเตอร์ที่ใช้การประมวลผลภาพเวกเตอร์ในปี 1970 และ 1980 อย่างไรก็ตาม โปรเซสเซอร์เวคเตอร์—ทั้งแบบซีพียูและแบบระบบคอมพิวเตอร์เต็มรูปแบบ— ได้หายไปโดยทั่วไป ชุดคำสั่งโปรเซสเซอร์สมัยใหม่ประกอบด้วยคำสั่งการประมวลผลแบบเวกเตอร์ เช่นAltiVecของFreescale SemiconductorและStreaming SIMD Extensions (SSE) ของIntel

ซอฟต์แวร์

ภาษาโปรแกรมแบบขนาน

ภาษาการเขียนโปรแกรมพร้อมกัน , ไลบรารี , APIและโมเดลการเขียนโปรแกรมแบบขนาน (เช่นโครงร่างอัลกอริธึม ) ได้รับการสร้างขึ้นสำหรับการเขียนโปรแกรมคอมพิวเตอร์แบบขนาน โดยทั่วไปสิ่งเหล่านี้สามารถแบ่งออกเป็นคลาสตามสมมติฐานที่พวกเขาทำเกี่ยวกับสถาปัตยกรรมหน่วยความจำพื้นฐาน—หน่วยความจำแบบแบ่งใช้ หน่วยความจำแบบกระจาย หรือหน่วยความจำแบบกระจายแบบแบ่งใช้ ภาษาโปรแกรมหน่วยความจำที่ใช้ร่วมกันสื่อสารโดยการจัดการตัวแปรหน่วยความจำที่ใช้ร่วมกัน หน่วยความจำแบบกระจายใช้ข้อความผ่าน POSIX ThreadsและOpenMPเป็นสอง API หน่วยความจำที่ใช้ร่วมกันที่ใช้กันอย่างแพร่หลายมากที่สุด ในขณะที่Message Passing Interface(MPI) คือ API ระบบส่งข้อความที่ใช้กันอย่างแพร่หลาย[59]แนวคิดหนึ่งที่ใช้ในการเขียนโปรแกรมโปรแกรมคู่ขนานคือแนวคิดในอนาคตโดยที่ส่วนหนึ่งของโปรแกรมสัญญาว่าจะส่งมอบ Datum ที่จำเป็นไปยังอีกส่วนหนึ่งของโปรแกรมในอนาคต

CAPS EntrepriseและPathscaleนอกจากนี้ยังมีการประสานงานความพยายามของพวกเขาที่จะทำให้การเขียนโปรแกรมแบบขนานไฮบริดแบบ multi-core (HMPP) directives มาตรฐานเปิดที่เรียกว่าOpenHMPPโมเดลการเขียนโปรแกรมที่อิงตามคำสั่ง OpenHMPP นำเสนอรูปแบบการออฟโหลดการคำนวณบนตัวเร่งฮาร์ดแวร์อย่างมีประสิทธิภาพ และเพื่อเพิ่มประสิทธิภาพการเคลื่อนย้ายข้อมูลไปยัง/จากหน่วยความจำฮาร์ดแวร์ คำสั่ง OpenHMPP อธิบายการเรียกโพรซีเดอร์ระยะไกล (RPC) บนอุปกรณ์เร่งความเร็ว (เช่น GPU) หรือชุดของคอร์โดยทั่วไป คำสั่งใส่คำอธิบายประกอบCหรือFortran รหัสเพื่ออธิบายฟังก์ชันการทำงานสองชุด: การถ่ายโพรซีเดอร์ (โค้ดเล็ตที่ระบุ) ลงในอุปกรณ์ระยะไกลและการปรับการถ่ายโอนข้อมูลระหว่างหน่วยความจำหลักของ CPU และหน่วยความจำส่วนเร่งให้เหมาะสม

การเพิ่มขึ้นของ GPU สำหรับผู้บริโภคนำไปสู่การรองรับcompute kernelsทั้งในกราฟิก API (เรียกว่าcompute shaders ) ใน API เฉพาะ (เช่นOpenCL ) หรือในส่วนขยายภาษาอื่นๆ

การขนานอัตโนมัติ

การขนานอัตโนมัติของโปรแกรมตามลำดับโดยคอมไพเลอร์คือ "จอกศักดิ์สิทธิ์" ของการคำนวณแบบขนาน โดยเฉพาะอย่างยิ่งกับขีดจำกัดความถี่ของโปรเซสเซอร์ที่กล่าวไว้ข้างต้น แม้จะทำงานโดยนักวิจัยคอมไพเลอร์มาหลายทศวรรษ แต่การขนานอัตโนมัติก็ประสบความสำเร็จอย่างจำกัด[60]

ภาษาโปรแกรมแบบขนานหลักยังคงเป็นแบบขนานอย่างชัดเจนหรือ (อย่างดีที่สุด) โดยนัยบางส่วนซึ่งโปรแกรมเมอร์ให้คำสั่งคอมไพเลอร์สำหรับการทำให้ขนานกัน ไม่กี่ขนานนัยอย่างเต็มที่ในการเขียนโปรแกรมภาษา exist- SISALขนานHaskell , SequenceL , ระบบ C (สำหรับFPGAs ) Mitrion-C , VHDLและVerilog

จุดตรวจแอปพลิเคชัน

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

วิธีการอัลกอริทึม

เนื่องจากคอมพิวเตอร์แบบขนานมีขนาดใหญ่ขึ้นและเร็วขึ้น ตอนนี้เราจึงสามารถแก้ปัญหาที่เคยใช้เวลานานเกินไปในการดำเนินการได้ สาขาต่างๆ เช่นชีวสารสนเทศ (สำหรับการพับโปรตีนและการวิเคราะห์ลำดับ ) และเศรษฐศาสตร์ (สำหรับการเงินทางคณิตศาสตร์ ) ได้ใช้ประโยชน์จากการคำนวณแบบคู่ขนาน ปัญหาประเภททั่วไปในแอปพลิเคชันการคำนวณแบบคู่ขนาน ได้แก่: [62]

ความทนทานต่อความผิดพลาด

การคำนวณแบบขนานยังสามารถนำไปใช้กับการออกแบบระบบคอมพิวเตอร์ที่ทนต่อข้อผิดพลาดโดยเฉพาะอย่างยิ่งผ่านระบบล็อกสเต็ปที่ทำงานแบบขนานกัน ซึ่งจะทำให้เกิดความซ้ำซ้อนในกรณีที่ส่วนประกอบหนึ่งล้มเหลว และยังช่วยให้สามารถตรวจจับข้อผิดพลาดอัตโนมัติและแก้ไขข้อผิดพลาดได้หากผลลัพธ์แตกต่างกัน สามารถใช้วิธีการเหล่านี้เพื่อช่วยป้องกันเหตุการณ์ที่เกิดขึ้นเพียงครั้งเดียวซึ่งเกิดจากข้อผิดพลาดชั่วคราว [63]แม้ว่าอาจจำเป็นต้องใช้มาตรการเพิ่มเติมในระบบฝังตัวหรือระบบเฉพาะทาง วิธีการนี้สามารถให้แนวทางที่คุ้มค่าเพื่อให้เกิดความซ้ำซ้อนแบบ n-modular ในระบบนอกชั้นวางเชิงพาณิชย์

ประวัติ

ILLIAC IV "ซูเปอร์คอมพิวเตอร์ที่น่าอับอายที่สุด" [64]

ต้นกำเนิดของความจริง (MIMD) ขนานไปกลับไปที่Luigi Federico Menabreaของเขาและร่างของการวิเคราะห์เครื่องยนต์การประดิษฐ์คิดค้นโดยCharles Babbage [65] [66] [67]

ในเดือนเมษายน พ.ศ. 2501 สแตนลีย์ กิลล์ (เฟอร์แรนติ) ได้หารือเกี่ยวกับการเขียนโปรแกรมแบบขนานและความจำเป็นในการแตกแขนงและการรอ[68]นอกจากนี้ ในปี 1958 นักวิจัยของ IBM John CockeและDaniel Slotnick ได้หารือเกี่ยวกับการใช้ความเท่าเทียมกันในการคำนวณเชิงตัวเลขเป็นครั้งแรก[69] โรห์คอร์ปอเรชั่นแนะนำ D825 ในปี 1962 คอมพิวเตอร์สี่หน่วยประมวลผลที่เข้าถึงได้ถึง 16 โมดูลหน่วยความจำผ่านสวิตช์คาน [70]ในปี 1967 Amdahl และ Slotnick ได้ตีพิมพ์การอภิปรายเกี่ยวกับความเป็นไปได้ของการประมวลผลแบบคู่ขนานที่การประชุม American Federation of Information Processing Societies [69]ในระหว่างการอภิปรายนี้กฎหมายของ Amdahl ได้รับการประกาศเกียรติคุณเพื่อกำหนดขีด จำกัด ของการเร่งความเร็วเนื่องจากการขนาน

ในปี 1969 Honeywell ได้เปิดตัวระบบMultics ตัวแรกซึ่งเป็นระบบมัลติโปรเซสเซอร์แบบสมมาตรที่สามารถรันโปรเซสเซอร์ได้มากถึงแปดตัวพร้อมกัน [69] C.mmpโครงการมัลติโปรเซสเซอร์ที่มหาวิทยาลัย Carnegie Mellonในปี 1970 เป็นหนึ่งในโปรเซสเซอร์หลายตัวแรกที่มีโปรเซสเซอร์มากกว่าสองสามตัว มัลติโปรเซสเซอร์ที่เชื่อมต่อกับบัสตัวแรกที่มีแคชสอดแนมคือSynapse N+1ในปี 1984 [66]

คอมพิวเตอร์แบบขนาน SIMD สามารถสืบย้อนไปถึงปี 1970 แรงจูงใจเบื้องหลังคอมพิวเตอร์ SIMD รุ่นแรกคือการตัดค่าหน่วงเวลาเกตของหน่วยควบคุมของโปรเซสเซอร์ด้วยคำสั่งหลายคำสั่ง[71]ในปี 1964 Slotnick ได้เสนอการสร้างคอมพิวเตอร์แบบขนานขนาดใหญ่สำหรับห้องปฏิบัติการแห่งชาติ Lawrence Livermore [69]การออกแบบของเขาได้รับการสนับสนุนจากกองทัพอากาศสหรัฐซึ่งเป็นความพยายามที่ขนานคอมพิวเตอร์ที่เก่าแก่ที่สุด SIMD, ILLIAC IV [69]กุญแจสำคัญในการออกแบบคือความขนานที่ค่อนข้างสูง โดยมีโปรเซสเซอร์มากถึง 256 ตัว ซึ่งทำให้เครื่องสามารถทำงานกับชุดข้อมูลขนาดใหญ่ได้ ซึ่งต่อมาจะเรียกว่าการประมวลผลแบบเวกเตอร์. อย่างไรก็ตาม ILLIAC IV ถูกเรียกว่า "ซุปเปอร์คอมพิวเตอร์ที่น่าอับอายที่สุด" เนื่องจากโครงการนี้สร้างเสร็จเพียงหนึ่งในสี่ แต่ใช้เวลา 11 ปีและเสียค่าใช้จ่ายเกือบสี่เท่าของประมาณการเดิม [64]เมื่อในที่สุดก็พร้อมที่จะใช้งานจริงเป็นครั้งแรกในปี 1976 มันก็ทำได้ดีกว่าโดยซูเปอร์คอมพิวเตอร์ที่มีอยู่ในเชิงพาณิชย์เช่นCray-1

สมองชีวภาพเปรียบเสมือนคอมพิวเตอร์ขนานใหญ่

ในช่วงต้นปี 1970 ที่เอ็มไอทีวิทยาศาสตร์คอมพิวเตอร์และห้องปฏิบัติการปัญญาประดิษฐ์ , มาร์วินมินสกีและSeymour Papertเริ่มต้นการพัฒนาสังคมแห่งการคิดทฤษฎีซึ่งมองสมองชีวภาพเป็นคอมพิวเตอร์แบบขนานขนาดใหญ่ในปี 1986 Minsky ได้ตีพิมพ์The Society of Mindซึ่งอ้างว่า "จิตใจถูกสร้างขึ้นจากตัวแทนเล็ก ๆ น้อย ๆ จำนวนมากซึ่งแต่ละคนไม่สนใจด้วยตัวเอง" [72]ทฤษฎีนี้พยายามอธิบายว่าสิ่งที่เราเรียกว่าความฉลาดนั้นเป็นผลจากปฏิสัมพันธ์ของชิ้นส่วนที่ไม่ฉลาดได้อย่างไร Minsky กล่าวว่าแหล่งที่มาของแนวคิดที่ใหญ่ที่สุดเกี่ยวกับทฤษฎีนี้มาจากงานของเขาในการพยายามสร้างเครื่องจักรที่ใช้แขนหุ่นยนต์ กล้องวิดีโอ และคอมพิวเตอร์เพื่อสร้างด้วยบล็อกสำหรับเด็ก [73]

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

ดูเพิ่มเติม

อ้างอิง

  1. ^ Gottlieb, อัลลัน; อัลมาซี, จอร์จ เอส. (1989). การคำนวณแบบขนานสูง เรดวูดซิตี้ แคลิฟอร์เนีย: เบนจามิน/คัมมิงส์ ISBN 978-0-8053-0177-9.
  2. ^ SV Adveและคณะ (พฤศจิกายน 2551). "การวิจัยคอมพิวเตอร์แบบขนานที่อิลลินอยส์: วาระ UPCRC" ที่จัด เก็บถาวร 2018-01-11 ที่ Wayback Machine (PDF) Parallel@Illinois มหาวิทยาลัยอิลลินอยส์ Urbana-Champaign "เทคนิคหลักสำหรับประโยชน์ด้านประสิทธิภาพเหล่านี้—ความถี่สัญญาณนาฬิกาที่เพิ่มขึ้นและสถาปัตยกรรมที่ชาญฉลาดขึ้นแต่ซับซ้อนขึ้น—ขณะนี้กำลังกระทบกับกำแพงพลังงานที่เรียกว่าอุตสาหกรรมคอมพิวเตอร์ยอมรับว่าประสิทธิภาพที่เพิ่มขึ้นในอนาคตส่วนใหญ่มาจากการเพิ่มจำนวนโปรเซสเซอร์ (หรือคอร์) ) บนดาย แทนที่จะทำให้คอร์เดียวเร็วขึ้น"
  3. ^ Asanovic et al,เก่า [ภูมิปัญญาดั้งเดิม]: พลังงานฟรี แต่ทรานซิสเตอร์มีราคาแพง ใหม่ [ภูมิปัญญาดั้งเดิม] คือ [นั้น] พลังงานมีราคาแพง แต่ทรานซิสเตอร์ "ฟรี"
  4. ^ อาซาโนวิช , Krste et al. (18 ธันวาคม 2549). "ภูมิทัศน์ของการวิจัยคอมพิวเตอร์คู่ขนาน: มุมมองจากเบิร์กลีย์" (PDF) มหาวิทยาลัยแคลิฟอร์เนีย เบิร์กลีย์ รายงานทางเทคนิคหมายเลข UCB/EECS-2006-183 "เก่า [ภูมิปัญญาดั้งเดิม]: การเพิ่มความถี่สัญญาณนาฬิกาเป็นวิธีหลักในการปรับปรุงประสิทธิภาพของโปรเซสเซอร์ ใหม่ [ภูมิปัญญาดั้งเดิม]: การเพิ่มความขนานเป็นวิธีการหลักในการปรับปรุงประสิทธิภาพของโปรเซสเซอร์… แม้แต่ตัวแทนจาก Intel บริษัทโดยทั่วไปที่เกี่ยวข้องกับ 'นาฬิกาที่สูงกว่า ตำแหน่ง -speed is better' เตือนว่าวิธีการดั้งเดิมในการเพิ่มประสิทธิภาพสูงสุดผ่านการเพิ่มความเร็วสัญญาณนาฬิกาสูงสุดได้ถูกผลักดันให้ถึงขีดจำกัดแล้ว"
  5. ^ "Concurrency is not Parallelism", Waza conference 11 มกราคม 2012, Rob Pike (สไลด์ Archived 2015-07-30 ที่ Wayback Machine ) (วิดีโอ )
  6. ^ "ขนานกับการทำงานพร้อมกัน" . ฮาสเคลล์ วิกิ .
  7. ^ เฮนเนส, จอห์นลิตร ; แพตเตอร์สัน, เดวิด เอ ; ลารัส, เจมส์ อาร์. (1999). การจัดระบบคอมพิวเตอร์และการออกแบบ: อินเทอร์เฟซฮาร์ดแวร์/ซอฟต์แวร์ (2. ed., 3rd print. ed.) ซานฟรานซิสโก: คอฟมันน์ ISBN 978-1-55860-428-5.
  8. อรรถเป็น บาร์นีย์, แบลส. "ความรู้เบื้องต้นเกี่ยวกับคอมพิวเตอร์แบบขนาน" . Lawrence Livermore ห้องปฏิบัติการแห่งชาติ สืบค้นเมื่อ2007-11-09 .
  9. ^ โทมัส Rauber; Gudula Rünger (2013). การเขียนโปรแกรมแบบขนานสำหรับ Multicore และคลัสเตอร์ระบบ สื่อวิทยาศาสตร์และธุรกิจของสปริงเกอร์ NS. 1. ISBN 9783642378010.
  10. ^ เฮนเนสซี จอห์น แอล.; แพตเตอร์สัน, เดวิด เอ. (2002). สถาปัตยกรรมคอมพิวเตอร์ / แนวทางเชิงปริมาณ (ฉบับที่ 3) ซานฟรานซิสโก แคลิฟอร์เนีย: อินเตอร์เนชั่นแนล ทอมสัน. NS. 43. ISBN 978-1-55860-724-8.
  11. ^ ระเบย์, แจน เอ็ม. (1996). ดิจิตอลวงจร: มุมมองการออกแบบ Upper Saddle River, นิวเจอร์ซีย์: Prentice-Hall NS. 235. ISBN 978-0-13-178609-7.
  12. ฟลินน์ ลอรี เจ. (8 พฤษภาคม พ.ศ. 2547). "Intel หยุดการพัฒนาไมโครโปรเซสเซอร์ใหม่ 2 ตัว" . นิวยอร์กไทม์ส. สืบค้นเมื่อ5 มิถุนายน 2555 .
  13. ^ โทมัส Rauber; Gudula Rünger (2013). การเขียนโปรแกรมแบบขนานสำหรับ Multicore และคลัสเตอร์ระบบ สื่อวิทยาศาสตร์และธุรกิจของสปริงเกอร์ NS. 2. ISBN 9783642378010.
  14. ^ โทมัส Rauber; Gudula Rünger (2013). การเขียนโปรแกรมแบบขนานสำหรับ Multicore และคลัสเตอร์ระบบ สื่อวิทยาศาสตร์และธุรกิจของสปริงเกอร์ NS. 3. ISBN 9783642378010.
  15. ^ ดาห์ล, ยีน M. (1967) "ความถูกต้องของวิธีการประมวลผลเดียวที่จะบรรลุขนาดใหญ่ความสามารถในการประมวลผล" กำลังดำเนินการประชุม AFIPS '67 (ฤดูใบไม้ผลิ) วันที่ 18-20 เมษายน พ.ศ. 2510 การประชุมคอมพิวเตอร์ร่วมในฤดูใบไม้ผลิ : 483–485 ดอย : 10.1145/1465482.1465560 .
  16. บรูกส์, เฟรเดอริค พี. (1996). เรียงความเดือนชายในตำนานเกี่ยวกับวิศวกรรมซอฟต์แวร์ (Anniversary ed., repr. with corr., 5. [Dr.] ed.) รีดดิ้ง, แมสซาชูเซตส์ [ua]: แอดดิสัน-เวสลีย์. ISBN 978-0-201-83595-3.
  17. ไมเคิล แมคคูล; เจมส์ เรนเดอร์ส; อาร์ค โรบิสัน (2013). โครงสร้างขนานการเขียนโปรแกรม: รูปแบบการคำนวณที่มีประสิทธิภาพ เอลส์เวียร์. NS. 61.
  18. ^ กุสตาฟ, จอห์นลิตร (พฤษภาคม 1988) "การประเมินกฎของอัมดาห์ลอีกครั้ง" . การติดต่อสื่อสารของพลอากาศเอก 31 (5): 532–533. CiteSeerX 10.1.1.509.6892 . ดอย : 10.1145/42411.42415 . S2CID 33937392 . เก็บถาวรจากต้นฉบับเมื่อ 2007-09-27  
  19. เบิร์นสไตน์, เอเจ (1 ตุลาคม พ.ศ. 2509) "การวิเคราะห์โปรแกรมสำหรับการประมวลผลแบบขนาน". ธุรกรรมอีอีอีคอมพิวเตอร์อิเล็กทรอนิกส์ EC-15 (5): 757–763 ดอย : 10.1109/PGEC.1966.264565 .
  20. ^ Roosta, Seyed เอช (2000) ประมวลผลแบบขนานและขั้นตอนวิธีแบบขนาน: ทฤษฎีและการคำนวณ นิวยอร์ก นิวยอร์ก [ua]: สปริงเกอร์ NS. 114. ISBN 978-0-387-98716-3.
  21. ^ "กระบวนการและเธรด" . พัฒนาเครือข่ายไมโครซอฟท์ ไมโครซอฟท์ คอร์ป 2018 . สืบค้นเมื่อ2018-05-10 .
  22. ^ เคราส์, เคิร์ก เจ (2018). "ความปลอดภัยของเธรดเพื่อประสิทธิภาพ" . พัฒนาเพื่อให้มีประสิทธิภาพ สืบค้นเมื่อ2018-05-10 .
  23. ^ Tanenbaum, แอนดรูว์ เอส. (2002-02-01). รู้เบื้องต้นเกี่ยวกับระบบปฏิบัติการชะงักงัน แจ้ง . เพียร์สัน เอ็ดดูเคชั่น, แจ้ง. สืบค้นเมื่อ2018-05-10 .
  24. ^ เซซิล, เดวิด (2015-11-03). "การซิงโครไนซ์ภายใน – สัญญาณ" . ที่ฝัง แอสเพนคอร์. สืบค้นเมื่อ2018-05-10 .
  25. ^ Preshing เจฟฟ์ (2012-06-08) "บทนำสู่การเขียนโปรแกรมแบบไม่ล็อก" . Preshing ในการเขียนโปรแกรม สืบค้นเมื่อ2018-05-10 .
  26. ^ "ตรงข้ามกับ "ขนานน่าอาย" คืออะไร? . สแต็คโอเวอร์โฟลว์ สืบค้นเมื่อ2018-05-10 .
  27. ชวาร์ตษ์, เดวิด (2011-08-15). “การโต้แย้งของเธรดคืออะไร” . สแต็คโอเวอร์โฟลว์ สืบค้นเมื่อ2018-05-10 .
  28. ^ Kukanov, อเล็กซ์ (2008/03/04) "ทำไมการทดสอบอย่างง่ายจึงทำให้เกิดการชะลอตัวแบบขนานได้" . ดึงข้อมูลเมื่อ2015-02-15 .
  29. ^ เคราส์, เคิร์ก เจ (2018). "เธรดเพื่อประสิทธิภาพ" . พัฒนาเพื่อให้มีประสิทธิภาพ สืบค้นเมื่อ2018-05-10 .
  30. ฟลินน์, ไมเคิล เจ. (กันยายน 1972). "องค์กรคอมพิวเตอร์บางแห่งและประสิทธิผล" (PDF) . รายการ IEEE บนคอมพิวเตอร์ C-21 (9): 948–960. ดอย : 10.1109/TC.1972.5009071 .
  31. ^ แพตเตอร์สันและเฮนเนสซี, พี. 748.
  32. ^ ซิงห์ เดวิด คัลเลอร์; เจพี (1997). สถาปัตยกรรมคอมพิวเตอร์แบบขนาน ([Nachdr.] ed.) ซานฟรานซิสโก: Morgan Kaufmann Public NS. 15. ISBN 978-1-55860-343-1.
  33. ^ คัลเลอร์และคณะ NS. 15.
  34. ^ Patt, Yale (เมษายน 2547) "ไมโครโปรเซสเซอร์สิบปีนับจากนี้: อะไรคือความท้าทายอย่างไรเราพบพวกเขา? เก็บไว้ 2008/04/14 ที่เครื่อง Wayback (WMV) โดดเด่นอาจารย์ที่พูดคุย. Carnegie Mellon Universityสืบค้นวันที่ 7 พฤศจิกายน 2007.
  35. ^ คัลเลอร์และคณะ NS. 124.
  36. ^ คัลเลอร์และคณะ NS. 125.
  37. ซามูเอล ลาร์เซน; สมาน อมรสิงห์. "การใช้ความเท่าเทียมระดับ Superword ด้วยชุดคำสั่งมัลติมีเดีย" (PDF) .
  38. ^ แพตเตอร์สันและเฮนเนสพี 713.
  39. ^ เฮนเนสและแพตเตอร์สันพี 549.
  40. ^ แพตเตอร์สันและเฮนเนสซี, พี. 714.
  41. ^ Ghosh (2007) , พี. 10.เคดาร์ (2008) .
  42. ^ ลินช์ (1996) , พี. x, 1–2. Peleg (2000) , พี. 1.
  43. ^ การ จัดกลุ่มคืออะไร? พจนานุกรมคอมพิวเตอร์ Webopedia สืบค้นเมื่อ 7 พฤศจิกายน 2550.
  44. ^ คำจำกัดความของเบวูล์ฟ นิตยสารพีซี . สืบค้นเมื่อ 7 พฤศจิกายน 2550.
  45. ^ "รายการสถิติ | ไซต์ซูเปอร์คอมพิวเตอร์ TOP500" . www.top500.org . สืบค้นเมื่อ2018-08-05 .
  46. ^ "การเชื่อมต่อ" ที่จัดเก็บ 2015/01/28 ที่เครื่อง Wayback
  47. ^ เฮนเนสและแพตเตอร์สันพี 537.
  48. ^ คำจำกัดความของ MPP นิตยสารพีซี . สืบค้นเมื่อ 7 พฤศจิกายน 2550.
  49. ^ Kirkpatrick, สกอตต์ (2003) "วิทยาการคอมพิวเตอร์: ช่วงเวลาที่ยากลำบากข้างหน้า". วิทยาศาสตร์ . 299 (5607): 668–669. ดอย : 10.1126/science.1081623 . PMID 12560537 . S2CID 60622095 .  
  50. ^ วาลูวา มาเรีย; วาลูฟ, จอร์จี; เซเมียโนว่า, นาตาลิยา; Lyakhov, พาเวล; Chervyakov, นิโคเลย์; คาปลัน, มิทรี; Bogaevskiy, ดานิล (2019-06-20). "การก่อสร้างระบบจำนวนกากใช้อุปกรณ์ที่มีประสิทธิภาพฟังก์ชั่นในแนวทแยง" อิเล็กทรอนิกส์ . 8 (6): 694. ดอย : 10.3390/electronics8060694 . ISSN 2079-9292 . วงจรจำลองทั้งหมดได้รับการอธิบายในภาษาคำอธิบายฮาร์ดแวร์ของวงจรรวมความเร็วสูง (VHSIC) (VHDL) การสร้างแบบจำลองฮาร์ดแวร์ดำเนินการบน Xilinx FPGA Artix 7 xc7a200tfbg484-2 
  51. ^ คุปตะ อังกิต; Suneja, Kriti (พฤษภาคม 2020). "การออกแบบฮาร์ดแวร์คูณเมทริกซ์โดยประมาณขึ้นอยู่กับ FPGA ใน Verilog" 2020 ครั้งที่ 4 การประชุมนานาชาติเกี่ยวอัจฉริยะคอมพิวเตอร์และระบบควบคุม (ICICCS) มทุไร อินเดีย: IEEE: 496–498 ดอย : 10.1109/ICICCS48265.2020.9121004 . ISBN 978-1-7281-4876-2. S2CID  219990653 .
  52. a b c D'Amour, Michael R., Chief Operating Officer, DRC Computer Corporation . "คอมพิวเตอร์ที่กำหนดค่าได้มาตรฐาน" วิทยากรรับเชิญที่มหาวิทยาลัยเดลาแวร์ 28 กุมภาพันธ์ 2550
  53. ^ Boggan, Sha'Kia และแดเนียลเอ็มเพรส (สิงหาคม 2007) GPUs: แพลตฟอร์มเกิดใหม่สำหรับการคำนวณเอนกประสงค์ที่ เก็บถาวร 2016-12-25 ที่ Wayback Machine (PDF) ARL-SR-154 ห้องปฏิบัติการวิจัยกองทัพสหรัฐฯ สืบค้นเมื่อ 7 พฤศจิกายน 2550.
  54. ^ Maslennikov โอเล็ก (2002) "การสร้างโปรแกรมดำเนินการอย่างเป็นระบบสำหรับองค์ประกอบของโปรเซสเซอร์ในระบบ ASIC แบบคู่ขนานหรือ FPGA และการแปลงเป็นคำอธิบาย VHDL ของหน่วยควบคุมองค์ประกอบของโปรเซสเซอร์" Lecture Notes in Computer Science , 2328/2002 : น . 272.
  55. ^ ชิ, Y .; Fuwa, Y.; Aramaki, N. (18-21 พฤศจิกายน 1991) "เซลล์ประสาท ASIC VLSI แบบขนานสำหรับเซลล์ประสาทจำนวนมากและการเชื่อมต่อหลายพันล้านครั้งต่อวินาที" ร่วมประชุมนานาชาติเกี่ยวกับโครงข่ายประสาทเทียม 3 : 2162–2167. ดอย : 10.1109/IJCNN.1991.170708 . ISBN 978-0-7803-0227-3. S2CID  61094111 .
  56. ^ Acken เควิน P .; เออร์วิน, แมรี่ เจน; โอเวนส์, โรเบิร์ต เอ็ม. (กรกฎาคม 2541). "สถาปัตยกรรม ASIC แบบคู่ขนานสำหรับการเข้ารหัสรูปภาพเศษส่วนที่มีประสิทธิภาพ" วารสาร VLSI การประมวลผลสัญญาณ19 (2): 97–113. ดอย : 10.1023/A:1008005616596 . S2CID 2976028 . 
  57. ^ Kahng, Andrew B. (21 มิถุนายน 2547) " Scoping the Problem of DFM in the Semiconductor Industry Archived 2008-01-31 at the Wayback Machine ." มหาวิทยาลัยแคลิฟอร์เนีย ซานดิเอโก "การออกแบบในอนาคตสำหรับเทคโนโลยีการผลิต (DFM) จะต้องลดต้นทุนการออกแบบ [ค่าใช้จ่ายที่ไม่สามารถกู้คืนได้] และระบุถึงการผลิตโดยตรง [ค่าใช้จ่ายที่ไม่สามารถกู้คืนได้] ซึ่งเป็นต้นทุนของชุดหน้ากากและการ์ดโพรบ ซึ่งมากกว่า 1 ล้านดอลลาร์ที่ 90 นาโนเมตร โหนดเทคโนโลยีและสร้างแดมเปอร์ที่สำคัญสำหรับนวัตกรรมที่ใช้เซมิคอนดักเตอร์"
  58. ^ แพตเตอร์สันและเฮนเนสพี 751.
  59. ^ ซิดนี่เฟิร์นบาคได้รับรางวัลที่มอบให้กับ MPI ประดิษฐ์บิลกรอปป์ที่จัดเก็บ 2011/07/25 ที่เครื่อง Waybackหมายถึง MPI เป็น "ที่โดดเด่นอินเตอร์เฟซการสื่อสาร HPC"
  60. ^ เชน จอห์น พอล; มิกโกะ เอช. ลิปาสตี (2004). การออกแบบโปรเซสเซอร์สมัยใหม่ : พื้นฐานของโปรเซสเซอร์ superscalar (ฉบับที่ 1) ดูบิวก์ ไอโอวา: McGraw-Hill NS. 561. ISBN 978-0-07-057064-1. อย่างไรก็ตาม จอกศักดิ์สิทธิ์ของการวิจัยดังกล่าว—การทำให้โปรแกรมอนุกรมขนานกันโดยอัตโนมัติ—ยังไม่เกิดขึ้นจริง ในขณะที่มีการแสดงอัลกอริธึมคู่ขนานแบบอัตโนมัติของบางคลาสของอัลกอริธึม ความสำเร็จดังกล่าวส่วนใหญ่จำกัดอยู่ที่การใช้งานทางวิทยาศาสตร์และตัวเลขที่มีการควบคุมการไหลที่คาดการณ์ได้ (เช่น โครงสร้างลูปซ้อนที่มีการนับการวนซ้ำที่กำหนดแบบสแตติก) และรูปแบบการเข้าถึงหน่วยความจำที่วิเคราะห์แบบสถิตได้ (เช่น เดินบนอาร์เรย์หลายมิติขนาดใหญ่ของข้อมูลจุดทศนิยม)
  61. ^ Encyclopedia of Parallel Computing เล่ม 4โดย David Padua 2011 ISBN 0387097651หน้า 265 
  62. ^ Asanovic, Krste, และคณะ (18 ธันวาคม 2549). "ภูมิทัศน์ของการวิจัยคอมพิวเตอร์คู่ขนาน: มุมมองจากเบิร์กลีย์" (PDF) มหาวิทยาลัยแคลิฟอร์เนีย เบิร์กลีย์ รายงานทางเทคนิคหมายเลข UCB/EECS-2006-183 ดูตารางในหน้า 17–19
  63. ^ Dobel, B., Hartig, H., & Engel, M. (2012) "การสนับสนุนระบบปฏิบัติการสำหรับมัลติเธรดซ้ำซ้อน" การดำเนินการของการประชุมนานาชาติ ACM ครั้งที่สิบเรื่องซอฟต์แวร์ฝังตัว 83–92 ดอย : 10.1145/2380356.2380375
  64. ^ แพตเตอร์สันและเฮนเนส, PP 749-50:. "แม้ว่าจะประสบความสำเร็จในการผลักดันหลายเทคโนโลยีที่มีประโยชน์ในโครงการต่อมา ILLIAC IV ล้มเหลวเป็นคอมพิวเตอร์ค่าใช้จ่ายที่เพิ่มขึ้นจาก $ 8 ล้านประมาณใน 1966-31 $ ล้านบาทโดยปี 1972 แม้จะมีการ. การก่อสร้างเครื่องที่วางแผนไว้เพียงหนึ่งในสี่ อาจเป็นซูเปอร์คอมพิวเตอร์ที่น่าอับอายที่สุด โครงการนี้เริ่มต้นในปี 2508 และเริ่มใช้งานจริงครั้งแรกในปี 2519"
  65. ^ Menabrea, LF (1842) ร่างของเครื่องยนต์วิเคราะห์การประดิษฐ์คิดค้นโดย Charles Babbage Bibliothèque Universelle de Genève. ดึงข้อมูลเมื่อ 7 พฤศจิกายน 2550 อ้าง: "เมื่อมีการคำนวณที่เหมือนกันเป็นเวลานานเช่นที่จำเป็นสำหรับการก่อตัวของตารางตัวเลขเครื่องสามารถนำมาเล่นเพื่อให้ผลลัพธ์หลายอย่างในเวลาเดียวกัน ซึ่งจะทำให้กระบวนการทั้งหมดลดลงอย่างมาก"
  66. ^ แพตเตอร์สันและเฮนเนสพี 753.
  67. ^ RW Hockney, CR Jesshope คอมพิวเตอร์ขนาน 2: สถาปัตยกรรม, การเขียนโปรแกรมและอัลกอริทึมเล่ม 2 พ.ศ. 2531 คำกล่าวอ้าง 8: "การอ้างอิงถึงความเท่าเทียมครั้งแรกในการออกแบบคอมพิวเตอร์นั้นคิดว่าอยู่ในสิ่งพิมพ์ของ General LF Menabrea ในปี 1842 ชื่อ Sketch of the Analytical Engine Invented by Charles Babbage "
  68. ^ "การเขียนโปรแกรมแบบขนาน", S. Gill, The Computer Journal Vol. 1 #1, pp2-10, British Computer Society, เมษายน 1958
  69. อรรถa b c d e Wilson, Gregory V. (1994). "ประวัติความเป็นมาของการพัฒนาคอมพิวเตอร์คู่ขนาน" . มหาวิทยาลัยเวอร์จิเนียเทค / มหาวิทยาลัยแห่งรัฐนอร์โฟล์คเรียนรู้แบบโต้ตอบกับห้องสมุดดิจิตอลในสาขาวิทยาศาสตร์คอมพิวเตอร์ ดึงข้อมูล2008-01-08 .
  70. ^ Anthes, เกมส์ (19 พฤศจิกายน 2001) "พลังแห่งความเท่าเทียม" . คอมพิวเตอร์เวิลด์ . เก็บถาวรจากต้นฉบับเมื่อ 31 มกราคม 2008 . ดึงข้อมูล2008-01-08 .
  71. ^ แพตเตอร์สันและเฮนเนสซี, พี. 749.
  72. ^ มินสกี้, มาร์วิน (1986). สังคมแห่งจิตใจ . นิวยอร์ก: ไซม่อน & ชูสเตอร์ หน้า  17 . ISBN 978-0-671-60740-1.
  73. ^ มินสกี้, มาร์วิน (1986). สังคมแห่งจิตใจ . นิวยอร์ก: ไซม่อน & ชูสเตอร์ น.  29 . ISBN 978-0-671-60740-1.
  74. ^ เบลคสลี, โธมัส (1996). เกินกว่าจิตสำนึก ปลดล็อกความลับของตนเอง หน้า  6–7 .
  75. ^ Gazzaniga ไมเคิล ; เลอดูซ์, โจเซฟ (1978). จิตแบบบูรณาการ . หน้า 132–161.
  76. ^ Gazzaniga ไมเคิล (1985) สมองทางสังคม การค้นพบเครือข่ายของจิตใจ น.  77–79 .
  77. ^ ออร์นสไตน์, โรเบิร์ต (1992). วิวัฒนาการของจิตสำนึก: ต้นกำเนิดของวิธีที่เราคิด หน้า  2 .
  78. ^ HILGARD เออร์เนส (1977) สติแบ่ง: การควบคุมหลายในความคิดและการกระทำของมนุษย์ นิวยอร์ก: ไวลีย์ ISBN 978-0-471-39602-4.
  79. ^ HILGARD เออร์เนส (1986) จิตสำนึกแบบแบ่งแยก: การควบคุมหลายอย่างในความคิดและการกระทำของมนุษย์ (ฉบับขยาย) . นิวยอร์ก: ไวลีย์ ISBN 978-0-471-80572-4.
  80. ^ คาคุ มิชิโอะ (2014). อนาคตของจิตใจ .
  81. ^ Ouspenskii, Pyotr (1992) "บทที่ 3". ในการค้นหาปาฏิหาริย์ เศษเสี้ยวของการเรียนการสอนที่ไม่รู้จัก หน้า 72–83.
  82. ^ "เว็บไซต์ Neurocluster Brain Model อย่างเป็นทางการ" . สืบค้นเมื่อ22 กรกฎาคม 2017 .

อ่านเพิ่มเติม

  • โรดริเกซ, C.; วิลลากรา, ม.; Baran, B. (29 สิงหาคม 2551). "อัลกอริธึมทีมแบบอะซิงโครนัสสำหรับความพึงพอใจแบบบูล" Bio-Inspired Models of Network, Information and Computing Systems, 2007. Bionetics 2007. 2nd : 66–69. ดอย : 10.1109/BIMNICS.2007.4610083 . S2CID  15185219 .
  • Sechin, A.; การคำนวณแบบขนานในโฟโตแกรมเมทรี จีไอเอ็ม อินเตอร์เนชั่นแนล #1, 2016, หน้า 21–23.

ลิงค์ภายนอก

ฟังบทความนี้ ( 54นาที )
ไอคอนวิกิพีเดียพูด
ไฟล์เสียงนี้สร้างขึ้นจากการแก้ไขบทความนี้ลงวันที่ 21 สิงหาคม 2013 และไม่ได้สะท้อนถึงการแก้ไขที่ตามมา (2013-08-21)