อะไรคือความสัมพันธ์ของ BLAS, LAPACK และห้องสมุดพีชคณิตเชิงเส้นอื่น ๆ ?


26

ฉันได้ดูไลบรารีพีชคณิตเชิงเส้น C ++ สำหรับโครงการที่ฉันกำลังทำอยู่ สิ่งที่ฉันยังไม่เข้าใจคือการเชื่อมต่อของ BLAS และ LAPACK กับห้องสมุดพีชคณิตเชิงเส้นอื่น ๆ

เมื่ออ่านบทความนี้ในห้องสมุดพีชคณิตเชิงเส้นฉันพบว่ามันน่าสนใจที่:

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

ฉันสามารถจินตนาการได้ว่าบางไลบรารีเป็นเพียงอินเตอร์เฟส C ++ ไปยังไลบรารี BLAS และ LAPACK ที่เขียนใน C และ Fortran และอื่น ๆ ได้ใช้งานรูทีนทดแทนของตัวเอง แต่

  1. อะไรคือความหมายของอินเทอร์เฟซเสริมของ BLAS และ LAPACK? คุณทำอะไรหายโดยการไม่เข้าร่วมและห้องสมุดกำลังทำอะไรแทน

  2. ห้องสมุดใดมีมากกว่าอินเตอร์เฟสหรือไม่? ตัวอย่างเช่น UMFPACK ถูกเขียนใน C และมีอินเตอร์เฟสเสริมให้กับ BLAS และ LAPACK UMFPACK (หรือไลบรารีอื่น) สามารถทำอะไรได้บ้างที่ BLAS และ LAPACK ไม่สามารถทำได้ด้วยตนเอง

คำตอบ:


15

เท่าที่ฉันรู้ Lapack เป็นการนำอัลกอริธึมที่มีอยู่ทั่วไปเท่านั้น (eigensolver หนาแน่นแบบไม่สมมาตร, เวลาหลอก - กำลังสองสมมาตร eigensolver สมมาตร, Jacobi SVD อย่างรวดเร็ว) ห้องสมุดส่วนใหญ่ที่ไม่พึ่งพา BLAS + Lapack มีแนวโน้มที่จะสนับสนุนการดำเนินการดั้งเดิมเช่นการคูณเมทริกซ์การแยกตัวประกอบ LU และการสลายตัว QR Lapack มีอัลกอริธึมที่ซับซ้อนที่สุดบางส่วนสำหรับการคำนวณเมทริกซ์หนาแน่นที่ฉันไม่เชื่อว่าจะถูกนำไปใช้ที่อื่น

ดังนั้นเพื่อตอบคำถามของคุณ (อย่างน้อยก็บางส่วน)

  1. โดยการเลือกไม่ใช้ BLAS / Lapack คุณจะไม่พลาดฟังก์ชั่นการใช้งาน (เว้นแต่ว่าจะมีการออกแบบอินเตอร์เฟสเสริมเพื่อให้ไม่มีการใช้งานทดแทนซึ่งหายาก) หากคุณต้องการดำเนินการที่ซับซ้อนมาก ๆ ห้องสมุดอื่น ๆ เหล่านั้นอาจไม่นำไปใช้เอง เนื่องจาก BLAS สามารถปรับให้เข้ากับสถาปัตยกรรมของคุณได้อย่างมากคุณอาจพลาดการเร่งความเร็วขนาดใหญ่ (ลำดับความแตกต่างของความเร็วขนาดไม่ได้ไม่เคยมีมาก่อน)

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

หากความเร็วเป็นสิ่งที่น่ากังวลอย่างยิ่งให้ลองใช้ห้องสมุดที่รองรับการเชื่อมต่อ BLAS / Lapack ซึ่งเป็นอุปกรณ์เสริมและใช้งานได้ในที่สุดเมื่อคุณต้องการสิ่งต่าง ๆ เร็วขึ้น


