"การรวมหน่วยความจำ" คืออะไร?


16

ฉันรู้ว่าหน่วยประมวลผลกราฟิกมีบางสิ่งที่เรียกว่าการรวมหน่วยความจำ เมื่ออ่านมันฉันไม่ชัดเจนในหัวข้อ นี่เป็นวิธีใดที่เกี่ยวข้องกับ Memory Level Parallelism

ฉันค้นหาใน Google แล้ว แต่ไม่สามารถรับคำตอบที่น่าพอใจ

มันจะมีประโยชน์ถ้ามีคนให้คำอธิบายที่ครอบคลุมและเข้าใจง่ายกว่า


Memory-Level Parallelism (MLP) คือความสามารถในการทำธุรกรรมหน่วยความจำหลายรายการพร้อมกัน ในสถาปัตยกรรมจำนวนมากสิ่งนี้แสดงให้เห็นว่าตัวเองมีความสามารถในการดำเนินการทั้งการอ่านและการเขียนในครั้งเดียวแม้ว่ามันจะมีอยู่โดยทั่วไปว่าสามารถอ่านได้หลายครั้ง เป็นการยากที่จะทำการดำเนินการเขียนหลายครั้งพร้อมกันเนื่องจากความเสี่ยงของความขัดแย้งที่อาจเกิดขึ้น (พยายามเขียนค่าที่แตกต่างกันสองค่าไปยังตำแหน่งเดียวกัน) โปรดสังเกตว่าสิ่งนี้ไม่เหมือนกับการดำเนินการหน่วยความจำแบบเวกเตอร์เช่นการอ่าน 4 แยก แต่ค่า 8 บิตที่ต่อเนื่องกันในการอ่าน 32 บิตเดียว
Sai kiran grandhi

คำตอบ:


11

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

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

ดังนั้นการสร้างโปรแกรมที่สามารถใช้รูปแบบหน่วยความจำที่คาดเดาได้จึงมีความสำคัญ มันมีความสำคัญยิ่งกว่ากับโปรแกรมเธรดดังนั้นการร้องขอหน่วยความจำจะไม่ข้ามไปทั้งหมด มิฉะนั้นหน่วยประมวลผลจะรอการร้องขอหน่วยความจำที่จะปฏิบัติตาม

ไดอะแกรมที่ได้รับแรงบันดาลใจจากความรู้เบื้องต้นเกี่ยวกับการเขียนโปรแกรมแบบขนาน: บทเรียนที่ 2 ฮาร์ดแวร์ GPU และรูปแบบการสื่อสารแบบขนาน :

ด้านล่าง: สี่เธรดพร้อมการเข้าถึงหน่วยความจำแบบเดียวกัน สี่เหลี่ยมประสีดำแสดงถึงคำขอหน่วยความจำ 4 คำเดียว

ป้อนคำอธิบายรูปภาพที่นี่

การเข้าถึงหน่วยความจำใกล้เคียงและสามารถดึงได้ในหนึ่ง go / block (หรือจำนวนคำขอน้อยที่สุด)

อย่างไรก็ตามหากเราเพิ่ม " ก้าวย่าง " ของการเข้าถึงระหว่างเธรดมันจะต้องมีการเข้าถึงหน่วยความจำอีกมากมาย ด้านล่าง: อีกสี่เธรดพร้อมกับสองก้าว

4 เธรดรวมหน่วยความจำและ 4 เธรดพร้อมกับ stride 2

ที่นี่คุณจะเห็นว่า 4 เธรดเหล่านี้ต้องการการร้องขอบล็อกหน่วยความจำ 2 อัน ยิ่งก้าวเล็กลงเท่าไหร่ก็ยิ่งดีเท่านั้น ยิ่งก้าวย่างมากเท่าไหร่ก็ยิ่งต้องการการร้องขอมากเท่านั้น

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

แหล่ง TikZ:


2
หลายเธรดสามารถเข้าถึงไอเท็มข้อมูลเดียวกันได้ (ไม่ใช่แค่อิลิเมนต์ที่อยู่ในกลุ่มก้อนใหญ่กว่า) ซึ่งคล้ายกับการดำเนินการ SPLAT (แต่มีความหมายทั่วไปมากกว่า) ในสถาปัตยกรรม SIMD ในฐานะที่เป็นตัวประมวลผลที่ทนต่อความหน่วงแฝง GPU สามารถที่จะเพิ่มเวลาในการตอบสนองการเข้าถึงเมื่ออนุญาตให้ใช้แบนด์วิดท์ที่มีประสิทธิภาพเพิ่มขึ้น
Paul A. Clayton

ลิงก์ที่ให้มาเสียหาย
Daniel Soutar

3

ฉันคิดว่าฉันเห็นการใช้คำสองคำว่า "รวมตัวกัน" รอบ ๆ เน็ตทั้งที่เกี่ยวข้องกับความทรงจำ หนึ่งคือการรวมการจัดสรรหน่วยความจำที่ว่างซึ่งเป็นสิ่งที่อ้างถึงในหน้าวิกิพีเดียที่เชื่อมโยงในคำถาม


การรวมการจัดสรรหน่วยความจำที่ว่าง

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

เริ่มต้นด้วยการจัดสรร 4 บล็อก:

4 บล็อกที่จัดสรร

ต่อมาหนึ่งในนั้นเป็นอิสระ:

ตอนนี้ 1 บล็อกฟรี

และต่อมาก็มีคนอื่นปล่อย:

ตอนนี้ 2 บล็อกฟรีที่อยู่ติดกัน

ตอนนี้เหตุใดจึงมีบล็อกฟรีสองบล็อกติดกัน รวมตัวกัน:

การรวมบล็อกอิสระในขณะนี้มี 2 บล็อกที่ถูกจัดสรรและ 1 บล็อกเป็นอิสระ

การรวมกันสามารถเกิดขึ้นได้โดยเร็วที่สุดเท่าที่จะเป็นไปได้หรือตัวอย่างเช่นในตัวรวบรวมขยะเมื่อตัวรวบรวมทำงาน

แหล่ง TikZ:


ฉันคิดว่าคำตอบนี้ไม่เหมาะกับสิ่งที่ฉันต้องการ การรวมหน่วยความจำกำลังอ่านบล็อกหน่วยความจำต่อเนื่องตามที่คุณให้ไว้ในคำตอบอื่น ถ้าเป็นไปได้โปรดลบคำตอบนี้และลิงค์คำถามที่คุณแก้ไข
sai kiran grandhi

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