0Pricing
CUDA Academy · บทเรียน

ปัญหาการใช้ข้อมูลซ้ำ

ทำไมเคอร์เนลแบบพื้นฐานจึงอ่านหน่วยความจำส่วนกลางซ้ำ

ปัญหาการใช้ข้อมูลซ้ำ เป็นบทเรียน CUDA Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน CUDA Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส CUDA Academy มีบทเรียนทั้งหมด 4 บทเรียน

ต้นทุนที่ซ่อนอยู่

เคอร์เนลอาจทำงานถูกต้องแต่ช้า เพราะดึงข้อมูลเดิมจากหน่วยความจำส่วนกลางที่ช้าซ้ำแล้วซ้ำเล่า 🐢

หน่วยความจำคือคอขวด

บน GPU การคำนวณมีต้นทุนต่ำ แต่การเข้าถึงหน่วยความจำส่วนกลางมีต้นทุนสูง เคอร์เนลจำนวนมากรอหน่วยความจำมากกว่าที่ใช้คำนวณ

นิยามการใช้ข้อมูลซ้ำ

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

สเตนซิลแบบพื้นฐาน

ลองนึกภาพการทำให้ภาพเบลอ พิกเซลผลลัพธ์แต่ละพิกเซลจะหาค่าเฉลี่ยจากเพื่อนบ้าน ดังนั้นพิกเซลอินพุตแต่ละพิกเซลจึงถูกอ่านโดยเธรดหลายเธรด

out[i] = (in[i-1] + in[i] + in[i+1]) / 3.0f;

นับจำนวนครั้งที่อ่าน

ในการทำให้ภาพเบลอนั้น ค่า in[i] ถูกอ่านโดยเธรด i-1, i และ i+1 ไบต์เดียวกันจึงเดินทางผ่านบัสที่ป้อนข้อมูลด้วย PCIe ซึ่งช้า ถึงสามครั้ง

ความซ้ำซ้อนสะสมขึ้น

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

แบนด์วิดท์มีจำกัด

หน่วยความจำส่วนกลางมีแบนด์วิดท์สูงสุดที่กำหนดตายตัว การอ่านข้อมูลเดิมซ้ำ ๆ ทำให้โควตานั้นสูญเปล่าไปกับไบต์ที่คุณมีอยู่แล้ว

หน่วยคำนวณว่างอยู่

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

ความเข้มข้นทางคณิตศาสตร์

ความเข้มข้นทางคณิตศาสตร์คืออัตราส่วนระหว่างจำนวนการดำเนินการทางคณิตศาสตร์กับจำนวนไบต์ที่เคลื่อนย้าย ความเข้มข้นต่ำหมายความว่าหน่วยความจำ ไม่ใช่การคำนวณ เป็นตัวจำกัดประสิทธิภาพ

เป้าหมาย: อ่านครั้งเดียว

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

เข้าสู่หน่วยความจำร่วม

หน่วยเก็บข้อมูลบนชิปที่รวดเร็วนั้นคือหน่วยความจำร่วม การเตรียมข้อมูลไว้ที่นั่นเป็นพื้นฐานของการปรับปรุงประสิทธิภาพด้วยไทล์ทั้งหมดที่จะกล่าวต่อไป

ตรวจสอบอย่างรวดเร็ว

เหตุใดเคอร์เนลสเตนซิลแบบพื้นฐานจึงมักทำงานช้า

สรุปทบทวน

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

คำถามที่พบบ่อย

บทเรียน “ปัญหาการใช้ข้อมูลซ้ำ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ปัญหาการใช้ข้อมูลซ้ำ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส CUDA Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส CUDA Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ปัญหาการใช้ข้อมูลซ้ำ”

ทำไมเคอร์เนลแบบพื้นฐานจึงอ่านหน่วยความจำส่วนกลางซ้ำ คุณปฏิบัติ CUDA Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน CUDA Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน CUDA Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “ปัญหาการใช้ข้อมูลซ้ำ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน CUDA Academy นี้ได้ไหม

ได้ บทเรียน CUDA Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ปัญหาการใช้ข้อมูลซ้ำ
  2. รูปแบบโหลด-ซิงค์-คำนวณ
  3. สเตนซิลและหน้าต่างเลื่อน
  4. จัดการไทล์ริมขอบ
← กลับไปที่ CUDA Academy