ทำไมโปรเซสเซอร์ Itanium จึงยากที่จะเขียนคอมไพเลอร์


50

โดยทั่วไประบุว่าสถาปัตยกรรม Itanium 64- บิตโปรเซสเซอร์ของ Intel ล้มเหลวเนื่องจากชุดคำสั่งการปฏิวัติEPICเป็นเรื่องยากมากในการเขียนคอมไพเลอร์ที่ดีซึ่งหมายถึงการขาดเครื่องมือสำหรับนักพัฒนาที่ดีสำหรับ IA64 ซึ่งหมายความว่าผู้พัฒนาโปรแกรมสร้างสถาปัตยกรรมขาด ดังนั้นจึงไม่มีใครต้องการใช้ฮาร์ดแวร์โดยไม่ต้องใช้ซอฟต์แวร์มากดังนั้นแพลตฟอร์มจึงล้มเหลวและทุกอย่างต้องการเล็บเกือกม้า คอมไพเลอร์ที่ดี

แต่ทำไมคอมไพเลอร์จึงเป็นปัญหาทางเทคนิคที่ยาก? สำหรับฉันแล้วดูเหมือนว่าหากการขนานอย่างชัดเจนใน EPIC นั้นเป็นเรื่องยากสำหรับผู้ขายคอมไพเลอร์ที่จะใช้ ... ทำไมต้องวางภาระนั้นไว้กับพวกเขาตั้งแต่แรก มันไม่ได้เป็นวิธีแก้ปัญหาที่ดีและเข้าใจกันดีในปัญหานี้ไม่ได้มีอยู่แล้ว: วางภาระให้กับ Intel แทนและให้เป้าหมายที่เรียบง่ายแก่นักเขียนคอมไพเลอร์

Itanium ออกมาในปี 1997 โดยจุดนี้ระบบรหัสไบต์UCSD P-Codeอายุเกือบ 20 ปีเครื่อง Zอายุน้อยกว่าเล็กน้อยและ JVM เป็นดาวรุ่งพุ่งแรงใหม่ในโลกของภาษาโปรแกรม มีเหตุผลใดบ้างที่ Intel ไม่ได้ระบุภาษา "Itanium bytecode แบบง่าย" และให้เครื่องมือที่แปลง bytecode นี้เป็นรหัส EPIC ที่ได้รับการปรับปรุงโดยใช้ประโยชน์จากความเชี่ยวชาญของพวกเขาในฐานะผู้ออกแบบระบบตั้งแต่แรก?


5
IRs ระดับต่ำจริงๆ (ที่ระบุไว้จริงนอกเหนือจากการอยู่ภายในคอมไพเลอร์เดียวและตั้งใจที่จะคอมไพล์ลงบนฮาร์ดแวร์เฉพาะแทนที่จะตีความแบบพกพา) เป็นสิ่งประดิษฐ์ AFAIK ที่ใหม่กว่า ไม่ได้หมายความว่าพวกเขาไม่มีตัวตน แต่ฉันคิดว่าความคิดนั้นไม่ชัดเจนหรือเป็นที่รู้จักมานานแล้ว ฉันหมายถึงคนส่วนใหญ่ยังคงเชื่อมโยง "bytecode" กับ "ล่าม"

4
การสันนิษฐานว่าสิ่งนี้ไม่เพียงแก้ไขปัญหา "สิ่งที่พวกเขาคิด" เป็นคำถามที่ดีทีเดียว
— Robert Harvey

ระบบ P คือสุนัขช้าเมื่อเทียบกับรหัสเครื่องดั้งเดิมที่สามารถทำได้ สำหรับสถาปัตยกรรมตัวประมวลผลในอนาคตกลยุทธ์ที่คุณอธิบายอาจดีในขณะนี้ JVM ได้แสดงให้เห็นว่า JIT สามารถบรรลุประสิทธิภาพของรหัสวัตถุประสงค์ทั่วไปที่สามารถแข่งขันกับรหัสเนทีฟได้ แต่ฉันไม่คิดว่าชัดเจนเมื่อ IA64 กำลังพัฒนา การทำให้สถาปัตยกรรมใหม่เร็วกว่าที่คาดการณ์ไว้ด้วย VM ที่ช้าอาจไม่ทำให้ผู้ซื้อมีความสุขมาก
— supercat

