บทความวิกิพีเดีย EPICได้ระบุไว้แล้วภัยหลายเรื่องธรรมดาที่จะ VLIW และ EPIC
หากใครไม่รู้สึกถึงความโชคชะตาจากบทความนั้นให้ฉันเน้นเรื่องนี้:
โหลดการตอบสนองจากลำดับชั้นหน่วยความจำซึ่งรวมถึงแคชของ CPU และ DRAM ไม่มีความล่าช้าที่กำหนดไว้
กล่าวอีกนัยหนึ่งการออกแบบฮาร์ดแวร์ใด ๆ ที่ล้มเหลวในการรับมือกับ (*) เวลาแฝงที่ไม่ได้กำหนดไว้จากการเข้าถึงหน่วยความจำจะกลายเป็นความล้มเหลวที่งดงาม
(*) โดย "รับมือกับ" มันเป็นสิ่งจำเป็นเพื่อให้บรรลุประสิทธิภาพการดำเนินการที่ดีพอสมควร (ในคำอื่น ๆ "การแข่งขันด้านราคา") ซึ่งจำเป็นที่จะต้องไม่ปล่อยให้ CPU ตกหล่นเป็นสิบถึงหลายร้อยรอบเลยทีเดียว
โปรดทราบว่ากลยุทธ์การจัดการที่ใช้โดย EPIC (กล่าวถึงในบทความ Wikipedia ที่เชื่อมโยงด้านบน) ไม่ได้แก้ปัญหาจริง เพียงกล่าวว่าภาระในการระบุการพึ่งพาข้อมูลในขณะนี้ตรงกับคอมไพเลอร์ ไม่เป็นไร; คอมไพเลอร์มีข้อมูลนั้นอยู่แล้วดังนั้นจึงเป็นเรื่องง่ายสำหรับคอมไพเลอร์ที่จะปฏิบัติตาม ปัญหาคือ CPU ยังคงไม่ทำงานเป็นเวลานับสิบถึงหลายร้อยรอบต่อการเข้าถึงหน่วยความจำ กล่าวอีกนัยหนึ่งมันเป็นความรับผิดชอบรองนอกขณะที่ยังไม่สามารถรับมือกับความรับผิดชอบหลัก
คำถามนี้สามารถใช้ถ้อยคำใหม่ได้ว่า: "เนื่องจากแพลตฟอร์มฮาร์ดแวร์ที่กำหนดไว้ว่าจะล้มเหลวเพราะเหตุใด (1) ไม่ (2) ผู้เขียนคอมไพเลอร์ไม่สามารถใช้ความพยายามอย่างกล้าหาญเพื่อไถ่มันได้"
ฉันหวังว่าการเรียบเรียงใหม่ของฉันจะทำให้คำตอบของคำถามนั้นชัดเจน
มีแง่มุมที่สองของความล้มเหลวซึ่งเป็นอันตรายถึงชีวิต
กลยุทธ์การเผชิญปัญหา (กล่าวถึงในบทความเดียวกัน) ถือว่าการดึงข้อมูลล่วงหน้าโดยใช้ซอฟต์แวร์สามารถกู้คืนอย่างน้อยส่วนหนึ่งของการสูญเสียประสิทธิภาพเนื่องจากเวลาแฝงที่ไม่ได้กำหนดจากการเข้าถึงหน่วยความจำ
ในความเป็นจริงการดึงข้อมูลล่วงหน้านั้นให้ผลกำไรเฉพาะเมื่อคุณทำการสตรีมมิ่งเท่านั้น (การอ่านหน่วยความจำตามลำดับหรือคาดเดาได้สูง)
(กล่าวว่าหากรหัสของคุณเข้าถึงหน่วยความจำที่แปลเป็นภาษาท้องถิ่นบ่อยๆการแคชจะช่วยได้)
อย่างไรก็ตามซอฟต์แวร์ที่ใช้งานทั่วไปส่วนใหญ่จะต้องเข้าถึงหน่วยความจำแบบสุ่มมากมาย หากเราพิจารณาขั้นตอนต่อไปนี้:
- คำนวณที่อยู่แล้ว
- อ่านค่าแล้ว
- ใช้ในการคำนวณบางอย่าง
สำหรับซอฟต์แวร์ที่ใช้งานทั่วไปส่วนใหญ่จะต้องดำเนินการทั้งสามนี้อย่างต่อเนื่อง กล่าวอีกนัยหนึ่งมันเป็นไปไม่ได้เสมอไป (ภายในขอบเขตของตรรกะของซอฟต์แวร์) เพื่อคำนวณที่อยู่ล่วงหน้าหรือเพื่อหางานที่ต้องทำมากพอที่จะเติมแผงลอยระหว่างสามขั้นตอนเหล่านี้
เพื่อช่วยอธิบายว่าทำไมมันเป็นไปไม่ได้เสมอที่จะหางานทำมากพอที่จะเติมให้เต็มแผงนี่คือวิธีที่เราสามารถเห็นภาพ
- สมมติว่าเพื่อซ่อนแผงอย่างมีประสิทธิภาพเราจำเป็นต้องกรอกคำสั่ง 100 คำสั่งที่ไม่ได้ขึ้นอยู่กับหน่วยความจำ (ดังนั้นจะไม่ประสบความล่าช้าเพิ่มเติม)
- ตอนนี้ในฐานะโปรแกรมเมอร์โปรดโหลดซอฟต์แวร์ที่คุณเลือกลงในเครื่องถอดแยกชิ้นส่วน เลือกฟังก์ชั่นแบบสุ่มสำหรับการวิเคราะห์
- คุณสามารถระบุลำดับ 100 คำสั่ง (*) ที่เข้าถึงหน่วยความจำได้อย่างอิสระทุกที่หรือไม่?
(*) ถ้าเราสามารถทำให้NOP
งานมีประโยชน์ ...
ซีพียูสมัยใหม่พยายามที่จะรับมือกับสิ่งเดียวกันโดยใช้ข้อมูลแบบไดนามิก - โดยติดตามความคืบหน้าของแต่ละคำสั่งพร้อมกันขณะที่ไหลเวียนผ่านท่อ ดังที่ฉันได้กล่าวไปแล้วส่วนหนึ่งของข้อมูลแบบไดนามิกนั้นเกิดจากเวลาแฝงของหน่วยความจำที่ไม่สามารถกำหนดค่าได้ดังนั้นจึงไม่สามารถคาดการณ์ความถูกต้องในระดับใด ๆ ของคอมไพเลอร์ โดยทั่วไปมีข้อมูลไม่เพียงพอในการรวบรวมเพื่อทำการตัดสินใจที่อาจเติมแผงขายเหล่านั้น
เพื่อตอบสนองต่อคำตอบของ AProgrammer
ไม่ใช่ว่า "คอมไพเลอร์ ... การแตกความเท่าเทียมนั้นยาก"
การจัดเรียงหน่วยความจำและคำแนะนำการคำนวณทางคณิตศาสตร์โดยคอมไพเลอร์สมัยใหม่เป็นหลักฐานว่าไม่มีปัญหาในการระบุการดำเนินการที่เป็นอิสระและทำให้สามารถดำเนินการได้พร้อมกัน
ปัญหาหลักคือเวลาแฝงของหน่วยความจำที่ไม่ได้กำหนดไว้หมายความว่า "การจับคู่คำสั่ง" สิ่งใดสิ่งหนึ่งที่เข้ารหัสไว้สำหรับโปรเซสเซอร์ VLIW / EPIC จะจบลงด้วยการเข้าถึงหน่วยความจำ
คำแนะนำการปรับให้เหมาะสมที่ไม่ได้หยุดทำงาน (ลงทะเบียนเท่านั้น, เลขคณิต) จะไม่ช่วยแก้ไขปัญหาประสิทธิภาพที่เกิดจากคำแนะนำที่น่าจะหยุดทำงาน (การเข้าถึงหน่วยความจำ)
เป็นตัวอย่างของความล้มเหลวในการใช้กฎการเพิ่มประสิทธิภาพ 80-20: การเพิ่มประสิทธิภาพสิ่งที่เร็วแล้วจะไม่ปรับปรุงประสิทธิภาพโดยรวมอย่างมีความหมายเว้นแต่สิ่งที่ช้าลงจะถูกปรับให้เหมาะสม
ในการตอบสนองต่อคำตอบโดย Basile Starynkevitch
มันไม่ใช่ "... (อะไรก็ตาม) มันยาก" มันคือ EPIC นั้นไม่เหมาะสมสำหรับแพลตฟอร์มใด ๆ ที่ต้องรับมือกับพลวัตสูงในเวลาแฝง
ตัวอย่างเช่นหากโปรเซสเซอร์มีดังต่อไปนี้:
- ไม่มีการเข้าถึงหน่วยความจำโดยตรง
- การเข้าถึงหน่วยความจำ (อ่านหรือเขียน) ใด ๆ จะต้องถูกกำหนดโดยการถ่ายโอน DMA;
- ทุกคำสั่งมีเวลาแฝงในการเรียกใช้งานเหมือนกัน
- การดำเนินการตามลำดับ
- หน่วยประมวลผลแบบไวด์ / เวกเตอร์
จากนั้น VLIW / EPIC จะเป็นแบบที่ดี
ใครจะพบโปรเซสเซอร์ดังกล่าวที่ไหน DSP และนี่คือสิ่งที่ VLIW เจริญรุ่งเรือง
ในความเข้าใจย้อนหลังความล้มเหลวของ Itanium (และความพยายามในการวิจัยและพัฒนาอย่างต่อเนื่องในความล้มเหลวแม้จะมีหลักฐานที่ชัดเจน) เป็นตัวอย่างของความล้มเหลวขององค์กรและสมควรได้รับการศึกษาในเชิงลึก
ได้รับแล้วกิจการอื่น ๆ ของผู้ขายเช่น hyperthreading, SIMD เป็นต้นดูเหมือนจะประสบความสำเร็จอย่างสูง เป็นไปได้ว่าการลงทุนใน Itanium อาจมีผลกระทบอย่างมากต่อทักษะของวิศวกรซึ่งอาจทำให้พวกเขาสามารถสร้างเทคโนโลยีที่ประสบความสำเร็จรุ่นต่อไป