Load-Store คำอธิบายและยูทิลิตี้ของหน่วยเหล่านี้ใน CPU และ GPU

โหลดร้านค้า

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

การสื่อสารของซีพียูกับหน่วยความจำเป็นสิ่งสำคัญที่ HardZone เราได้จัดทำบทความหลายบทความเพื่ออธิบายองค์ประกอบต่างๆและตอนนี้ก็ถึงจุดเปลี่ยนของหน่วย Load-Store ซึ่งมีความสำคัญและจำเป็นในสถาปัตยกรรมใด ๆ ทั้ง CPU และ GPU .

Load-Store units คืออะไร?

หน่วยเก็บโหลด

เป็นหน่วยประมวลผลใน CPU หน่วยการดำเนินการคือหน่วยที่ใช้ในการแก้ไขคำสั่งเมื่อได้รับการถอดรหัสแล้ว ขอให้เราจำไว้ว่ามีหน่วยประมวลผลประเภทอื่น ๆ :

  • ALUs: เป็นหน่วยประเภทต่างๆที่รับผิดชอบในการดำเนินการทางคณิตศาสตร์ประเภทต่างๆ สามารถทำงานกับตัวเลขเดียวสตริงของตัวเลขหรือแม้กระทั่งในเมทริกซ์
  • หน่วยกระโดด: หน่วยเหล่านี้ใช้คำแนะนำในการกระโดดในรหัสซึ่งการดำเนินการจะย้ายไปยังส่วนอื่นของหน่วยความจำ

ในทางกลับกันหน่วย Load / Store รับผิดชอบในการดำเนินการตามคำสั่งที่เกี่ยวข้องกับการเข้าถึงไฟล์ แรม หน่วยความจำของระบบไม่ว่าจะอ่านหรือเขียน ไม่มีหน่วย L / S แต่มีหน่วยสองประเภทที่ทำงานควบคู่กันและที่จัดการการเข้าถึงข้อมูล

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

หน่วย Load-Store อยู่ที่ไหน?

โหลดร้านค้าlocalización

สิ่งแรกที่เราคิดได้คือหน่วย Load / Store นั้นใกล้เคียงกับโปรเซสเซอร์มากที่สุด แต่ถึงแม้ว่าหน้าที่ของพวกเขาคือการย้ายข้อมูลจาก RAM ไปยังรีจิสเตอร์ แต่ก็ไม่สามารถเข้าถึง RAM ได้โดยตรง แต่กลไกอื่นที่เราได้พูดถึงไปแล้วใน:” นี่คือวิธีที่ CPU เข้าถึงหน่วยความจำ RAM อย่างรวดเร็ว ” อยู่ในความดูแลซึ่งเราพูดถึงการสื่อสารของอินเทอร์เฟซหน่วยความจำของซีพียูกับแรม

ในแนวคิดที่ง่ายที่สุดหน่วย Load / Store จะสื่อสารกับอินเทอร์เฟซที่สื่อสารโปรเซสเซอร์กับหน่วยความจำ RAM โดยเฉพาะกับการลงทะเบียน MAR และ MDR และเป็นหน่วยเดียวที่ได้รับอนุญาตให้จัดการกับการลงทะเบียนดังกล่าวรวมถึงการถ่ายโอนข้อมูล ไปยังการลงทะเบียนที่แตกต่างกันสำหรับการดำเนินการตามคำสั่งบางอย่าง

ดังนั้นหน่วย Load / Store จึงไม่ได้อยู่ในส่วนที่ใกล้กับหน่วยความจำมากที่สุด แต่จะอยู่กึ่งกลางระหว่างรีจิสเตอร์ของรีจิสเตอร์ของหน่วยประมวลผลที่แตกต่างกันและอินเตอร์เฟสหน่วยความจำที่ใช้ในทุกโปรเซสเซอร์ พบในปริมณฑล

การเพิ่มลำดับชั้นของแคช

ไพรเมอร์แคช nivel spllit

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

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

แคชข้อมูล LSU

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

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

RISC = โหลดเก็บ?

RISC เทียบกับ CISC

เมื่อเราได้เรียนรู้แล้วว่าหน่วย Load / Store ทำอะไรเราจะต้องให้บริบททางประวัติศาสตร์แก่พวกเขาและนั่นคือไม่ใช่วิธีเดียวที่ CPU สามารถเข้าถึง RAM ของระบบเพื่อโหลดและจัดเก็บข้อมูลได้

แนวคิด Load-Store เกี่ยวข้องกับชุดของการลงทะเบียนและคำสั่งของประเภท RISC ซึ่งชุดคำสั่งจะลดลงและวิธีหนึ่งที่ทำได้คือแยกกระบวนการเข้าถึงหน่วยความจำของคำสั่งต่างๆในคำสั่งอื่นเช่น คำแนะนำหลายประการ พวกเขาจะมีกระบวนการเข้าถึงหน่วยความจำที่คล้ายกันซึ่งใช้หน่วย Load / Store เพื่อดำเนินการในส่วนนั้น

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

LSU บน GPU

GPU ของ NVIDIA

ใช่ GPU ยังมีหน่วย Load / Store ซึ่งพบในหน่วยคำนวณและรับผิดชอบในการค้นหาข้อมูลที่ ALU ของสิ่งนี้ต้องดำเนินการ ต้องจำไว้ว่าหน่วยคำนวณจาก เอเอ็มดี, ชิ้นส่วนย่อยจาก อินเทล หรือสตรีมมัลติโปรเซสเซอร์จาก NVIDIA ในพื้นหลังเป็นสัญญาณบ่งชี้ที่แตกต่างกันสำหรับสิ่งเดียวกันแกน GPU ที่โปรแกรมของพวกเขาเรียกใช้เรียกว่าเฉดสี

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

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

แก้ไขคุณลักษณะบน GPU และไดรฟ์ Load-Store

Esquema SM NVIDIA ทัวริง

หน่วยบางหน่วยที่อยู่ในหน่วยคำนวณใช้ประโยชน์จากหน่วย Load-Store เพื่อสื่อสารกับ GPU หน่วยเหล่านี้ไม่ใช่ ALU แต่เป็นหน่วยอิสระของฟังก์ชันคงที่หรือตัวเร่งความเร็ว ปัจจุบันมีหน่วยสองประเภทที่ใช้ประโยชน์จากหน่วย Load / Store ใน GPU:

  • หน่วยกรองพื้นผิว
  • หน่วยที่รับผิดชอบในการคำนวณจุดตัดของรังสีใน Ray Tracing

เนื่องจากหน่วยเหล่านี้จำเป็นต้องเข้าถึงแคชข้อมูลเพื่อรับ ditto เป็นพารามิเตอร์อินพุตเพื่อทำหน้าที่ จำนวนหน่วยโหลด / ร้านค้าในหน่วยคำนวณเป็นตัวแปร แต่โดยปกติจะเท่ากับหรือมากกว่า 16 เนื่องจากเรามีหน่วยพื้นผิว 4 หน่วยที่ต้องการข้อมูล 4 หน่วยเพื่อดำเนินการตัวกรองทวิภาคี

ในทำนองเดียวกันข้อมูลของโหนดของต้นไม้ BVH จะถูกเก็บไว้ในระดับแคชที่แตกต่างกัน ในบางกรณีเช่น NVIDIA GPUs หน่วย Ray Tracing จะมี LSU ภายในที่อ่านจากแคช L0 ของ RT Core