@supercat: ฉันไม่ได้พูดถึง VM สมมุติ แต่เกี่ยวกับ IR สมมุติที่จะรวบรวมส่วนที่เหลือของวิธีโดยตัวสร้างรหัส Intel
— Mason Wheeler

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

คำตอบ:


33

ตามที่ฉันจำได้ในตอนนี้ปัญหาไม่ใช่เฉพาะของ IA64 เท่านั้น แต่เป็นการแข่งขันกับชุดคำสั่ง x86-64 ของ AMD ด้วยการทำให้สถาปัตยกรรมของพวกเขาเข้ากันได้กับชุดคำสั่ง x86 ทำให้ AMD สามารถใช้เครื่องมือและชุดทักษะการพัฒนาที่มีอยู่ได้ การย้ายของเอเอ็มดีประสบความสำเร็จอย่างมากโดยที่ Intel (และ Via) ถูกบังคับให้นำสถาปัตยกรรม x86-64 มาใช้เป็นหลัก

อุปสรรคใหญ่ในเวลานั้นคือ RAM 4 GB บนเดสก์ท็อปพีซี (มากกว่า ~ 3.4GB ที่ใช้งานได้จริงบน Windows) x86-64 ทุบสิ่งกีดขวางนั้นและเปิดการคำนวณพลังงานที่สูงขึ้นสำหรับทุกคน หากเอเอ็มดีไม่เคยเกิดขึ้นกับ x86-64 ฉันมั่นใจว่า Intel ยินดีที่จะให้ทุกคนที่ต้องการข้ามไปที่ 4GB + RAM จ่ายเบี้ยประกันภัยที่หนักหน่วงเป็นเวลาหลายปีเพื่อรับสิทธิพิเศษนี้ แสดงให้เห็นว่าตลาดเคลื่อนไหวอย่างช้าๆอย่างไรจึงต้องใช้เวลาหลายปีกว่าที่แอพพลิเคชั่นจะจับการเขียนโปรแกรมแบบมัลติเธรดได้ถึง 64 บิตและถึงตอนนี้ RAM 4GB เป็นมาตรฐานสำหรับพีซีระดับล่าง

ในระยะสั้น Intel พยายามก้าวกระโดดปฏิวัติด้วยสถาปัตยกรรม IA64 และ AMD ทำขั้นตอนวิวัฒนาการกับ x86-64 ในตลาดที่จัดตั้งขึ้นขั้นตอนวิวัฒนาการที่อนุญาตให้พนักงานความรู้ใช้ประโยชน์จากทักษะที่มีอยู่จะชนะในขั้นตอนการปฏิวัติที่ต้องการให้ทุกคนเรียนรู้ทักษะใหม่ โดยไม่คำนึงถึงความแตกต่างเชิงคุณภาพระหว่างสถาปัตยกรรม IA64 ไม่สามารถเอาชนะโมเมนตัมของแพลตฟอร์ม x86 ของตนเองได้เมื่อเอเอ็มดีเพิ่มส่วนขยาย x86-64

ฉันไม่ซื้อคำอธิบายว่า IA64 นั้นยากเกินกว่าจะเขียนโปรแกรมได้ มันเป็นเรื่องยากเมื่อเทียบกับทางเลือก @ จุดของ delnan เกี่ยวกับ IR ระดับต่ำที่ถูกตีฉันไม่คิดว่ามันจะสร้างความแตกต่าง

ทำไม Intel ถึงไม่พยายามแบกภาระนั้นใครจะไปรู้? พวกเขาเป็นอำนาจของตลาดในเวลานั้น เอเอ็มดีเป็นสิ่งที่คุกคาม แต่ Intel เป็นราชาแห่งขุนเขา บางทีพวกเขาคิดว่า IA64 น่าจะดีกว่าสิ่งอื่นใดที่พวกเขาสามารถเคลื่อนไหวทั่วทั้งตลาด บางทีพวกเขากำลังพยายามทำระดับพรีเมี่ยมและออกจาก AMD, VIA และอื่น ๆ ในการต่อสู้ระดับที่สองบนฮาร์ดแวร์สินค้าโภคภัณฑ์ที่มีอัตรากำไรต่ำซึ่งเป็นกลยุทธ์ที่ทั้ง Intel และ Apple ใช้งานค่อนข้างประสบความสำเร็จ

