การใช้งาน BLAS / LAPACK ที่เร็วที่สุดหรือการใช้พีชคณิตเชิงเส้นอื่น ๆ ในระบบ GPU คืออะไร?


11

ตัวอย่างเช่น nVidia มี CUBLAS ซึ่งสัญญาว่าจะเร่งความเร็ว 7-14x ไร้เดียงสานี่ไม่มีที่ไหนใกล้กับทฤษฏีความเร็วของการ์ด GPU ของ nVidia อะไรคือความท้าทายในการเร่งพีชคณิตเชิงเส้นบน GPU และมีการกำหนดเส้นทางพีชคณิตเชิงเส้นเร็วกว่าที่มีอยู่แล้วหรือไม่

คำตอบ:


9

ฉันไม่สามารถตอบคำถามครึ่งหลังของคุณได้เท่าที่มีการใช้งานอื่น ๆ ที่นั่น แต่ฉันสามารถให้ข้อมูลเชิงลึกเกี่ยวกับความท้าทาย สำหรับการอ้างอิงส่วนตัวฉันใช้ ViennaCL บน nVidia GTX 560 Ti พร้อมหน่วยความจำ 2GB สำหรับการวัดประสิทธิภาพของฉัน

เหนือรหัสซีเรียลในช่วงกลางของ i5 ฉันเห็นการเพิ่มความเร็วสำหรับการคูณเมทริกซ์หนาแน่นประมาณ 40x สำหรับการใช้งานเช่นเวกเตอร์สเกลาร์คูณผมเห็นว่ามีความเร็วสูงถึง 1,000 เท่า อย่างไรก็ตามกอริลลา 800 ปอนด์ในห้องนั้นเป็นแบนด์วิดธ์หน่วยความจำ สำหรับ GPU เชิงพาณิชย์ส่วนใหญ่คุณจะใช้งาน PCIe ซึ่ง จำกัด ความเร็วของคุณไว้ที่ประมาณ 6GB / s ในกรณีของฉันในขณะที่การคำนวณเร็วขึ้นถึง 40 เท่าเมทริกซ์สามสำเนา (สองต่อ GPU และหนึ่งหลัง) แต่ละอันใช้เวลานานพอ ๆ กับการคำนวณบนซีพียู

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

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

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


3
นี่คือเหตุผลที่คุณต้องการวัตถุที่อยู่บน GPU เป็นเวลานานแทนที่จะถูกคัดลอกกลับไปยัง CPU อย่างกระตือรือร้น ตัวอย่างเช่นเมทริกซ์ PETSc และเวกเตอร์มีค่าสถานะระบุว่า CPU และ / หรือ GPU เป็นปัจจุบัน การทำงานของ GPU ทำเครื่องหมายรุ่นของ CPU ว่าสกปรกและในทางกลับกัน การคัดลอกจะทำอย่างโปร่งใสหากคุณขอหน่วยความจำในสถานที่ที่สกปรก แต่จะหายากถ้าองค์ประกอบอัลกอริทึมทั้งหมดที่สัมผัสโครงสร้างข้อมูลขนาดใหญ่สามารถดำเนินการในสถานที่เดียวกัน
Jed Brown

5

ให้ฉันมุ่งเน้นไปที่ CUDA และ BLAS เท่านั้น

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

หากคุณดูมาตรฐานที่เผยแพร่โดย NVIDIAและพิจารณาว่า Tesla M2090 มี 1331 Gigaflops (ความแม่นยำเดียว) และ 665 Gigaflops (double prec.) ประสิทธิภาพสูงสุดคุณจะเห็นว่าสำหรับ SGEMM และ DGEMM เรามีปริมาณงานที่วัดได้เกือบ 60% ของทฤษฎีหนึ่งซึ่งค่อนข้างดี

2ม.nkม.×kk×n

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

Bottom line: การเพิ่มความเร็วของแอปพลิเคชั่นในชีวิตจริงอาจแตกต่างจากการวัดประสิทธิภาพสูงสุดในการปฏิบัติพีชคณิตเชิงเส้นเนื่องจากคุณต้องคำนึงถึงการเริ่มต้น GPU, เวลาในการถ่ายโอนข้อมูลและอื่น ๆ

ดังนั้นฉันจะไม่ตอบคำถามของคุณเกี่ยวกับไลบรารี่ที่เร็วที่สุดเนื่องจากคำถามนั้นไม่สมเหตุสมผลเว้นแต่จะมีการกำหนดเมตริกและปัญหาที่แม่นยำ ทั้งหมดนี้บอกว่าฉันคิดว่าcuBLASและMAGMAเป็นจุดเริ่มต้นที่ดีมาก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.