จะอธิบายการเร่งความเร็วซูเปอร์เชิงเส้นที่พบในอุปกรณ์ GPU ด้วยรหัส CUDA ได้อย่างไร

ฉันมีปัญหาในการทำความเข้าใจประสิทธิภาพการปรับขนาดของการคำนวณแบบขนานที่น่าอับอายบน Tesla C1060 การรันโดยใช้บล็อกทั้งหมดและหลายเธรดต่อบล็อก ฉันได้รับเวลาดำเนินการประมาณ 0.87 วินาที

อย่างไรก็ตาม หากฉันรันการวนซ้ำทั้งหมดในบล็อกเดียวโดยมีหนึ่งเธรดต่อบล็อก เวลารันจะสูงถึง 1872 วินาที ซึ่งนานกว่า 240x0.87s = 209s ที่ฉันคาดหวังจากการลดขนาดลงเพื่อใช้เพียงหนึ่งในนั้นมาก โปรเซสเซอร์สตรีมมิ่ง 240 ตัว

แต่ด้วยการใช้ทั้งหมด 240 คอร์ ดูเหมือนว่าฉันจะได้ความเร็วเพิ่มขึ้นมากกว่า 2,000x การเร่งความเร็วเชิงเส้นพิเศษนี้จะเป็นไปได้อย่างไร ฉันควรคำนึงถึงปัจจัยอื่นใดในการสร้างแบบจำลองประสิทธิภาพของระบบนี้


person Alaya    schedule 22.05.2014    source แหล่งที่มา
comment
Re: ปิดโหวต - ฉันคิดว่านี่เป็นคำถามการสร้างแบบจำลองประสิทธิภาพที่มีประโยชน์สำหรับรหัส GPU ฉันได้พยายามแก้ไขคำถามเพื่อให้ชัดเจนยิ่งขึ้น   -  person Jonathan Dursi    schedule 22.05.2014


คำตอบ (1)


การเปิดตัวเคอร์เนลที่ประกอบด้วย 1 เธรดจะจำกัดการทำงานของเคอร์เนลไว้ที่ 1 ใน 30 SM สำหรับแต่ละคำสั่งวาร์ปที่ออกเพียง 1/32 ของหน่วยปฏิบัติการจะถูกใช้ นอกจากนี้คำแนะนำจากวาร์ปเดียวกันไม่สามารถออกในช่องปัญหาย้อนหลัง โดยปล่อยให้ช่องปัญหาว่างเปล่าอย่างน้อย 1/2 สล็อตเพิ่มเติมจะว่างเปล่าสำหรับการขึ้นต่อกันของคำสั่งและเวลาแฝงของหน่วยความจำ โดยปล่อยให้ความเร็วเพิ่มขึ้น 2-4 เท่า สมมติว่า 2x ในแง่ร้ายจริงๆ การคำนวณคร่าวๆ ของกำไรที่เป็นไปได้คือ

30x increase for using all 30 SMs
32x increase for using full width of the execution units
 2x increase for using issue slots and saturating memory system
= 30 * 32 * 2
= >1920x performance increase

คุณจะเห็นความแตกต่าง 1872/.87 = 2152x สิ่งนี้สามารถอธิบายได้ง่ายโดย >2x เนื่องจากสล็อตปัญหาว่างเปล่า และความจริงที่ว่า 1 วาร์ปต่อ SM ไม่สามารถทำให้ระบบหน่วยความจำอิ่มตัวได้

person Greg Smith    schedule 22.05.2014
comment
ดังนั้นหากฉันรันโปรแกรม CUDA แบบเธรดเดียว คำสั่งถัดไปจะไม่ถูกออกก่อนที่คำสั่งปัจจุบันจะเสร็จสิ้นการดำเนินการหรือไม่? หรือมีการขนานระดับคำสั่งสำหรับโปรแกรม CUDA เธรดเดี่ยวหรือไม่? - person Alaya; 24.05.2014