หนึ่งในชิ้นส่วนที่สำคัญของสถาปัตยกรรมใด ๆ คือหน่วย Load-Store ซึ่งมีหน้าที่ในการดำเนินการคำสั่งที่เกี่ยวข้องกับหน่วยความจำทั้ง ซีพียู และ GPU. หากคุณต้องการทราบว่าฟังก์ชันคืออะไรและหน่วยเหล่านี้ทำงานอย่างไรในวิธีที่ง่ายและเข้าถึงได้จากนั้นอ่านต่อไป
การสื่อสารของซีพียูกับหน่วยความจำเป็นสิ่งสำคัญที่ HardZone เราได้จัดทำบทความหลายบทความเพื่ออธิบายองค์ประกอบต่างๆและตอนนี้ก็ถึงจุดเปลี่ยนของหน่วย Load-Store ซึ่งมีความสำคัญและจำเป็นในสถาปัตยกรรมใด ๆ ทั้ง CPU และ GPU .
Load-Store units คืออะไร?
เป็นหน่วยประมวลผลใน CPU หน่วยการดำเนินการคือหน่วยที่ใช้ในการแก้ไขคำสั่งเมื่อได้รับการถอดรหัสแล้ว ขอให้เราจำไว้ว่ามีหน่วยประมวลผลประเภทอื่น ๆ :
- ALUs: เป็นหน่วยประเภทต่างๆที่รับผิดชอบในการดำเนินการทางคณิตศาสตร์ประเภทต่างๆ สามารถทำงานกับตัวเลขเดียวสตริงของตัวเลขหรือแม้กระทั่งในเมทริกซ์
- หน่วยกระโดด: หน่วยเหล่านี้ใช้คำแนะนำในการกระโดดในรหัสซึ่งการดำเนินการจะย้ายไปยังส่วนอื่นของหน่วยความจำ
ในทางกลับกันหน่วย Load / Store รับผิดชอบในการดำเนินการตามคำสั่งที่เกี่ยวข้องกับการเข้าถึงไฟล์ แรม หน่วยความจำของระบบไม่ว่าจะอ่านหรือเขียน ไม่มีหน่วย L / S แต่มีหน่วยสองประเภทที่ทำงานควบคู่กันและที่จัดการการเข้าถึงข้อมูล
คำอธิบายที่ง่ายที่สุดของการทำงานมีดังนี้: หน่วยโหลดทำหน้าที่จัดเก็บข้อมูลจากหน่วยความจำ RAM ไปยังรีจิสเตอร์และหน่วยร้านค้าจะทำในทิศทางตรงกันข้าม ในการทำงานพวกเขามีหน่วยความจำของตัวเองสำหรับหน่วยประเภทนี้ซึ่งพวกเขาเก็บคำร้องขอหน่วยความจำสำหรับแต่ละคำสั่ง
หน่วย Load-Store อยู่ที่ไหน?
สิ่งแรกที่เราคิดได้คือหน่วย Load / Store นั้นใกล้เคียงกับโปรเซสเซอร์มากที่สุด แต่ถึงแม้ว่าหน้าที่ของพวกเขาคือการย้ายข้อมูลจาก RAM ไปยังรีจิสเตอร์ แต่ก็ไม่สามารถเข้าถึง RAM ได้โดยตรง แต่กลไกอื่นที่เราได้พูดถึงไปแล้วใน:” นี่คือวิธีที่ CPU เข้าถึงหน่วยความจำ RAM อย่างรวดเร็ว ” อยู่ในความดูแลซึ่งเราพูดถึงการสื่อสารของอินเทอร์เฟซหน่วยความจำของซีพียูกับแรม
ในแนวคิดที่ง่ายที่สุดหน่วย Load / Store จะสื่อสารกับอินเทอร์เฟซที่สื่อสารโปรเซสเซอร์กับหน่วยความจำ RAM โดยเฉพาะกับการลงทะเบียน MAR และ MDR และเป็นหน่วยเดียวที่ได้รับอนุญาตให้จัดการกับการลงทะเบียนดังกล่าวรวมถึงการถ่ายโอนข้อมูล ไปยังการลงทะเบียนที่แตกต่างกันสำหรับการดำเนินการตามคำสั่งบางอย่าง
ดังนั้นหน่วย Load / Store จึงไม่ได้อยู่ในส่วนที่ใกล้กับหน่วยความจำมากที่สุด แต่จะอยู่กึ่งกลางระหว่างรีจิสเตอร์ของรีจิสเตอร์ของหน่วยประมวลผลที่แตกต่างกันและอินเตอร์เฟสหน่วยความจำที่ใช้ในทุกโปรเซสเซอร์ พบในปริมณฑล
การเพิ่มลำดับชั้นของแคช
แคชไม่ได้เป็นอะไรมากไปกว่าหน่วยความจำภายในไปยังโปรเซสเซอร์ที่คัดลอกข้อมูลที่ใกล้เคียงที่สุดกับที่ที่มีการเรียกใช้โค้ดในขณะนั้น แต่ละระดับใหม่ในลำดับชั้นมีความจุมากกว่า แต่ในขณะเดียวกันก็ช้าลงและมีเวลาแฝงที่สูงขึ้น ในทางกลับกันระดับแคชแต่ละระดับจะมีเพียงบางส่วนของระดับก่อนหน้าเท่านั้น แต่จะเร็วกว่าและมีเวลาแฝงที่ต่ำกว่า
ในซีพียูปัจจุบันทุกระดับจะมีข้อมูลเกี่ยวกับคำสั่งและข้อมูลในหน่วยความจำเดียวกันยกเว้นระดับเดียวซึ่งเป็นแคชระดับต่ำสุด ในกรณีที่มีแคชสำหรับคำแนะนำและอีกรายการสำหรับข้อมูล หน่วยโหลด / จัดเก็บไม่เคยโต้ตอบกับแคชคำสั่ง แต่มีแคชข้อมูล
เมื่อหน่วยโหลดภายในแต่ละเคอร์เนลต้องการข้อมูลสิ่งแรกที่พวกเขาทำคือ "ถาม" แคชข้อมูลว่ามีข้อมูลสำหรับที่อยู่หน่วยความจำที่แน่นอนหรือไม่ การดำเนินการเป็นแบบอ่านอย่างเดียวดังนั้นหากพบก็จะคัดลอกจากแคชไปยังรีจิสตรีที่เกี่ยวข้อง หากไม่พบในระดับแคชก็จะลดระดับลงไปทีละระดับ คิดว่าเป็นคนที่กำลังมองหาเอกสารในอาคารสำนักงานเสี้ยมซึ่งแต่ละระดับจะมีไฟล์ให้ค้นหามากขึ้น
ในทางกลับกันหน่วยร้านค้ามีความซับซ้อนกว่าเล็กน้อยพวกเขายังค้นหาที่อยู่หน่วยความจำในแคชด้วย แต่จากช่วงเวลาที่เราพูดถึงการแก้ไขข้อมูลที่มีอยู่ภายในนั้นจำเป็นที่จะต้องมีระบบการเชื่อมโยงกันที่เปลี่ยน อ้างอิงไปยังที่อยู่หน่วยความจำนั้นตลอดทั้งลำดับชั้นของแคชและใน RAM เอง
RISC = โหลดเก็บ?
เมื่อเราได้เรียนรู้แล้วว่าหน่วย Load / Store ทำอะไรเราจะต้องให้บริบททางประวัติศาสตร์แก่พวกเขาและนั่นคือไม่ใช่วิธีเดียวที่ CPU สามารถเข้าถึง RAM ของระบบเพื่อโหลดและจัดเก็บข้อมูลได้
แนวคิด Load-Store เกี่ยวข้องกับชุดของการลงทะเบียนและคำสั่งของประเภท RISC ซึ่งชุดคำสั่งจะลดลงและวิธีหนึ่งที่ทำได้คือแยกกระบวนการเข้าถึงหน่วยความจำของคำสั่งต่างๆในคำสั่งอื่นเช่น คำแนะนำหลายประการ พวกเขาจะมีกระบวนการเข้าถึงหน่วยความจำที่คล้ายกันซึ่งใช้หน่วย Load / Store เพื่อดำเนินการในส่วนนั้น
เราทราบผลที่ตามมาอยู่แล้วรหัสไบนารีของโปรแกรมสำหรับชุดคำสั่ง CISC จะมีไบนารีที่กะทัดรัดและเล็กกว่าในขณะที่หน่วย RISC มีขนาดใหญ่กว่า โปรดทราบว่าในยุคแรกของการคำนวณ RAM มีราคาแพงมากและหายากและเป็นสิ่งสำคัญที่จะต้องทำให้รหัสไบนารีมีขนาดเล็กที่สุดเท่าที่จะเป็นไปได้ ทุกวันนี้ซีพียู x86 ทั้งหมดเป็น Post-RISC เนื่องจากเมื่อถอดรหัสคำสั่ง x86 พวกเขาจะทำเช่นนั้นในชุดคำแนะนำขนาดเล็กที่อนุญาตให้ CPU ทำงานราวกับว่าเป็น RISC CPU
LSU บน GPU
ใช่ GPU ยังมีหน่วย Load / Store ซึ่งพบในหน่วยคำนวณและรับผิดชอบในการค้นหาข้อมูลที่ ALU ของสิ่งนี้ต้องดำเนินการ ต้องจำไว้ว่าหน่วยคำนวณจาก เอเอ็มดี, ชิ้นส่วนย่อยจาก อินเทล หรือสตรีมมัลติโปรเซสเซอร์จาก NVIDIA ในพื้นหลังเป็นสัญญาณบ่งชี้ที่แตกต่างกันสำหรับสิ่งเดียวกันแกน GPU ที่โปรแกรมของพวกเขาเรียกใช้เรียกว่าเฉดสี
ALU ที่แตกต่างกันของหน่วยคำนวณมักจะทำงานที่ระดับรีจิสเตอร์เกือบตลอดเวลาซึ่งหมายความว่าคำสั่งนั้นมาพร้อมกับข้อมูลเพื่อดำเนินการโดยตรง แต่คำสั่งบางอย่างอ้างถึงข้อมูลที่ไม่พบในรีจิสเตอร์ดังนั้นจึงจำเป็น เพื่อค้นหาผ่านแคช
ระบบค้นหาข้อมูลจะเหมือนกับในซีพียูอันดับแรกจะดูที่แคชข้อมูลของหน่วยประมวลผลแต่ละหน่วยและทำงานจนกว่าจะถึงจุดสิ้นสุดของลำดับชั้นของหน่วยความจำเท่าที่ GPU สามารถเข้าถึงได้ สิ่งนี้จำเป็นเมื่อเข้าถึงข้อมูลขนาดใหญ่เช่นแผนที่พื้นผิว
แก้ไขคุณลักษณะบน GPU และไดรฟ์ Load-Store
หน่วยบางหน่วยที่อยู่ในหน่วยคำนวณใช้ประโยชน์จากหน่วย Load-Store เพื่อสื่อสารกับ GPU หน่วยเหล่านี้ไม่ใช่ ALU แต่เป็นหน่วยอิสระของฟังก์ชันคงที่หรือตัวเร่งความเร็ว ปัจจุบันมีหน่วยสองประเภทที่ใช้ประโยชน์จากหน่วย Load / Store ใน GPU:
- หน่วยกรองพื้นผิว
- หน่วยที่รับผิดชอบในการคำนวณจุดตัดของรังสีใน Ray Tracing
เนื่องจากหน่วยเหล่านี้จำเป็นต้องเข้าถึงแคชข้อมูลเพื่อรับ ditto เป็นพารามิเตอร์อินพุตเพื่อทำหน้าที่ จำนวนหน่วยโหลด / ร้านค้าในหน่วยคำนวณเป็นตัวแปร แต่โดยปกติจะเท่ากับหรือมากกว่า 16 เนื่องจากเรามีหน่วยพื้นผิว 4 หน่วยที่ต้องการข้อมูล 4 หน่วยเพื่อดำเนินการตัวกรองทวิภาคี
ในทำนองเดียวกันข้อมูลของโหนดของต้นไม้ BVH จะถูกเก็บไว้ในระดับแคชที่แตกต่างกัน ในบางกรณีเช่น NVIDIA GPUs หน่วย Ray Tracing จะมี LSU ภายในที่อ่านจากแคช L0 ของ RT Core