Itanium เป็นความพยายามโดยเจตนาที่จะสร้างแพลตฟอร์มระดับพรีเมียมและดึงพรมออกจากภายใต้ AMD, VIA และอื่น ๆ หรือไม่? แน่นอนว่านั่นเป็นวิธีการทำงานของธุรกิจ


4
ทั้งหมดน่าสนใจมาก แต่คุณส่วนใหญ่อธิบายว่าทำไม Itanium ถึงล้มเหลวในขณะที่คำถามเกี่ยวกับกลยุทธ์ของ Intel ในการผลักดัน Itanium มีคำใบ้ใน "Intel ยินดีที่จะให้ทุกคน [... ]" แต่มันไม่ชัดเจนสำหรับฉันถ้าคุณบอกว่านี่เป็นการตัดสินใจโดย Intel (และถ้าเป็นเช่นนั้นสิ่งที่คุณต้องสนับสนุนคือ ยืนยัน)

2
จุดที่ดี ในฐานะอดีตนักเขียนคอมไพเลอร์มันเป็นความจริงที่ว่าสามารถนำคอมไพเลอร์ที่มีอยู่กลับมาแล้วปรับแต่งเพื่อประสิทธิภาพที่ดีกว่าการเขียนอีกครั้ง ย้อนกลับไป (และอาจจะตอนนี้ ... ไม่แน่ใจ) การเขียนคอมไพเลอร์แบ็คเอนด์เป็นสิ่งที่ทีม 4 หรือ 5 devs สามารถทำได้ในหนึ่งปี นั่นเป็นเรื่องยากที่จะแตกเมื่อไม่มีใครยอมรับฮาร์ดแวร์ เราเลือกในเวลานั้นแทนการสร้าง PowerPC ที่ด้านหลังเพื่อรองรับรสชาติของกล่อง Unix ที่ถูกสร้างขึ้นมา
— Chris Steele

@delnan จุดดีฉันได้เพิ่มความเห็นเพื่อตอบคำถามอื่น ๆ
— Robert Munn

2
โดยสังเขปมากขึ้น Intel ประเมินค่าความเฉื่อยจากผู้ที่ใส่แอกของความเข้ากันได้แบบย้อนกลับอย่างมากมาย AMD เอาชนะ Intel ในเกมของตัวเองโดยทำตามขั้นตอนวิวัฒนาการเดียวกันกับตระกูล x86 ที่ตระกูล x86 ทำจากตระกูล 8086/8088
— Blrfl

1
เอ่อ 80x86 รองรับการกำหนดแอดเดรสทางกายภาพ 36 บิต (หรือ จำกัด "ไม่มาก 64 GiB of RAM") ตั้งแต่เปิดตัว PAE และ PSE36 ในปี 1995 ปัญหาเกี่ยวกับ Windows รุ่นน้อยรองรับ PAE เนื่องจากไดรเวอร์อุปกรณ์ไม่เข้ากัน (แต่ บางคนทำ)
— เบรนแดน

33

บทความวิกิพีเดีย 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 อาจมีผลกระทบอย่างมากต่อทักษะของวิศวกรซึ่งอาจทำให้พวกเขาสามารถสร้างเทคโนโลยีที่ประสบความสำเร็จรุ่นต่อไป


7

TL; DR: 1 / มีแง่มุมอื่น ๆ ในความล้มเหลวของ Itanium มากกว่าปัญหาคอมไพเลอร์และพวกเขาอาจจะดีพอที่จะอธิบายได้ 2 / a รหัสไบต์จะไม่ได้แก้ไขปัญหาคอมไพเลอร์

โดยทั่วไประบุว่าสถาปัตยกรรม Itanium 64-bit processor ของ Intel ล้มเหลวเนื่องจากชุดคำสั่งการปฏิวัติ EPIC เป็นเรื่องยากมากในการเขียนคอมไพเลอร์ที่ดีสำหรับ