3
  1. การใช้งานที่ดีของรูทีน BLAS และ LAPACK (ที่สำคัญที่สุดคือรูทีน BLAS) สามารถเร็วกว่าการใช้งานตรงไปตรงมาของฟังก์ชันเดียวกัน อย่างไรก็ตามการใช้งานที่มีประสิทธิภาพมักจะรวมการปรับแต่งที่เฉพาะเจาะจงกับคอมพิวเตอร์ที่คุณใช้งาน แม้แต่โปรเซสเซอร์รุ่นต่าง ๆ จากผู้ผลิตรายเดียวกัน (เช่นโปรเซสเซอร์ Intel x86-64) มักต้องการรหัสที่แตกต่างกันมากเพื่อให้ได้ประสิทธิภาพที่ดี โดยการจัดหาไลบรารี BLAS / LAPACK ที่ได้รับการปรับปรุงให้เหมาะสมกับแพ็คเกจซอฟต์แวร์โดยทั่วไปคุณสามารถเพิ่มความเร็วโค้ดเทียบกับการใช้รูทีนที่ไม่ได้เพิ่มประสิทธิภาพ อย่างไรก็ตามเนื่องจากผู้ใช้ทั่วไปจำนวนมากอาจไม่มีความเชี่ยวชาญในการติดตั้งรูทีนที่ปรับให้เหมาะสมจึงเป็นเรื่องปกติที่จะมีตัวเลือกในการใช้รูทีนพีชคณิตเชิงเส้นที่ไม่ได้เพิ่มประสิทธิภาพทั่วไป

  2. UMFPACK เป็นไลบรารีของรูทีนสำหรับพีชคณิตเชิงเส้นบนเมทริกซ์แบบกระจาย (เมทริกซ์ที่มีสัดส่วนสูงถึง 0 รายการ) มันสามารถใช้ BLAS / LAPACK เพื่อจัดการเมทริกซ์หนาแน่น (หรือบล็อกหนาแน่นภายในเมทริกซ์) ที่พบ


1

เวอร์ชั่นย่อ: เป็นไลบรารีที่เขียนเป็นภาษาฟอร์แทรนที่ใช้สำหรับการดำเนินการเชิงตัวเลขในหลายภาษา - แม้กระทั่งบางโปรแกรม C เนื่องจากความเร็วและการปรับให้เหมาะสมที่สุด พวกเขายังเป็นเพียงการใช้งานโอเพนซอร์สเพียงอย่างเดียวของอัลกอริทึมมากมาย :)

คุณไม่จำเป็นต้องใช้ห้องสมุดเว้นแต่จะมีการอ้างอิง iirc ส่วนใหญ่นั้นค่อนข้างอิสระและคุณสามารถเขียนฟังก์ชันคณิตศาสตร์ของคุณเองได้เสมอเช่น vectorized ที่ดีกว่าสำหรับสถาปัตยกรรมของคุณ


1
BLAS และ LAPACK ที่ได้รับการปรับปรุงแล้วส่วนใหญ่นั้นใช้เวลานานตั้งแต่หยุดเขียน Fortran ขั้นตอนการ BLAS และ LAPACK ที่เร็วที่สุดนั้นไม่ใช่การดาวน์โหลดจาก netlib ผู้ขายของโปรเซสเซอร์ส่วนใหญ่ขายหรือแจกจ่าย BLAS และ LAPACK รุ่นที่ได้รับการออกแบบมาโดยเฉพาะสำหรับชิปของพวกเขา
Bill Barth

ขอโทษฉันหมายถึงคนที่กระจายอยู่ในเน็ต - คนทั่วไป แน่นอนว่าชิปที่เฉพาะเจาะจงนั้นไม่สามารถพกพาได้: นั่นคือเทคนิคเวคเตอร์ของ Intel บางอันทำงานได้ไม่ดีกับชิป AMD ซึ่งเป็นเหตุผลที่พวกเขามีข้อจำกัดความรับผิดชอบเกี่ยวกับห้องสมุด และฉันค่อนข้างแน่ใจว่าสิ่งเหล่านั้นถูกแบรนภายใต้ชื่ออื่นหรือไม่?
Eiyrioü von Kauyf

@BillBarth BLAS แน่นอน แต่คุณแน่ใจหรือไม่ว่า LAPACK กิจวัตรนั้นถูกเขียนใหม่เช่นกัน? Afaik ตราบเท่าที่ BLAS 3 มีประสิทธิภาพสูง (หรือมัลติเธรด) จากนั้นก็เป็นผลดีทั้งหมด
stali

1
ฉันคิดว่า BLAS และ LAPACK เป็นชื่อของฟังก์ชั่นและส่วนต่อประสาน มีการใช้งานที่แตกต่างกันมากมาย (ACML, ESSL, MKL, ATLAS และอื่น ๆ )
Bill Barth

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