ธุรกรรมหน่วยความจำคืออะไร
บรรทัดแคชและเซกเมนต์ขนาด 32/128 ไบต์
ธุรกรรมหน่วยความจำคืออะไร เป็นบทเรียน CUDA Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน CUDA Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส CUDA Academy มีบทเรียนทั้งหมด 4 บทเรียน
หน่วยความจำมาเป็นชุด
GPU จะไม่ดึงข้อมูลทีละไบต์โดยลำพัง แต่จะย้ายหน่วยความจำเป็นบล็อกขนาดคงที่ที่เรียกว่าธุรกรรมหน่วยความจำ แม้ว่าคุณจะขอเพียงค่าเดียวก็ตาม
วาร์ปส่งคำขอพร้อมกัน
วาร์ปที่มี 32 เธรดจะส่งคำขอโหลดพร้อมกัน ฮาร์ดแวร์จะรวบรวมคำขอทั้ง 32 รายการและพยายามให้บริการด้วยจำนวนธุรกรรมน้อยที่สุด
บรรทัดแคชและเซกเมนต์
หน่วยความจำส่วนกลางถูกแบ่งเป็นเซกเมนต์ที่จัดแนวไว้ โดยทั่วไปมีขนาด 32 หรือ 128 ไบต์ แต่ละธุรกรรมจะดึงเซกเมนต์ทั้งหมดหนึ่งเซกเมนต์ ไม่เคยดึงเพียงบางส่วน
เหตุใด 128 ไบต์จึงสำคัญ
บรรทัดขนาด 128 ไบต์เก็บค่า float ขนาดสี่ไบต์ได้พอดี 32 ค่า ซึ่งเท่ากับหนึ่งค่าต่อเธรดในวาร์ป ดังนั้นวาร์ปที่จัดเรียงอย่างเป็นระเบียบจึงให้บริการได้ด้วยธุรกรรมเดียว
// 32 threads x 4-byte float = 128 bytes = one lineการจัดแนวคือกุญแจสำคัญ
เซกเมนต์เริ่มต้นที่ตำแหน่งซึ่งกำหนดและจัดแนวไว้ หากข้อมูลของคุณเริ่มกลางเซกเมนต์ วาร์ปเดียวอาจพาดผ่านสองบรรทัดและบังคับให้เกิดธุรกรรมเพิ่มเติม
จ่ายให้กับไบต์ที่คุณไม่ได้ใช้
หากวาร์ปแตะเพียงไม่กี่ไบต์จากบรรทัดขนาด 128 ไบต์ GPU ก็ยังย้ายข้อมูลทั้ง 128 ไบต์ ไบต์ที่ไม่ได้ใช้คือแบนด์วิดท์ที่สูญเปล่าซึ่งคุณต้องจ่ายอยู่ดี
นับจำนวนธุรกรรม
ประสิทธิภาพมักขึ้นอยู่กับตัวเลขเพียงตัวเดียว: วาร์ปต้องใช้ธุรกรรมกี่รายการ ยิ่งมีธุรกรรมน้อย ก็ยิ่งอ่านข้อมูลน้อยและทำงานเสร็จเร็วขึ้น
กรณีที่ดีที่สุด
เมื่อ 32 เธรดอ่านค่า float 32 ค่าที่อยู่ติดกันจากตำแหน่งที่จัดแนวไว้ GPU จะตอบด้วยบรรทัดขนาด 128 ไบต์ที่เป็นระเบียบเพียงหนึ่งบรรทัด นี่คือธุรกรรมเดียวในกรณีที่เหมาะที่สุด
float v = data[blockIdx.x * blockDim.x + threadIdx.x];กรณีที่แย่ที่สุด
หากแต่ละเธรดหยิบค่าที่อยู่ห่างจากเธรดข้างเคียง วาร์ปอาจทำให้เกิดธุรกรรมแยกกันมากถึง 32 รายการ ซึ่งดึงบรรทัดเต็ม 32 บรรทัดมาใช้เพียงเล็กน้อย
แบนด์วิดท์คือข้อจำกัด
เคอร์เนลส่วนใหญ่ติดข้อจำกัดที่ความเร็วในการย้ายหน่วยความจำ ไม่ใช่การคำนวณ การลดจำนวนธุรกรรมจะเพิ่มแบนด์วิดท์ที่ใช้งานได้จริงโดยตรง 🚀
เตรียมพื้นฐาน
ตอนนี้คุณทราบหน่วยของต้นทุนแล้ว นั่นคือธุรกรรมขนาดเท่าเซกเมนต์ เทคนิคการรวมการเข้าถึงทั้งหมดที่กำลังจะเรียน แท้จริงแล้วมุ่งจัดวาร์ปให้ใช้ธุรกรรมเหล่านี้น้อยที่สุด
ตรวจสอบอย่างรวดเร็ว
ทดสอบความเข้าใจของคุณเกี่ยวกับขนาดธุรกรรม
ทบทวน
คุณได้เรียนรู้ว่า GPU ย้ายหน่วยความจำเป็นเซกเมนต์ขนาดคงที่ และวาร์ปจะได้รับบริการด้วยจำนวนธุรกรรมน้อยที่สุดเท่าที่ทำได้ ธุรกรรมน้อยลง เคอร์เนลก็เร็วขึ้น 🎉
เรียนรู้ C++ ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 30
- บทเรียน
- 120
คำถามที่พบบ่อย
บทเรียน “ธุรกรรมหน่วยความจำคืออะไร” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ธุรกรรมหน่วยความจำคืออะไร” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส CUDA Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส CUDA Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ธุรกรรมหน่วยความจำคืออะไร”
บรรทัดแคชและเซกเมนต์ขนาด 32/128 ไบต์ คุณปฏิบัติ CUDA Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน CUDA Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน CUDA Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “ธุรกรรมหน่วยความจำคืออะไร” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน CUDA Academy นี้ได้ไหม
ได้ บทเรียน CUDA Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ธุรกรรมหน่วยความจำคืออะไร
- การอ่านแบบรวมกลุ่มเทียบกับแบบมีระยะก้าว
- โครงสร้างอาร์เรย์เทียบกับอาร์เรย์ของโครงสร้าง
- วัดแบนด์วิดท์ที่ใช้งานได้จริง