พวกเขายังมาสาย (วางแผนไว้ที่ 98 ส่งครั้งแรกในปี 2544) และเมื่อพวกเขาส่งมอบฮาร์ดแวร์ในที่สุดฉันไม่แน่ใจด้วยซ้ำว่าจะส่งมอบสิ่งที่สัญญาไว้สำหรับวันที่ก่อนหน้านี้ (IIRC อย่างน้อยพวกเขาก็ทิ้งส่วนหนึ่งของ x86 อีมูเลชั่นที่วางแผนไว้ในตอนแรก) ดังนั้นฉันจึงไม่แน่ใจว่าแม้ว่าปัญหาการรวบรวมจะได้รับการแก้ไข (และ AFAIK มันยังไม่เสร็จ) พวกเขาก็จะประสบความสำเร็จ คอมไพเลอร์ไม่ได้เป็นเพียงแง่มุมเดียวที่ท้าทายความสามารถมากเกินไป

มีเหตุผลใดบ้างที่ Intel ไม่ได้ระบุภาษา "Itanium bytecode แบบง่าย" และให้เครื่องมือที่แปลง bytecode นี้เป็นรหัส EPIC ที่ได้รับการปรับปรุงโดยใช้ประโยชน์จากความเชี่ยวชาญของพวกเขาในฐานะผู้ออกแบบระบบตั้งแต่แรก?

ฉันไม่แน่ใจว่าคุณวางเครื่องมือไว้ที่ใด

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

หากเป็นภายนอกการเริ่มต้นจากรหัสไบต์ทำให้ยิ่งยากกว่าการเริ่มต้นจากภาษาระดับสูงกว่า ปัญหาของ EPIC คือมันสามารถใช้ความเท่าเทียมกันเท่านั้นที่คอมไพเลอร์สามารถค้นหาได้และการแยกความขนานนั้นยาก การรู้กฎภาษาทำให้คุณมีความเป็นไปได้มากกว่าที่คุณจะถูก จำกัด โดยสิ่งที่กำหนดไว้แล้ว ของฉัน (ยอมรับไม่น่าเชื่อถือและจากคนที่ตามมาจากที่ไกล) ความทรงจำคือสิ่งที่ HP (*) และ Intel ล้มเหลวที่จะบรรลุในหน้าคอมไพเลอร์คือการสกัดระดับภาษาของความเท่าเทียมไม่ใช่ระดับต่ำซึ่งจะมีอยู่ในไบต์ รหัส.

คุณอาจประเมินค่าต่ำกว่าซึ่งโปรเซสเซอร์ปัจจุบันบรรลุประสิทธิภาพ OOO นั้นมีประสิทธิภาพมากกว่าความเป็นไปได้อื่น ๆ แต่ก็ไม่ได้มีประสิทธิภาพอย่างแน่นอน EPIC ต้องการใช้งบประมาณพื้นที่ที่ใช้โดยการดำเนินการ OOO เพื่อให้การคำนวณแบบดิบมากขึ้นโดยหวังว่าคอมไพเลอร์จะสามารถใช้ประโยชน์ได้ ดังที่เขียนไว้ด้านบนไม่เพียง แต่เรายังไม่สามารถ - ในฐานะ AFAIK แม้แต่ในทางทฤษฎี - ในการเขียนคอมไพเลอร์ที่มีความสามารถนั้น แต่ Itanium มีคุณสมบัติที่ยากต่อการใช้งานมากพอที่จะใช้งานได้ แม้แต่การแข่งขัน (ยกเว้นในตลาดเฉพาะบางแห่งที่มีการคำนวณ FP จำนวนมาก) กับตัวประมวลผลระดับไฮเอนด์อื่น ๆ เมื่อออกจาก fab


(*) คุณดูเหมือนจะประมาทบทบาทของ HP ใน EPIC


ฉันอัปเดตคำตอบเพื่อตอบข้อเรียกร้องของคุณ ในความคิดของฉันความล้มเหลวในการรับมือกับหน่วยความจำแฝงคือสาเหตุของการตายของสถาปัตยกรรม EPIC คอมไพเลอร์มีความสำเร็จที่ดีในการแยกความเท่าเทียมในระดับคำสั่งเช่นเดียวกับฮาร์ดแวร์ CPU ที่ทันสมัย
— ร

