ตัวอย่างเช่น nVidia มี CUBLAS ซึ่งสัญญาว่าจะเร่งความเร็ว 7-14x ไร้เดียงสานี่ไม่มีที่ไหนใกล้กับทฤษฏีความเร็วของการ์ด GPU ของ nVidia อะไรคือความท้าทายในการเร่งพีชคณิตเชิงเส้นบน GPU และมีการกำหนดเส้นทางพีชคณิตเชิงเส้นเร็วกว่าที่มีอยู่แล้วหรือไม่
ตัวอย่างเช่น nVidia มี CUBLAS ซึ่งสัญญาว่าจะเร่งความเร็ว 7-14x ไร้เดียงสานี่ไม่มีที่ไหนใกล้กับทฤษฏีความเร็วของการ์ด GPU ของ nVidia อะไรคือความท้าทายในการเร่งพีชคณิตเชิงเส้นบน GPU และมีการกำหนดเส้นทางพีชคณิตเชิงเส้นเร็วกว่าที่มีอยู่แล้วหรือไม่
คำตอบ:
ฉันไม่สามารถตอบคำถามครึ่งหลังของคุณได้เท่าที่มีการใช้งานอื่น ๆ ที่นั่น แต่ฉันสามารถให้ข้อมูลเชิงลึกเกี่ยวกับความท้าทาย สำหรับการอ้างอิงส่วนตัวฉันใช้ ViennaCL บน nVidia GTX 560 Ti พร้อมหน่วยความจำ 2GB สำหรับการวัดประสิทธิภาพของฉัน
เหนือรหัสซีเรียลในช่วงกลางของ i5 ฉันเห็นการเพิ่มความเร็วสำหรับการคูณเมทริกซ์หนาแน่นประมาณ 40x สำหรับการใช้งานเช่นเวกเตอร์สเกลาร์คูณผมเห็นว่ามีความเร็วสูงถึง 1,000 เท่า อย่างไรก็ตามกอริลลา 800 ปอนด์ในห้องนั้นเป็นแบนด์วิดธ์หน่วยความจำ สำหรับ GPU เชิงพาณิชย์ส่วนใหญ่คุณจะใช้งาน PCIe ซึ่ง จำกัด ความเร็วของคุณไว้ที่ประมาณ 6GB / s ในกรณีของฉันในขณะที่การคำนวณเร็วขึ้นถึง 40 เท่าเมทริกซ์สามสำเนา (สองต่อ GPU และหนึ่งหลัง) แต่ละอันใช้เวลานานพอ ๆ กับการคำนวณบนซีพียู
ปัญหาที่เกิดขึ้นกับไลบรารีทั่วไปสำหรับพีชคณิตเชิงเส้นของ GPU จะเป็นไปได้ว่าพวกเขาไม่สามารถใช้วัตถุบน GPU ได้อีกเพราะพวกเขาไม่รู้ว่าคุณกำลังจะทำอะไรกับพวกเขา ดังนั้นทุกการเรียกใช้เคอร์เนลการคำนวณอาจต้องคัดลอกไปยัง GPU จากนั้นคัดลอกผลลัพธ์กลับมา นี้จะกินผลกำไรส่วนใหญ่
หากคุณสามารถนำวัตถุต่าง ๆ เช่นเมทริกซ์มาใช้ใหม่คุณสามารถเขียนอัลกอริธึมระดับสูงเพื่อหลีกเลี่ยงการจัดการหน่วยความจำให้มากที่สุดเท่าที่จะเป็นไปได้ แต่ไลบรารีจะถูกกดอย่างหนักเพื่อทำสิ่งนี้อย่างมีประสิทธิภาพ
ฉันหวังว่าสิ่งนี้จะช่วยได้และฉันมั่นใจว่ามีคนอื่นที่นี่ที่มีประสบการณ์มากกว่านี้ แต่สิ่งเหล่านี้เป็นประสบการณ์และความประทับใจที่ฉันได้รับระหว่างการจู่โจมระยะสั้นของฉันในการคำนวณ GPU
ให้ฉันมุ่งเน้นไปที่ CUDA และ BLAS เท่านั้น
การเร่งความเร็วเหนือการใช้งาน BLAS ของโฮสต์นั้นไม่ได้เป็นตัวชี้วัดที่ดีในการประเมินทรูพุตเนื่องจากมันขึ้นอยู่กับหลาย ๆ ปัจจัยแม้ว่าฉันจะยอมรับว่าการเร่งความเร็วมักเป็นสิ่งที่เราใส่ใจ
หากคุณดูมาตรฐานที่เผยแพร่โดย NVIDIAและพิจารณาว่า Tesla M2090 มี 1331 Gigaflops (ความแม่นยำเดียว) และ 665 Gigaflops (double prec.) ประสิทธิภาพสูงสุดคุณจะเห็นว่าสำหรับ SGEMM และ DGEMM เรามีปริมาณงานที่วัดได้เกือบ 60% ของทฤษฎีหนึ่งซึ่งค่อนข้างดี
ในเรื่องที่เกี่ยวกับการส่งผ่านจุดลอยตัวที่ยั่งยืนฉันคิดว่าควรคำนวณฟลอพโดยไม่คำนึงถึงข้อมูลบัญชีและเวลาการโอนผลลัพธ์ซึ่งทำให้การเปรียบเทียบความเร็วทำได้ยาก นอกจากนี้คุณต้องคำนึงถึงขนาดเมทริกซ์เนื่องจากประสิทธิภาพที่ดีที่สุดสำหรับเมทริกซ์ขนาดใหญ่
Bottom line: การเพิ่มความเร็วของแอปพลิเคชั่นในชีวิตจริงอาจแตกต่างจากการวัดประสิทธิภาพสูงสุดในการปฏิบัติพีชคณิตเชิงเส้นเนื่องจากคุณต้องคำนึงถึงการเริ่มต้น GPU, เวลาในการถ่ายโอนข้อมูลและอื่น ๆ
ดังนั้นฉันจะไม่ตอบคำถามของคุณเกี่ยวกับไลบรารี่ที่เร็วที่สุดเนื่องจากคำถามนั้นไม่สมเหตุสมผลเว้นแต่จะมีการกำหนดเมตริกและปัญหาที่แม่นยำ ทั้งหมดนี้บอกว่าฉันคิดว่าcuBLASและMAGMAเป็นจุดเริ่มต้นที่ดีมาก