CUDA Academy · บทเรียน

จัดการไทล์ริมขอบ

จัดการขอบเขตและการเติมข้อมูลที่ขอบอาร์เรย์

บทเรียน 4 จาก 413 ขั้นตอน

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

ปัญหาขอบเขต

อาร์เรย์จริงแทบไม่เคยแบ่งเป็นไทล์ได้ลงตัวไทล์สุดท้ายที่แต่ละขอบอาจเลยจุดสิ้นสุดของข้อมูล

การอ่านนอกช่วง

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

การตรวจสอบขอบเขต

วิธีแก้ที่ง่ายที่สุดคือใช้เงื่อนไขif (gid < n) เพื่อให้เธรดที่เลยจุดสิ้นสุดข้ามการโหลดและไม่ทำงานที่เป็นอันตราย

if (gid < n) tile[local] = in[gid];

ฮาโลเลยขอบ

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

กลยุทธ์: เติมศูนย์

ทางเลือกหนึ่งที่ใช้กันทั่วไปคือการเติมศูนย์: ให้ถือว่าเพื่อนบ้านที่หายไปมีค่าเป็น 0 วิธีนี้เรียบง่ายและใช้ได้ดีกับการหาผลรวมและตัวกรองหลายชนิด

tile[local] = (gid < n) ? in[gid] : 0.0f;

กลยุทธ์: ตรึงไว้ที่ขอบ

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

เลือกตามอัลกอริทึม

กฎสำหรับขอบที่เหมาะสมขึ้นอยู่กับคณิตศาสตร์ ให้เลือกศูนย์ ตรึง หรือวนรอบ เพื่อให้ผลลัพธ์บริเวณขอบตรงตามที่ปัญหาต้องการ

ตรวจสอบผลลัพธ์ด้วย

แม้คำนวณเสร็จแล้ว เธรดก็ต้องตรวจสอบก่อนเขียน เพื่อไม่ให้เก็บผลลัพธ์เลยจุดสิ้นสุดของอาร์เรย์ผลลัพธ์

if (gid < n) out[gid] = result;

ทำให้จุดกั้นเป็นแบบเดียวกัน

เธรดที่อยู่นอกข้อมูลยังต้องมาถึง __syncthreads ให้ใส่การตรวจสอบขอบเขตรอบการโหลด ไม่ใช่รอบจุดกั้น

ทดสอบขอบก่อน

ข้อผิดพลาดส่วนใหญ่ของการใช้ไทล์ซ่อนอยู่ที่ขอบเขต ให้ทดสอบขนาดที่ไม่ใช่พหุคูณของไทล์เสมอ เช่น n เท่ากับ 1000 และไทล์เท่ากับ 256

ถูกต้องก่อน แล้วค่อยเร็ว

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

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

เธรดควรจัดการดัชนีส่วนกลางที่เลยจุดสิ้นสุดของอาร์เรย์อย่างไร

สรุปทบทวน

ไทล์บริเวณขอบต้องใช้การตรวจสอบขอบเขตและกฎสำหรับขอบ (ศูนย์ ตรึง หรือวนรอบ) เพื่อให้ขนาดอาร์เรย์ทุกขนาดยังคงถูกต้อง ทดสอบขอบให้ดี ✅

เริ่มต้นได้ฟรี

เรียนรู้ C++ ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
30
บทเรียน
120

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

บทเรียน “จัดการไทล์ริมขอบ” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “จัดการไทล์ริมขอบ”

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

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

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

บทเรียน “จัดการไทล์ริมขอบ” ใช้เวลานานแค่ไหน

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

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

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

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

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