1
@rwong ฉันทำ TLDR ในสิ่งที่ฉันพิจารณาประเด็นหลักของฉัน BTW สำหรับฉันเวลาแฝงผันแปร - ระหว่างรุ่นข้อมูลขึ้นอยู่กับคำแนะนำในบางรุ่นการเข้าถึงหน่วยความจำเป็นหมวดหมู่ที่สำคัญที่เห็นได้ชัดว่านี่คือแง่มุมหนึ่งของความยากลำบากในการสกัดแบบขนาน ฮาร์ดแวร์ CPU มีข้อได้เปรียบของการจัดตารางเวลาแบบไดนามิกและฉันไม่คิดว่ามีตัวอย่างของตัวประมวลผลแบบคงที่ซึ่งแข่งขันกับประสิทธิภาพบริสุทธิ์สำหรับเธรดเดี่ยวกับ OOO ฉันไม่คิดว่าแม้แต่ทีมมิลล์ก็จะอ้างสิทธิ์นั้น (ปัจจัยความดีงามของพวกเขานั้นรวมถึงพลัง)
— AProgrammer

6

บางสิ่ง.

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

เครื่องอื่น ๆ ในเวลานั้นคือ UltraSPARC นั้นเป็นแบบตามลำดับ แต่ IPF ก็มีข้อควรพิจารณาอื่น ๆ เช่นกัน หนึ่งคือพื้นที่เข้ารหัส คำแนะนำของ Itanium นั้นไม่ได้มีความหนาแน่นสูงโดยเฉพาะอย่างยิ่งชุดบันเดิล 128 บิตมีการดำเนินการสามรายการและฟิลด์เทมเพลต 5 บิตซึ่งอธิบายการดำเนินการในชุดรวม สิ่งนี้ทำขึ้นเพื่อประสิทธิภาพการทำงานขนาด 42.6 บิต - เปรียบเทียบกับ 32 บิตสำหรับการดำเนินงาน RISCs ส่วนใหญ่ในเวลานั้น (นี่คือก่อนที่ Thumb2, et al - RISC ยังคงหมายถึงความแข็งแกร่งที่มีความยาวคงที่) ยิ่งแย่กว่านั้นคุณมี ILP ไม่เพียงพอที่จะพอดีกับเทมเพลตที่คุณใช้อยู่ - ดังนั้นคุณต้อง NOP-pad แม่แบบหรือมัด เมื่อรวมกับความหนาแน่นต่ำสัมพัทธ์ที่มีอยู่นั่นหมายความว่าการได้รับอัตราการเข้าชม i-cache ที่เหมาะสมนั้นเป็นสิ่งที่สำคัญจริงๆ)

ในขณะที่ฉันมักจะรู้สึกว่าอาร์กิวเมนต์ของ "คอมไพเลอร์เป็นปัญหาเดียวเท่านั้น" มีมากเกินไป - มีปัญหาทางไมโครสถาปัตยกรรมที่ถูกต้องตามกฎหมายที่ทำให้ I2 ไม่ได้รับประโยชน์จากรหัสทั่วไป - มันไม่สนุกโดยเฉพาะอย่างยิ่ง เพื่อให้เครื่องจักร OoO แคบลงและสูงขึ้นในแต่ละวัน เมื่อคุณสามารถเติมได้อย่างถูกต้องซึ่งมักจะเกี่ยวข้องกับ PGO หรือการเข้ารหัสด้วยมือมันทำได้ดีมาก แต่ใช้เวลานานมากประสิทธิภาพของคอมไพเลอร์ก็น่าเบื่อจริง ๆ IPF ไม่ได้ทำให้มันง่ายในการสร้างรหัสที่ยอดเยี่ยมและมันก็ไม่ได้เกิดขึ้นเมื่อโค้ดไม่ได้ยอดเยี่ยม


4

