แม้ว่ารุ่นที่มีประสิทธิภาพในการทำงานต้องมีขั้นตอนมากขึ้น แต่นี่ก็ชดเชยด้วยความจริงที่ว่าจำนวนเธรดที่แอ็คทีฟจะลดลงเร็วขึ้นและจำนวนเธรดที่แอ็คทีฟทั้งหมดในการวนซ้ำทั้งหมดจะน้อยกว่ามาก หากวาร์ปไม่มีเธรดที่ใช้งานอยู่ในระหว่างการทำซ้ำวิปริตนั้นจะข้ามไปยังสิ่งกีดขวางต่อไปนี้และหยุดการทำงานชั่วคราวทำให้วาร์ปอื่นวิ่งได้ ดังนั้นการมี warps ที่แอ็คทีฟน้อยลงจึงสามารถชำระได้ในเวลาดำเนินการ (โดยปริยายในเรื่องนี้คือรหัส GPU จำเป็นต้องได้รับการออกแบบในลักษณะที่เธรดที่ใช้งานอยู่รวมกันเป็น warps น้อยที่สุดเท่าที่จะเป็นไปได้ - คุณไม่ต้องการให้กระจัดกระจายเบาบางเพราะแม้แต่เธรดที่ใช้งานเพียงเส้นเดียว เพื่อใช้งานอยู่)
พิจารณาจำนวนเธรดที่แอ็คทีฟในอัลกอริทึมไร้เดียงสา เมื่อดูรูปที่ 2 ในบทความคุณจะเห็นว่าเธรดทั้งหมดนั้นเปิดใช้งานยกเว้น 2 kแรกในการทำซ้ำที่k ดังนั้นด้วยNหัวข้อจำนวนหัวข้อที่ใช้งานไปเช่นN - 2 k ตัวอย่างเช่นด้วยN = 1024 จำนวนเธรดที่ใช้งานต่อการวนซ้ำคือ:
1023, 1022, 1020, 1016, 1008, 992, 960, 896, 768, 512
ถ้าฉันแปลงสิ่งนี้เป็นจำนวนของ warps ที่ใช้งานอยู่ (โดยหารด้วย 32 และปัดเศษขึ้น) ฉันจะได้รับ:
32, 32, 32, 32, 32, 31, 30, 28, 24, 16
สำหรับผลรวมของ 289 ในอีกทางหนึ่งอัลกอริทึมที่มีประสิทธิภาพในการทำงานเริ่มต้นด้วยเธรดที่มากถึงครึ่งหนึ่งจากนั้นจะลดจำนวนของแอคทีฟที่ใช้งานในแต่ละรอบซ้ำจนกว่าจะลดลงเหลือ 1 ครึ่งหนึ่งของขนาดอาร์เรย์อีกครั้ง:
512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512
การแปลงสิ่งนี้เป็น warps ที่ใช้งานอยู่:
16, 8, 4, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 8, 16
ผลรวมคือ 71 ซึ่งเป็นเพียงหนึ่งในสี่ของจำนวนมาก ดังนั้นคุณจะเห็นได้ว่าตลอดระยะเวลาการปฏิบัติการจำนวนวาร์ปที่แอคทีฟนั้นเล็กกว่ามากด้วยอัลกอริทึมที่มีประสิทธิภาพ (อันที่จริงแล้วสำหรับการวิ่งระยะยาวที่อยู่ตรงกลางจะมีเพียง warps ที่แอคทีฟเพียงหยิบมือเดียวเท่านั้นซึ่งหมายความว่าชิปส่วนใหญ่ไม่ได้ถูกครอบครองหากมีงานคำนวณเพิ่มเติมที่กำลังทำงานอยู่เช่นจาก CUDA ลำธารอื่น ๆ พื้นที่ว่าง)