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

รูปแบบโหลด-ซิงค์-คำนวณ

เตรียมไทล์ก่อนนำไปคำนวณ

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

สามระยะง่าย ๆ

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

ระยะที่หนึ่ง: โหลด

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

tile[threadIdx.x] = in[globalIndex];

ความร่วมมือเป็นทีม

การโหลดเป็นงานของทีม เธรดทุกเธรดจะดึงส่วนของตนเอง ดังนั้นทั้งบล็อกจึงเตรียมไทล์เต็มหนึ่งไทล์ด้วยการอ่านแบบรวมต่อเนื่องเพียงครั้งเดียว

ระยะที่สอง: ซิงก์

ก่อนที่ใครจะอ่านค่าของเพื่อนบ้าน เธรดทุกเธรดต้องโหลดข้อมูลให้เสร็จก่อน __syncthreads คือจุดกั้นที่รับรองว่าไทล์พร้อมใช้งาน

__syncthreads();

เหตุใดการซิงก์จึงจำเป็น

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

ระยะที่สาม: คำนวณ

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

การใช้ซ้ำที่รวดเร็วให้ผลคุ้มค่า

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

บางครั้งต้องซิงก์อีกครั้ง

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

ทุกเธรดหรือไม่มีเลย

เธรดทุกเธรดในบล็อกต้องมาถึง __syncthreads หากบางเธรดข้ามจุดนี้ภายในแขนง เคอร์เนลจะหยุดรอไม่สิ้นสุดหรือทำงานผิดพลาด

โครงร่างที่นำกลับมาใช้ได้

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

ใส่ใจกับขนาดไทล์

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

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

เหตุใดจึงต้องใช้ __syncthreads ระหว่างการโหลดกับการคำนวณ

สรุปทบทวน

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

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

บทเรียน “รูปแบบโหลด-ซิงค์-คำนวณ” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “รูปแบบโหลด-ซิงค์-คำนวณ”

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

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

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

บทเรียน “รูปแบบโหลด-ซิงค์-คำนวณ” ใช้เวลานานแค่ไหน

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

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

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

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

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