แต่ทำไมคอมไพเลอร์จึงเป็นปัญหาทางเทคนิคที่ยาก? สำหรับฉันแล้วดูเหมือนว่าหากการขนานอย่างชัดเจนใน EPIC นั้นเป็นเรื่องยากสำหรับผู้ขายคอมไพเลอร์ที่จะใช้ ... ทำไมต้องวางภาระนั้นไว้กับพวกเขาตั้งแต่แรก มันไม่ได้เป็นวิธีแก้ปัญหาที่ดีและเข้าใจกันดีในปัญหานี้ไม่ได้มีอยู่แล้ว: วางภาระให้กับ Intel แทนและให้เป้าหมายที่เรียบง่ายแก่นักเขียนคอมไพเลอร์

สิ่งที่คุณอธิบายเป็นสิ่งที่Transmetaพยายามทำกับซอฟต์แวร์ morphing code ของพวกเขา (ซึ่งแปล x86 "bytecode" เป็นแบบไดนามิกในรหัสเครื่อง Transmeta ภายใน)

ว่าทำไมไม่ Intel ล้มเหลวที่จะทำให้คอมไพเลอร์ที่ดีพอสำหรับ IA64 ... ผมคิดว่าเป็นสิ่งที่พวกเขาไม่ได้มีมากพอที่เชี่ยวชาญคอมไพเลอร์ในบ้าน (แม้ว่าแน่นอนพวกเขามีบางผู้เชี่ยวชาญคอมไพเลอร์ที่ดีมากภายใน แต่อาจไม่เพียงพอที่จะ สร้างมวลวิกฤต ฉันเดาว่าผู้บริหารประเมินความพยายามต่ำเกินไปในการสร้างคอมไพเลอร์

AFAIK, Intel EPIC ล้มเหลวเนื่องจากการคอมไพล์สำหรับ EPIC นั้นยากมากและเมื่อเทคโนโลยีคอมไพเลอร์ช้าลงและค่อย ๆ ดีขึ้นคู่แข่งรายอื่น ๆ ที่สามารถปรับปรุงคอมไพเลอร์ของพวกเขา (เช่นสำหรับ AMD64) แบ่งปันความรู้คอมไพเลอร์

BTW ฉันหวังว่า AMD64 จะเป็นชุดคำสั่ง RISCy มากกว่านี้ อาจเป็นPOWERPC64บางส่วน(แต่อาจไม่ใช่เพราะปัญหาสิทธิบัตรเนื่องจาก Microsoft มีความต้องการในเวลานั้น ฯลฯ ... ) สถาปัตยกรรมชุดคำสั่ง x86-64 ไม่ใช่สถาปัตยกรรม "ดีมาก" สำหรับนักเขียนคอมไพเลอร์ (แต่ก็เป็น "ดีพอ")

สถาปัตยกรรม IA64 ได้สร้างข้อ จำกัด ที่แข็งแกร่งเช่น 3 คำแนะนำ / คำได้ดีตราบใดที่หน่วยประมวลผลมีหน่วยการทำงาน 3 หน่วยในการประมวลผล แต่เมื่อ Intel ไปถึงชิป IA64 รุ่นใหม่พวกเขาจะเพิ่มหน่วยการทำงานที่มากขึ้น ระดับขนานเป็นอีกครั้งที่ยากที่จะบรรลุ

บางทีRISC-V (ซึ่งเป็นโอเพ่นซอร์ส ISA) จะค่อยๆประสบความสำเร็จพอที่จะทำให้มันแข่งขันกับโปรเซสเซอร์อื่น ๆ


Intel ใช้เงินไปกับการวิจัยและพัฒนานับพันล้านครั้งฉันเชื่อว่าพวกเขาจะต้องลำบากในการพัฒนาคอมไพเลอร์ที่ดีสำหรับแพลตฟอร์มฮาร์ดแวร์ใหม่

1
เงินไม่ใช่ทุกอย่าง: ดูคนที่เดือนตำนาน , ไม่มี bullet เงินและพิจารณายังเวลาในการตลาดที่มีความสำคัญมาก
— Basile Starynkevitch

3
พวกเขาจ้างวิศวกรที่มีความสามารถและนักวิทยาศาสตร์คอมพิวเตอร์จำนวนมาก คอมไพเลอร์ที่ไม่ใช่ VLIW ของพวกเขานั้นยอดเยี่ยมที่สุดโดยจะทำการปั๊มโค้ดได้เร็วกว่าคอมไพเลอร์ตัวอื่น ๆ Intel น่าจะเป็นบริษัทเดียวที่มีความเชี่ยวชาญด้านคอมไพเลอร์มากกว่า บริษัท อื่น Intel ประสบความสำเร็จในทุกสิ่งที่พวกเขาทำ: ทำไม Itanium จึงเป็นอัลบาทรอส

1
อาจเป็นจริงน้อยลงเล็กน้อยในปี 1997 และอย่างที่หลายคนอธิบายไว้การรวบรวม EPIC นั้นยากจริงๆ
— Basile Starynkevitch

3

ดังที่โรเบิร์ตมันน์ชี้ให้เห็น - มันเป็นการขาดความเข้ากันได้แบบย้อนหลังที่ฆ่า Itanium (และเทคโนโลยี "ใหม่" อื่น ๆ อีกมากมาย)

ในขณะที่เขียนคอมไพเลอร์ใหม่อาจเป็นเรื่องยากที่คุณต้องการเพียงไม่กี่คน AC คอมไพเลอร์ซึ่งสร้างรหัสที่ปรับให้เหมาะสมเป็นสิ่งจำเป็น - มิฉะนั้นคุณจะไม่มีระบบปฏิบัติการที่ใช้งานได้ คุณต้องการคอมไพเลอร์ C ++, Java และระบุว่าฐานผู้ใช้หลักคือ Windows ประเภทหนึ่งของ Visual Basic ดังนั้นนี่ไม่ใช่ปัญหาจริงๆ มีระบบปฏิบัติการที่ดี (NT) และคอมไพเลอร์ C ที่ใช้ได้

สิ่งที่ดูเหมือนจะเป็นความพยายามเล็กน้อยสำหรับ บริษัท ที่เสนอผลิตภัณฑ์ซอฟต์แวร์ - ทำการคอมไพล์ใหม่และทดสอบซ้ำรหัสฐาน C ของคุณ (และในเวลานั้นส่วนใหญ่จะเขียนด้วย C บริสุทธิ์!) ไม่ใช่เรื่องง่าย การแปลงชุดโปรแกรม C ขนาดใหญ่ซึ่งสันนิษฐานว่าเป็นจำนวนเต็ม 32 บิตและสันนิษฐานว่าเป็นบิตที่อยู่ 32 บิตกับสถาปัตยกรรม 64 บิตแบบเดิมเต็มไปด้วยข้อผิดพลาด หากว่า IA64 กลายเป็นชิปเด่น (หรือแม้แต่ชิปยอดนิยม!) บริษัท ซอฟต์แวร์ส่วนใหญ่ก็จะกัดกระสุนและพยายาม

ชิปที่เร็วด้วยระบบปฏิบัติการที่สมเหตุสมผล แต่มีชุดซอฟต์แวร์ที่ จำกัด มากดังนั้นจึงมีคนไม่มากที่ซื้อมันดังนั้น บริษัท ซอฟต์แวร์หลายแห่งจึงไม่ได้จัดหาผลิตภัณฑ์ให้


3

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

การออกจากการเพิ่มประสิทธิภาพให้กับคอมไพเลอร์เป็นความคิดที่ดี มีหลายสิ่งที่สามารถทำได้คงที่ไม่เช่นนั้นจะไม่มีประสิทธิภาพในฮาร์ดแวร์ คอมไพเลอร์ก็ค่อนข้างดีโดยเฉพาะอย่างยิ่งเมื่อใช้การทำโปรไฟล์ PGO (ฉันทำงานที่ HP และคอมไพเลอร์ของ HP มีแนวโน้มที่จะดีกว่าของ Intel) PGO นั้นขายยาก แต่มันเป็นกระบวนการที่ยากสำหรับรหัสการผลิต

IPF นั้นหมายถึงว่าสามารถใช้งานร่วมกันได้ แต่เมื่อ AMD64 เปิดตัวมันก็กลายเป็นข้อสงสัยการต่อสู้ก็หายไปและฉันเชื่อว่าฮาร์ดแวร์ X86 ในซีพียูนั้นเพิ่งถูกปล้นใหม่เพื่อเป็นเซิร์ฟเวอร์ซีพียู Itanium ในฐานะสถาปัตยกรรมไม่เลวการเรียนการสอน 3 คำต่อคำนั้นไม่เป็นปัญหา สิ่งที่เป็นปัญหาคือการนำ Hyper-Threading ไปใช้โดยการแลกเปลี่ยนสแต็คระหว่างหน่วยความจำ IO ช้าเกินไป (การล้างข้อมูลและโหลดไพพ์ไลน์) จนกระทั่ง Montecito เป็นต้นซึ่งทำให้ไม่สามารถแข่งขันกับ PowerPC CPU ที่ล้าสมัยได้ คอมไพเลอร์ต้องแก้ไขข้อบกพร่องของการใช้งานซีพียูที่ล่าช้าเพื่อตรวจจับและประสิทธิภาพการทำงานบางส่วนได้สูญเสียไปเพื่อคาดการณ์ข้อผิดพลาด

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

แพลตฟอร์ม IPF วางเดิมพันบนคอมไพเลอร์และเครื่องมือและเป็นสถาปัตยกรรมแรกที่เปิดเผยการออกแบบ Performance Monitoring Unit (PMU) ที่สมบูรณ์และทรงพลังซึ่งต่อมาได้รับการส่งกลับมายัง Intel x86 นักพัฒนาเครื่องมือที่มีประสิทธิภาพยังไม่ได้ใช้เพื่อความสามารถเต็มรูปแบบของรหัสโปรไฟล์

หากคุณดูที่ความสำเร็จของ ISA นั้นมักไม่ใช่ด้านเทคนิคที่ทอยลูกเต๋า มันเป็นสถานที่ในเวลาและกลไกตลาด ดู SGI Mips, DEC Alpha ... Itanium ได้รับการสนับสนุนจากเซิร์ฟเวอร์เซิร์ฟเวอร์ SGI & HP บริษัท ที่มีการจัดการที่ทำข้อผิดพลาดทางธุรกิจเชิงกลยุทธ์ ไมโครซอฟท์ไม่เคยเข้าร่วมเต็มรูปแบบและยอมรับ AMD64 ที่ไม่ได้รับการบรรจุในกล่องโดยมีเพียง Intel ในฐานะผู้เล่นและ Intel ไม่ได้เล่นกับ AMD เพื่อให้พวกเขามีวิธีการใช้ชีวิตในระบบนิเวศ

หากคุณดูว่าเราอยู่ที่ไหนในวันนี้ฮาร์ดแวร์ที่ซับซ้อนของ X86 ได้นำไปสู่วิวัฒนาการที่ไม่สิ้นสุด เราติดอยู่ที่ 3 + GHz และทิ้งคอร์โดยใช้ไม่เพียงพอ การออกแบบที่เรียบง่ายของ Itanium จะเพิ่มสิ่งต่าง ๆ บนคอมไพเลอร์ (ห้องสำหรับการเติบโต) ทำให้สามารถสร้างท่อที่บางและรวดเร็วกว่า ในรุ่นเดียวกันและเทคโนโลยี fab มันจะทำงานได้เร็วขึ้นและต่อยอดเหมือนกันทั้งหมด แต่สูงกว่าเล็กน้อยโดยอาจมีประตูอื่นเปิดให้ผลักดันกฎของมัวร์

อย่างน้อยข้างต้นคือความเชื่อของฉัน :)


1

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

ตัวอย่างเช่นมีคุณลักษณะการวนซ้ำที่การวนซ้ำหนึ่งรอบจะทำงานกับการลงทะเบียนจากการวนซ้ำที่แตกต่างกัน x86 จัดการปัญหาเดียวกันผ่านความสามารถในการสั่งซื้อจำนวนมาก

ในเวลานั้น Java และ JVM อยู่ในช่วงแฟชั่น สิ่งที่ IBM กล่าวก็คือด้วย PowerPC คุณสามารถรวบรวม bytecode ได้อย่างรวดเร็วและ CPU จะทำให้เร็วขึ้น ไม่ได้อยู่ใน Itanium

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