การแปลจาก ISA หนึ่งไปยังอีก: จะทำผ่านฮาร์ดแวร์ได้อย่างไร

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

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

การแปลจาก ISA หนึ่งไปยังอีก

ซอฟต์แวร์สำหรับการแปลจาก ISA หนึ่งไปยังอีก

ซิสเทมาบินาริโอ

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

การจำลองฮาร์ดแวร์ที่ซอฟต์แวร์ตั้งใจให้ทำงาน

อิมูลาซิออน ตราสลาโด ISA

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

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

นั่นคือเหตุผลที่แม้ว่าพีซีจะเหนือกว่าคอนโซลวิดีโอเกมในทางเทคนิค แต่เราพบว่าต้องใช้เวลานานบางครั้งอาจนานกว่าทศวรรษเพื่อให้สามารถเลียนแบบเครื่องเล่นวิดีโอเกมที่เพิ่งเปิดตัวในตลาดได้อย่างถูกต้อง .

การแปลจาก ISA หนึ่งไปยังเส้นทางการรวบรวมอื่น

CompilaciónCódigo

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

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

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

ไบนารีไขมัน

ไบนารีไขมัน

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

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

ฮาร์ดแวร์สำหรับการแปลจาก ISA หนึ่งไปยังอีก

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

เป็นไปได้ไหมที่จะทำเช่นนี้? ใช่ แต่เพื่อให้เข้าใจว่าเป็นไปได้อย่างไรก่อนที่เราจะต้องเข้าใจแนวคิดพื้นฐานชุดหนึ่ง

CISC vs RISC สองวิธีในการออกแบบชุดคำสั่งของโปรเซสเซอร์

RISC เทียบกับ CISC

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

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

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

ความสำคัญของคำสั่งไมโคร

การสื่อสาร CPU

ในตอนท้ายของยุค 80 ตลาดถูกครอบงำโดยโปรเซสเซอร์สองตัวในอีกด้านหนึ่งคือ อินเทล x86 โดยที่ 80286 และ 80386 เป็นราชาและอีกอัน โมโตโรล่า 68000 ความพิเศษของทั้งสอง? พวกเขาเป็นโปรเซสเซอร์ CISC และการแบ่งกลุ่มเพื่อเพิ่มความเร็วเป็นเรื่องยาก

แต่การแบ่งส่วนคืออะไร? เป็นความจริงของการแบ่งการดำเนินการของคำสั่งออกเป็นหลายรอบนาฬิกาในลักษณะที่เมื่อคำสั่งอยู่ในขั้นตอนที่ n คำสั่งที่ตามมาจะอยู่ใน n-1 และคำสั่งก่อนหน้าในขั้นตอนที่ n + 1 แต่สิ่งนี้ทำให้พวกเขาสามารถเพิ่มความเร็วสัญญาณนาฬิกาได้มากในตอนแรกกลายเป็นปัญหาและพวกเขาเห็นว่า ISAs ที่สร้างขึ้นไม่สามารถปรับขนาดได้มากกว่านี้ไม่ว่าจะเป็น RISC หรือ CISC

ไมโครโคดิโกและไมโครอินทรัคซิโอเนส

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

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

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

ฮาร์ดแวร์ฟังก์ชันคงที่สำหรับการแปลตามเวลาจริงจาก ISA หนึ่งไปยังอีก

ฮาร์ดแวร์Traducción ISA ไดอะแกรม

ภาพด้านบนสอดคล้องกับสิทธิบัตรของ VIA Technologies ที่มีการแปลเป็นภาษาสเปนดังต่อไปนี้:

ไมโครโปรเซสเซอร์ที่ดำเนินการคำสั่งโปรแกรมสำหรับ ISA ARM และ ISA x86 ผ่านการแปลคำสั่งไมโครฮาร์ดแวร์ในไปป์ไลน์การดำเนินการทั่วไป

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

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

ปัญญาประดิษฐ์สำหรับการแปลคำสั่งแบบเรียลไทม์

ปัญญาประดิษฐ์

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

วิธีแก้ปัญหาเพื่อหลีกเลี่ยงอาการปวดหัวนี้คือการดึงปัญญาประดิษฐ์โดยอาศัยการฝึกอบรม AI เพื่อให้มันเรียนรู้รูปแบบในการแปล ISA หนึ่งไปเป็นอีก ISA โดยพื้นฐานแล้วจะไม่มีอะไรมากไปกว่าการฝึก AI ให้แปลภาษาที่เป็นธรรมชาติเป็นภาษาอื่น แต่นี่ โซลูชันเป็นโซลูชันแบบผสมมากกว่าเนื่องจากรวมการคอมไพล์หรือการจำลองโดยซอฟต์แวร์เข้ากับฮาร์ดแวร์สำหรับ AI ซึ่งจะเรียนรู้รูปแบบที่จะนำไปใช้ในการสร้างโค้ด

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