คำตอบสำหรับคำถามเกี่ยวกับ StackOverflow เกี่ยวกับความหมายของการธนาคารในบริบทของการลงทะเบียนของ ARM แสดงให้เห็นว่ามีความสับสนเกี่ยวกับความหมายของการธนาคารเมื่อนำไปใช้กับการลงทะเบียน
ธนาคารหมายถึงอะไรเกี่ยวกับการลงทะเบียน
คำตอบสำหรับคำถามเกี่ยวกับ StackOverflow เกี่ยวกับความหมายของการธนาคารในบริบทของการลงทะเบียนของ ARM แสดงให้เห็นว่ามีความสับสนเกี่ยวกับความหมายของการธนาคารเมื่อนำไปใช้กับการลงทะเบียน
ธนาคารหมายถึงอะไรเกี่ยวกับการลงทะเบียน
คำตอบ:
คำว่าธนาคารใช้ในความรู้สึกที่แตกต่างกันสองเมื่อนำไปใช้กับการลงทะเบียน
ความรู้สึกที่คำถาม StackOverflow เป็นห่วงจะคล้ายกับการใช้งานใน (หน่วยความจำ) ธนาคารสลับ (ใช้โดยบางส่วน 8 บิตและ 16 บิตโปรเซสเซอร์) ในฟังก์ชั่น ชื่อของคอลเล็กชันของรีจิสเตอร์ถูกแม็พกับคอลเล็กชันของรีจิสเตอร์ทางกายภาพที่แตกต่างกัน ARMv7 จัดหาธนาคารพิเศษหนึ่งแห่งสำหรับ 7 ใน 16 GPR และอีกห้าธนาคารสำหรับ stack pointer register และ link register (ARM ใช้ link register เพื่อบันทึกพีซีที่จะใช้เพื่อกลับจากการขัดจังหวะ) Itanium จัดหาธนาคารเพิ่มหนึ่งธนาคารสำหรับ 16 GPR คงที่ 31 แห่ง (MIPS ให้ทั้งชุดของ 31 GPRs เรียกพวกเขาว่า "ชุดลงทะเบียนเงา")
ซึ่งแตกต่างจากการสลับหน่วยความจำของธนาคารจุดประสงค์หลักของการลงทะเบียนประเภทนี้คือ (โดยทั่วไป) เพื่อไม่ให้ขยายที่เก็บข้อมูลแอดเดรส แต่เพื่อให้การจัดการขัดจังหวะเร็วขึ้นโดยหลีกเลี่ยงความจำเป็นในการบันทึกค่าลงทะเบียนค่าโหลดที่ใช้โดยตัวจัดการขัดจังหวะ ลงทะเบียนค่าและเพื่อให้การจัดการขัดจังหวะง่ายขึ้น
(การใช้สแต็กของแอปพลิเคชันเพื่อบันทึกสถานะการลงทะเบียนจะเปิดความเป็นไปได้ของการล้นหน่วยความจำที่จัดสรรสำหรับสแต็กนี้ซึ่งสร้างข้อยกเว้นซึ่งจะต้องจัดการกับการบันทึกสถานะอย่างใดยิ่งแย่กว่านั้น สิทธิ์ที่เพิ่มขึ้นของตัวจัดการขัดจังหวะ แต่ไม่ใช่โดยแอปพลิเคชันดังนั้นแอปพลิเคชันจะเขียนไปยังหน้าที่ไม่ได้รับอนุญาตให้เขียนได้อย่างมีประสิทธิภาพ ABIs บางคนหลีกเลี่ยงปัญหานี้โดยการกำหนดหนึ่งทะเบียนหรือมากกว่านั้น ตัวจัดการเพื่อโหลดตัวชี้สำหรับการบันทึกสถานะโดยไม่มีการปิดกั้นแอปพลิเคชันของรัฐ แต่ไม่เหมือนกับรีจิสเตอร์ที่ลงทะเบียนแบ๊งค์ซอฟต์แวร์ที่ถูกกำหนดอินเทอร์รัปต์ซึ่งไม่สามารถเชื่อถือได้ว่าจะไม่เปลี่ยนแปลง
(การใช้ธนาคารรีจิสเตอร์เช่นเดียวกับหน้าต่างคงที่ได้ถูกเสนอเพื่อขยายจำนวนของรีจิสเตอร์ที่มีอยู่เช่น "การเพิ่มจำนวนการลงทะเบียนที่มีประสิทธิภาพในโปรเซสเซอร์พลังงานต่ำโดยใช้ไฟล์ลงทะเบียนแบบหน้าต่าง", Rajiv A. Ravindran et al., 2003 หนึ่งอาจสังเกตเห็นความคล้ายคลึงกันในการลงทะเบียน stack ที่ใช้เพื่อหลีกเลี่ยง register register และ restore overhead สำหรับการเรียกใช้ฟังก์ชั่นเหมือนใน Itanium และ SPARC [ซึ่งใช้คำว่า "register windows"] แม้ว่ากลไกเหล่านี้มักจะเปลี่ยนชื่อลงทะเบียน ออก.)
ในแง่ของฮาร์ดแวร์สามารถทำการลงทะเบียนธนาคารได้โดยการเปลี่ยนชื่อรีจิสเตอร์ในการถอดรหัสคำสั่ง สำหรับระบบธนาคารที่ค่อนข้างซับซ้อนของ ARM นี่น่าจะเป็นกลไกที่ต้องการ สำหรับระบบธนาคารที่ง่ายกว่าเช่นที่ใช้โดย Itanium กับธนาคารเพิ่มพิเศษเพียงหนึ่งเดียวที่มีกำลังการลงทะเบียนสองจำนวนมันอาจเป็นประโยชน์ในการรวมการเปลี่ยนชื่อในการจัดทำดัชนีของไฟล์ register เอง (แน่นอนว่าสิ่งนี้จะไม่สามารถใช้งานร่วมกับการเปลี่ยนชื่อบางรูปแบบที่ใช้เพื่อสนับสนุนการดำเนินการที่ไม่เป็นไปตามคำสั่ง)
ด้วยการรับรู้ว่าธนาคารต่าง ๆ ไม่สามารถเข้าถึงได้ในเวลาเดียวกันการเพิ่มประสิทธิภาพที่ชาญฉลาดโดยใช้กลไกนี้สามารถลดค่าใช้จ่ายในพื้นที่ (จำกัด ลวด) ของไฟล์ลงทะเบียนที่มีพอร์ตสูงโดยใช้ "3D register" (เทคนิคนี้เสนอในบริบทของหน้าต่างลงทะเบียนของ SPARC - "ไฟล์ลงทะเบียนสามมิติสำหรับโปรเซสเซอร์ Superscalar", Tremblay และคณะ, 1995 - และตัวแปรถูกใช้โดย Intel สำหรับ SoEMT - "มัลติเธรดที่ได้รับการปกป้อง ไฟล์ลงทะเบียน 128 คำในโปรเซสเซอร์ Dual-Core Itanium-Family ", Fetzer และคณะ, 2005)
ความหมายที่สองที่คำว่าธนาคารใช้สำหรับการลงทะเบียนหมายถึงการแยกชุดของการลงทะเบียนออกเป็นกลุ่ม (ธนาคาร) ซึ่งแต่ละบัญชีสามารถเข้าถึงได้ในแบบคู่ขนาน การใช้สี่ธนาคารเพิ่มจำนวนการเข้าถึงสูงสุดที่รองรับโดยปัจจัยสี่ประการทำให้แต่ละธนาคารสามารถรองรับพอร์ตการเข้าถึงน้อยลง (ลดพื้นที่และการใช้พลังงาน) สำหรับจำนวนการเข้าถึงที่กำหนด อย่างไรก็ตามการเข้าถึงในรอบที่กำหนดจะไม่ได้รับการกระจายอย่างเท่าเทียมกันทั่วทั้งธนาคารจำนวนการเข้าถึงสูงสุดจะไม่สามารถทำได้ แม้ว่าจะมีธนาคารจำนวนมากเมื่อเทียบกับจำนวนการเข้าถึงที่ต้องการความขัดแย้งของธนาคารในกรณีที่เลวร้ายที่สุดสามารถ จำกัด จำนวนการเข้าถึงจริงตามจำนวนพอร์ตที่จัดทำโดยธนาคารเดียว
มีเอกสารทางวิชาการมากมายเกี่ยวกับไฟล์ทะเบียนธนาคาร (การค้นหาโดย Google Scholar) และมีการนำเสนอเทคนิคทั่วไปหลายอย่างเพื่อลดผลกระทบจากความขัดแย้งของธนาคาร เทคนิคที่ชัดเจนที่สุดคือการบัฟเฟอร์คำสั่ง (เช่นเดียวกับการดำเนินการที่ไม่เป็นไปตามคำสั่ง) ซึ่งให้ค่าเฉลี่ยทางสถิติของความขัดแย้งของธนาคาร นอกจากนี้ยังเป็นไปได้ที่จะอ่านตัวถูกดำเนินการลงทะเบียนก่อนคำสั่งพร้อมที่จะดำเนินการ (เช่นถ้าตัวถูกดำเนินการอื่นยังไม่พร้อมหรืออันตรายจากโครงสร้างทำให้การดำเนินการล่าช้า) การจัดสรรการลงทะเบียนไปยังธนาคารสามารถใช้ประโยชน์จากข้อมูลเกี่ยวกับการใช้ที่คาดหวังเพื่อลดโอกาสของความขัดแย้ง (ซอฟต์แวร์สามารถให้ความช่วยเหลือโดยใช้การลงทะเบียนในลักษณะที่คาดไว้) การใช้ชื่อฟิสิคัลเสมือนจะสามารถหน่วงเวลาการจัดสรรชื่อฟิสิคัลเรจิสเตอร์
ธนาคารประเภทนี้บางครั้งเรียกว่าการหลอกหลายทางเนื่องจากเป็นการให้ภาพลวงตาของพอร์ตการเข้าถึงจำนวนมาก เทคนิคนี้มักใช้สำหรับแคชเนื่องจากโครงสร้างทางกายภาพมักจะแบ่งพาร์ติชันเป็นอาร์เรย์หน่วยความจำแยกต่างหากด้วยเหตุผลอื่น
(ทางเลือกหนึ่งของธนาคารดังกล่าวคือการทำซ้ำไฟล์รีจิสเตอร์การใช้ไฟล์ลงทะเบียนสองชุดจะอนุญาตให้แต่ละสำเนาต้องการครึ่งพอร์ตอ่านมากถึงแม้ว่าจำเป็นต้องมีพอร์ตการเขียนจำนวนเท่ากันเทคนิคนี้ใช้ใน POWER2 และ Alpha 21264 และใช้กันทั่วไปในโปรเซสเซอร์ประสิทธิภาพสูง)
มันอาจเป็นประโยชน์ในการแยกความแตกต่างของธนาคารทั้งสองประเภทนี้ว่าเป็นธนาคารชั่วคราวที่การเลือกธนาคารกระจายไปตามกาลเวลา (เช่นการลงทะเบียนของ ARM สำหรับการขัดจังหวะอย่างรวดเร็ว) และธนาคารเชิงพื้นที่ที่การเข้าถึงธนาคารสามารถเกิดขึ้นพร้อมกัน
โดยทั่วไปแล้วธนาคารชั่วคราวจะมีซอฟต์แวร์และใช้เพื่อลดค่าใช้จ่าย (และความซับซ้อน) ของการขัดจังหวะ (แนวคิดการสลับเธรดในตัวประมวลผล Switch-on-Event-MultiThreaded คล้ายกับการจัดการขัดจังหวะและสามารถใช้กลไกที่คล้ายกันเพื่อลดค่าใช้จ่าย)
Spatial banking เป็นส่วนหนึ่งของ ISA น้อยกว่า (แม้ว่า Itanium ต้องการโหลดและจัดเก็บคู่ทะเบียนเลขทศนิยมเพื่อใช้คู่และเลขทะเบียนคี่ - ซึ่งไม่รับประกันว่าจะใช้การหมุนลงทะเบียน - อนุญาตให้สองธนาคารออกแบบเล็กน้อยเพื่อให้พิเศษ ข้อกำหนดการเข้าถึงไฟล์รีจิสเตอร์) และใช้เพื่อลดค่าใช้จ่ายในการจัดเตรียมการเข้าถึงรีจิสเตอร์จำนวนมากต่อรอบ