อ่าน 12 นาที
โปรแกรมย่อยพีชคณิตเชิงเส้นพื้นฐาน
Basic Linear Algebra Subprograms ( BLAS ) คือข้อกำหนดที่กำหนดชุดของรูทีนระดับต่ำสำหรับการดำเนิน การ ทางพีชคณิตเชิงเส้น ทั่วไป เช่นการบวกเวกเตอร์การคูณสเกลาร์ผลคูณดอท การ...
โปรแกรมย่อยพีชคณิตเชิงเส้นพื้นฐาน
| บลาส์ | |
|---|---|
| ปล่อย | กันยายน พ.ศ. 2522 [ 1 ] |
| เวอร์ชันเสถียร | 3.11.0 / 11 พฤศจิกายน 2022 |
| เขียนเป็น | ขึ้นอยู่กับการใช้งาน |
| แพลตฟอร์ม | ข้ามแพลตฟอร์ม |
| พิมพ์ | ห้องสมุด |
| เว็บไซต์ | www.netlib.org/blas/ |
Basic Linear Algebra Subprograms ( BLAS ) คือข้อกำหนดที่กำหนดชุดของรูทีนระดับต่ำสำหรับการดำเนิน การ ทางพีชคณิตเชิงเส้น ทั่วไป เช่นการบวกเวกเตอร์การคูณสเกลาร์ผลคูณดอท การ รวมเชิงเส้น และการคูณเมทริกซ์ รู ทีน เหล่านี้เป็นมาตรฐานโดยพฤตินัยของรูทีนระดับต่ำสำหรับไลบรารีพีชคณิตเชิงเส้น รูทีนเหล่านี้มีส่วนเชื่อมต่อสำหรับทั้งภาษาC ("อินเทอร์เฟซ CBLAS") และFortran ("อินเทอร์เฟซ BLAS") แม้ว่าข้อกำหนด BLAS จะเป็นแบบทั่วไป แต่การใช้งาน BLAS มักได้รับการปรับให้เหมาะสมเพื่อความเร็วบนเครื่องเฉพาะ ดังนั้นการใช้ BLAS จึงสามารถนำมาซึ่งประโยชน์ด้านประสิทธิภาพอย่างมาก การใช้งาน BLAS จะใช้ประโยชน์จากฮาร์ดแวร์จุดลอยตัวพิเศษ เช่น รีจิสเตอร์เวกเตอร์หรือคำสั่ง SIMD
เดิมทีไลบรารี Fortran นี้ถูกสร้างขึ้นในปี 1979 [ 1 ]และอินเทอร์เฟซได้รับการกำหนดมาตรฐานโดย BLAS Technical (BLAST) Forum ซึ่งรายงาน BLAS ล่าสุดสามารถพบได้บนเว็บไซต์netlib [ 2 ]ไลบรารี Fortran นี้เป็นที่รู้จักในชื่อการใช้งานอ้างอิง (บางครั้งเรียกอย่างสับสนว่าไลบรารี BLAS) และไม่ได้ปรับให้เหมาะสมกับความเร็ว แต่เป็นสาธารณสมบัติ[ 3 ] [ 4 ]
ไลบรารีส่วนใหญ่ที่ให้บริการรูทีนพีชคณิตเชิงเส้นนั้นเป็นไปตามอินเทอร์เฟซ BLAS ทำให้ผู้ใช้ไลบรารีสามารถพัฒนาโปรแกรมที่ไม่ขึ้นอยู่กับไลบรารี BLAS ที่ใช้งานอยู่
มีการพัฒนาไลบรารี BLAS จำนวนมาก โดยมุ่งเป้าไปที่แพลตฟอร์มฮาร์ดแวร์ต่างๆ ตัวอย่างเช่นcuBLAS (NVIDIA GPU, GPGPU ), rocBLAS (AMD GPU) และOpenBLASตัวอย่างของสาขาไลบรารี BLAS ที่ใช้ CPU ได้แก่OpenBLAS , BLIS (BLAS-like Library Instantiation Software) , Arm Performance Libraries, [ 5 ] ATLASและIntel Math Kernel Library (iMKL) AMD ดูแลรักษา BLIS เวอร์ชันที่ปรับให้เหมาะสมสำหรับแพลตฟอร์มAMD [ 6 ] ATLAS เป็นไลบรารีแบบพกพาที่ปรับให้เหมาะสมโดยอัตโนมัติสำหรับสถาปัตยกรรมใดๆ iMKL เป็นไลบรารีของผู้จำหน่ายแบบฟรีแวร์[ 7 ]และแบบกรรมสิทธิ์[ 8 ]ที่ปรับให้เหมาะสมสำหรับ x86 และ x86-64 โดยเน้นประสิทธิภาพบนโปรเซสเซอร์Intel [ 9 ] OpenBLAS เป็นไลบรารีโอเพนซอร์สที่ปรับให้เหมาะสมด้วยมือสำหรับสถาปัตยกรรมยอดนิยมหลายๆ แบบ การทดสอบประสิทธิภาพ LINPACKอาศัยรูทีน BLAS เป็นอย่างมากgemmในการวัดประสิทธิภาพ
แอปพลิเคชันซอฟต์แวร์เชิงตัวเลขจำนวนมากใช้ไลบรารีที่เข้ากันได้กับ BLAS เพื่อคำนวณพีชคณิตเชิงเส้น รวมถึงLAPACK , LINPACK , Armadillo , GNU Octave , Mathematica , [ 10 ] MATLAB , [ 11 ] NumPy , [ 12 ] R , Juliaและ Lisp-Stat
ไลบรารีC++std::linalgซึ่งเปิดตัวในC++26นั้นใช้ BLAS เป็นพื้นฐาน
พื้นหลัง
ด้วยการถือกำเนิดของการเขียนโปรแกรมเชิงตัวเลข ไลบรารีซับรูทีนที่ซับซ้อนจึงมีประโยชน์ ไลบรารีเหล่านี้จะประกอบด้วยซับรูทีนสำหรับการดำเนินการทางคณิตศาสตร์ระดับสูงทั่วไป เช่น การหาค่าราก การผกผันเมทริกซ์ และการแก้ระบบสมการ ภาษาที่เลือกใช้คือFORTRANไลบรารีการเขียนโปรแกรมเชิงตัวเลขที่โดดเด่นที่สุดคือScientific Subroutine Package (SSP) ของIBM [ 13 ] ไลบรารีซับรูทีนเหล่านี้ช่วยให้นักเขียนโปรแกรมสามารถมุ่งเน้นไปที่ปัญหาเฉพาะของตนเองและหลีกเลี่ยงการเขียนอัลกอริทึมที่รู้จักกันดีซ้ำ ไลบรารีรูทีนยังมีประสิทธิภาพดีกว่าการใช้งานโดยเฉลี่ย ตัวอย่างเช่น อัลกอริทึมเมทริกซ์อาจใช้การสลับแกนแบบเต็มเพื่อให้ได้ความแม่นยำเชิงตัวเลขที่ดีขึ้น ไลบรารีรูทีนยังมีรูทีนที่มีประสิทธิภาพมากกว่า ตัวอย่างเช่น ไลบรารีอาจมีโปรแกรมสำหรับแก้เมทริกซ์สามเหลี่ยมบน ไลบรารีจะรวมเวอร์ชันความแม่นยำเดี่ยวและความแม่นยำคู่ของบางอัลกอริทึม
ในขั้นต้น ซับรูทีนเหล่านี้ใช้ลูปที่เขียนโค้ดตายตัวสำหรับการดำเนินการระดับต่ำ ตัวอย่างเช่น หากซับรูทีนจำเป็นต้องทำการคูณเมทริกซ์ ซับรูทีนนั้นจะมีลูปซ้อนกันสามชั้น โปรแกรมพีชคณิตเชิงเส้นมีการดำเนินการระดับต่ำทั่วไปหลายอย่าง (การดำเนินการที่เรียกว่า "เคอร์เนล" ซึ่งไม่เกี่ยวข้องกับระบบปฏิบัติการ ) [ 14 ]ระหว่างปี 1973 ถึง 1977 มีการระบุการดำเนินการเคอร์เนลเหล่านี้หลายอย่าง[ 15 ] [ 16 ]การดำเนินการเคอร์เนลเหล่านี้กลายเป็นซับรูทีนที่กำหนดไว้ซึ่งไลบรารีทางคณิตศาสตร์สามารถเรียกใช้ได้ การเรียกใช้เคอร์เนลมีข้อดีเหนือลูปที่เขียนโค้ดตายตัว: รูทีนของไลบรารีจะอ่านง่ายกว่า มีโอกาสเกิดข้อผิดพลาดน้อยลง และการใช้งานเคอร์เนลสามารถปรับให้เหมาะสมเพื่อความเร็วได้ ข้อกำหนดสำหรับการดำเนินการเคอร์เนลเหล่านี้โดยใช้สเกลาร์และเวกเตอร์ซึ่งเป็นซับรูทีนพีชคณิตเชิงเส้นพื้นฐานระดับ 1 (BLAS) ได้รับการเผยแพร่ในปี พ.ศ. 2522 [ 17 ] BLAS ถูกใช้เพื่อนำไลบรารีซับรูทีนพีชคณิตเชิงเส้นLINPACKไป ใช้
แนวคิดนามธรรมของ BLAS ช่วยให้สามารถปรับแต่งเพื่อประสิทธิภาพสูงได้ ตัวอย่างเช่น LINPACK เป็นไลบรารีอเนกประสงค์ที่สามารถใช้งานได้บนเครื่องต่างๆ มากมายโดยไม่ต้องแก้ไข LINPACK สามารถใช้ BLAS เวอร์ชันทั่วไปได้ เพื่อให้ได้ประสิทธิภาพที่ดีขึ้น เครื่องต่างๆ อาจใช้ BLAS เวอร์ชันที่ปรับแต่งเอง เมื่อสถาปัตยกรรมคอมพิวเตอร์มีความซับซ้อนมากขึ้นเครื่องเวกเตอร์ก็ปรากฏขึ้น BLAS สำหรับเครื่องเวกเตอร์สามารถใช้การดำเนินการเวกเตอร์ที่รวดเร็วของเครื่องนั้นได้ (แม้ว่าในที่สุดโปรเซสเซอร์เวกเตอร์จะหมดความนิยมไป แต่คำสั่งเวกเตอร์ใน CPU สมัยใหม่มีความสำคัญอย่างยิ่งต่อประสิทธิภาพสูงสุดในรูทีน BLAS)
คุณสมบัติอื่นๆ ของเครื่องจักรก็พร้อมใช้งานและสามารถนำมาใช้ประโยชน์ได้เช่นกัน ด้วยเหตุนี้ BLAS จึงได้รับการปรับปรุงตั้งแต่ปี 1984 ถึง 1986 ด้วยการดำเนินการเคอร์เนลระดับ 2 ที่เกี่ยวข้องกับการดำเนินการเวกเตอร์-เมทริกซ์ ลำดับชั้นของหน่วยความจำก็ได้รับการยอมรับว่าเป็นสิ่งที่ควรนำมาใช้ประโยชน์เช่นกัน คอมพิวเตอร์หลายเครื่องมีหน่วยความจำแคชซึ่งเร็วกว่าหน่วยความจำหลักมาก การเก็บการจัดการเมทริกซ์ไว้ในตำแหน่งที่กำหนดจะช่วยให้ใช้แคชได้อย่างมีประสิทธิภาพมากขึ้น ในปี 1987 และ 1988 BLAS ระดับ 3 ได้รับการระบุเพื่อดำเนินการเมทริกซ์-เมทริกซ์ BLAS ระดับ 3 สนับสนุนอัลกอริทึมแบบแบ่งบล็อก ไลบรารี LAPACKใช้ BLAS ระดับ 3 [ 18 ]
BLAS ดั้งเดิมเกี่ยวข้องเฉพาะเวกเตอร์และเมทริกซ์ที่จัดเก็บอย่างหนาแน่นเท่านั้น การขยายเพิ่มเติมของ BLAS เช่น สำหรับเมทริกซ์แบบเบาบาง ได้รับการกล่าวถึงแล้ว[ 19 ]
ฟังก์ชันการทำงาน
ฟังก์ชัน BLAS แบ่งออกเป็นสามชุดของรูทีนที่เรียกว่า "ระดับ" ซึ่งสอดคล้องกับทั้งลำดับเวลาของการกำหนดและการเผยแพร่ รวมถึงระดับของพหุนามในความซับซ้อนของอัลกอริทึม การดำเนินการ BLAS ระดับ 1 โดยทั่วไปใช้เวลาเชิงเส้น O ( n )การดำเนินการระดับ 2 ใช้เวลาเชิงกำลังสอง และการดำเนินการระดับ 3 ใช้เวลาเชิงกำลังสาม[ 20 ]การใช้งาน BLAS สมัยใหม่โดยทั่วไปจะให้ทั้งสามระดับ
ระดับ 1
ระดับนี้ประกอบด้วยรูทีนทั้งหมดที่อธิบายไว้ในการนำเสนอ BLAS ฉบับดั้งเดิม (1979) [ 1 ]ซึ่งกำหนดเฉพาะการดำเนินการเวกเตอร์บนอาร์เรย์แบบก้าวเดิน : ผลคูณดอท , บรรทัดฐานเวกเตอร์ , การบวกเวกเตอร์ทั่วไปในรูปแบบ
(เรียกว่า " axpy", "ax บวก y") และการดำเนินการอื่นๆ อีกหลายอย่าง
ระดับ 2
ระดับนี้ประกอบด้วยการดำเนินการเมทริกซ์-เวกเตอร์รวมถึง การคูณ เมทริกซ์- เวก เตอร์ แบบทั่วไป( ) : gemv
รวมถึงตัวแก้สมการเชิงเส้นสำหรับค่า x ด้วย
โดยที่Tเป็นรูปสามเหลี่ยม การออกแบบ BLAS ระดับ 2 เริ่มต้นในปี 1984 โดยมีการเผยแพร่ผลลัพธ์ในปี 1988 [ 21 ]รูทีนย่อยระดับ 2 มีจุดประสงค์เพื่อปรับปรุงประสิทธิภาพของโปรแกรมที่ใช้ BLAS บนโปรเซสเซอร์เวกเตอร์ โดยเฉพาะ ซึ่ง BLAS ระดับ 1 ไม่เหมาะสม "เนื่องจากซ่อนลักษณะเมทริกซ์-เวกเตอร์ของการดำเนินการจากคอมไพเลอร์" [ 21 ]
ระดับ 3
ระดับนี้ ซึ่งได้รับการตีพิมพ์อย่างเป็นทางการในปี พ.ศ. 2533 [ 20 ]ประกอบด้วยการดำเนินการเมทริกซ์-เมทริกซ์รวมถึง " การคูณเมทริกซ์ ทั่วไป " ( gemm) ในรูปแบบ
โดยที่ เมทริกซ์ AและBสามารถสลับตำแหน่งหรือผันแปรเป็นเมทริกซ์เฮอร์มิเชียนได้ภายในรูทีน และเมทริกซ์ทั้งสามสามารถมีช่วงห่างได้ การคูณเมทริกซ์แบบธรรมดาABสามารถทำได้โดยการตั้งค่า αเป็นหนึ่ง และCเป็นเมทริกซ์ศูนย์ทั้งหมดที่มีขนาดเหมาะสม
นอกจากนี้ ในระดับ 3 ยังมีรูทีนสำหรับการคำนวณอีกด้วย
โดยที่Tคือเมทริกซ์สามเหลี่ยมรวมถึงฟังก์ชันการทำงานอื่นๆ ด้วย
เนื่องจากการคูณเมทริกซ์มีอยู่ทั่วไปในแอปพลิเคชันทางวิทยาศาสตร์หลายอย่าง รวมถึงการใช้งาน BLAS ระดับ 3 ส่วนที่เหลือ[ 22 ]และเนื่องจากมีอัลกอริทึมที่เร็วกว่าการคูณเมทริกซ์กับเวกเตอร์แบบซ้ำๆgemmจึงเป็นเป้าหมายหลักของการเพิ่มประสิทธิภาพสำหรับผู้ใช้งาน BLAS ตัวอย่างเช่น การแยกAหรือBออกเป็น เมทริก ซ์บล็อกgemmสามารถนำไปใช้แบบเรียกซ้ำได้นี่เป็นหนึ่งในแรงจูงใจในการรวม พารามิเตอร์ βเพื่อให้สามารถสะสมผลลัพธ์ของบล็อกก่อนหน้าได้ โปรดทราบว่าการแยกส่วนนี้ต้องการกรณีพิเศษβ = 1ซึ่งการใช้งานหลายอย่างเพิ่มประสิทธิภาพสำหรับกรณีนี้ ทำให้ลดการคูณลงหนึ่งครั้งสำหรับแต่ละค่าของCการแยกส่วนนี้ช่วยให้การอ้างอิงมีความใกล้เคียง กันมากขึ้น ทั้งในพื้นที่และเวลาของข้อมูลที่ใช้ในผลิตภัณฑ์ ซึ่งจะใช้ประโยชน์จากแคชในระบบ[ 23 ]สำหรับระบบที่มีแคชมากกว่าหนึ่งระดับ สามารถใช้การบล็อกได้อีกครั้งตามลำดับที่บล็อกถูกใช้ในการคำนวณ การปรับให้เหมาะสมทั้งสองระดับนี้ใช้ในการใช้งานต่างๆ เช่นATLASเมื่อไม่นานมานี้ การใช้งานโดยKazushige Gotoได้แสดงให้เห็นว่าการบล็อกเฉพาะแคช L2ร่วมกับการกระจายการคัดลอกไปยังหน่วยความจำที่ต่อเนื่องอย่างระมัดระวังเพื่อลด การพลาด TLBนั้นดีกว่าATLAS [ 24 ] การ ใช้ งานที่ปรับแต่งมาอย่างดีโดยอิงจากแนวคิดเหล่านี้เป็นส่วนหนึ่งของGotoBLAS , OpenBLASและBLIS
รูปแบบทั่วไปของgemmคือgemm3mซึ่งคำนวณผลคูณเชิงซ้อนโดยใช้ "การคูณเมทริกซ์จริงสามครั้งและการบวกเมทริกซ์จริงห้าครั้ง แทนที่จะเป็นการคูณเมทริกซ์จริงสี่ครั้งและการบวกเมทริกซ์จริงสองครั้งตามปกติ" ซึ่งเป็นอัลกอริทึมที่คล้ายกับอัลกอริทึม Strassenที่ Peter Ungar อธิบายไว้เป็นครั้งแรก[ 25 ]
การนำไปใช้
- เร่งความเร็ว
- เฟรมเวิร์กของApple สำหรับ macOSและiOSซึ่งรวมถึงBLASและLAPACK เวอร์ชัน ที่ ปรับแต่งแล้ว [ 26 ] [ 27 ]
- ไลบรารีประสิทธิภาพ Arm
- ไลบรารีประสิทธิภาพของ Arm ซึ่งรองรับ โปรเซสเซอร์Arm 64 บิตAArch64 มีให้บริการ จากArm [ 5 ]
- แอตลาส
- ซอฟต์แวร์พีชคณิตเชิงเส้นที่ปรับแต่งอัตโนมัติซึ่ง เป็นการใช้งาน แบบโอเพนซอร์สของ BLAS APIสำหรับCและFortran 77 [ 28 ]
- บลิส
- BLIS เป็นเฟรมเวิร์กซอฟต์แวร์การสร้างอินสแตนซ์ไลบรารีแบบ BLAS สำหรับการสร้างอินสแตนซ์อย่างรวดเร็ว ปรับให้เหมาะสมสำหรับ CPU สมัยใหม่ส่วนใหญ่ BLIS เป็นการปรับโครงสร้างใหม่ของ GotoBLAS อย่างสมบูรณ์ ซึ่งช่วยลดปริมาณโค้ดที่ต้องเขียนสำหรับแพลตฟอร์มที่กำหนด[ 29 ] [ 30 ]
- C++ AMP BLAS
- ไลบรารีC++ AMP BLAS เป็นการใช้งาน BLAS แบบโอเพนซอร์ส สำหรับส่วนขยายภาษา AMP ของ Microsoft สำหรับ Visual C++ [ 31 ]
- คูบลาส
- BLAS ที่ได้รับการปรับให้เหมาะสมสำหรับการ์ด GPU ที่ใช้ Nvidia ซึ่งต้องการการเรียกใช้ไลบรารีเพิ่มเติมเพียงเล็กน้อย[ 32 ]
- เอ็นวีบีแอลเอส
- BLAS ที่ได้รับการปรับให้เหมาะสมสำหรับการ์ด GPU ที่ใช้ Nvidia โดยมีฟังก์ชันระดับ 3 เท่านั้น แต่สามารถใช้แทนไลบรารี BLAS อื่นๆ ได้โดยตรง[ 33 ]
- clBLAS
- การ ใช้งาน BLAS ด้วย OpenCLโดย AMD เป็นส่วนหนึ่งของ AMD Compute Libraries [ 34 ]
- คลาสบลาสต์
- การใช้งาน OpenCLที่ปรับแต่งแล้วของ API BLAS ส่วนใหญ่[ 35 ]
- อีเกน บลาส์
- ไลบรารี BLAS ที่เขียน ด้วยภาษา Fortran 77และCซึ่งพัฒนาขึ้นบนพื้นฐานของไลบรารี Eigenที่ได้รับอนุญาตภายใต้MPLโดยรองรับสถาปัตยกรรมx86 , x86-64 , ARM (NEON)และPowerPC
- เอสเอสแอล
- ไลบรารีซับรูทีน ทางวิศวกรรมและวิทยาศาสตร์ของIBM ซึ่งรองรับ สถาปัตยกรรมPowerPC ภายใต้ AIXและLinux [ 36 ]
- โกโตบลา
- การใช้งาน BLAS ที่ได้รับอนุญาตภายใต้ BSD ของKazushige Goto ซึ่ง ได้ รับการปรับแต่งเป็นพิเศษสำหรับ Intel Nehalem / Atom , VIA NanoprocessorและAMD Opteron [ 37 ]
- ห้องสมุดวิทยาศาสตร์ GNU
- การใช้งานหลายแพลตฟอร์มสำหรับรูทีนเชิงตัวเลขจำนวนมาก รวมถึงอินเทอร์เฟซ CBLAS ด้วย
- เอชพี เอ็มแอลไอบี
- ไลบรารีคณิตศาสตร์ของHP รองรับ สถาปัตยกรรมIA-64 , PA-RISC , x86และOpteron ภายใต้ระบบ ปฏิบัติการHP-UXและLinux
- อินเทล เอ็มเคแอล
- ไลบรารีIntel Math Kernelซึ่งรองรับ x86 32 บิตและ 64 บิต สามารถดาวน์โหลดได้ฟรีจากIntel [ 7 ] รวมถึงการเพิ่มประสิทธิภาพสำหรับซีพียู Intel Pentium , Coreและ Intel Xeon และ Intel Xeon Phi ; รองรับLinux , WindowsและmacOS [ 38 ]
- แมธเคซาน
- ไลบรารีคณิตศาสตร์ของNEC รองรับ สถาปัตยกรรม NEC SXภายใต้SUPER-UXและItaniumภายใต้Linux [ 39 ]
- เน็ตลิบ บีแอลเอส
- การใช้งานอ้างอิงอย่างเป็นทางการบนNetlibเขียนด้วยFortran 77 [ 40 ]
- เน็ตลิบ ซีบีแอลเอส
- อินเทอร์เฟซ อ้างอิงCสำหรับ BLAS นอกจากนี้ยังสามารถเรียกใช้ Fortran BLAS จาก C ได้เช่นกัน (และเป็นที่นิยม) [ 41 ]
- โอเพ่นบลาส์
- BLAS ที่ได้รับการปรับให้เหมาะสมตาม GotoBLAS รองรับโปรเซสเซอร์x86 , x86-64 , MIPS , ARMและRISC-V [ 42 ]
- พีดีแอลบี/เอสเอ็กซ์
- ห้องสมุดคณิตศาสตร์สาธารณะของNEC สำหรับ ระบบ NEC SX-4 [ 43 ]
- ร็อคบลาส์
- การใช้งานที่ทำงานบนGPU ของ AMD ผ่าน ROCm [ 44 ]
- เอสซีเอสแอล
- ไลบรารีซอฟต์แวร์การคำนวณทางวิทยาศาสตร์ของSGI ประกอบด้วยการใช้งาน BLAS และ LAPACK สำหรับ เวิร์กสเตชันIrix ของ SGI [ 45 ]
- ห้องสมุดการแสดงซัน
- BLAS และ LAPACK ที่ได้รับการปรับให้เหมาะสมสำหรับสถาปัตยกรรมSPARC , CoreและAMD64 ภายใต้ Solaris 8, 9 และ 10 รวมถึง Linux [ 46 ]
- ยูบลาส
- ไลบรารีคลาสเทมเพลตC++ทั่วไป ที่ให้ฟังก์ชัน BLAS เป็นส่วนหนึ่งของ ไลบรารี Boostโดยให้การผูกกับไลบรารีเร่งความเร็วฮาร์ดแวร์จำนวนมากในสัญกรณ์ที่เป็นหนึ่งเดียว ยิ่งไปกว่านั้น uBLAS มุ่งเน้นไปที่ความถูกต้องของอัลกอริธึมโดยใช้คุณสมบัติ C++ ขั้นสูง[ 47 ]
ห้องสมุดที่ใช้ BLAS
- อาร์มาดิลโล
- Armadilloเป็นไลบรารีพีชคณิตเชิงเส้น C++ ที่มุ่งเน้นความสมดุลที่ดีระหว่างความเร็วและความง่ายในการใช้งาน โดยใช้คลาสเทมเพลต และมีลิงก์เสริมไปยัง BLAS/ATLAS และ LAPACK ได้รับการสนับสนุนโดยNICTA (ในออสเตรเลีย) และได้รับอนุญาตภายใต้ใบอนุญาตฟรี[ 48 ]
- แลปแพ็ค
- LAPACK เป็นไลบรารีพีชคณิตเชิงเส้นระดับสูงที่สร้างขึ้นบนพื้นฐานของ BLAS เช่นเดียวกับ BLAS มีตัวอย่างการใช้งานอ้างอิงอยู่ แต่ก็มีทางเลือกอื่น ๆ อีกมากมาย เช่น libFlame และ MKL
- มิร์
- ไลบรารี เชิงตัวเลขทั่วไปที่เร่งความเร็วด้วย LLVMสำหรับวิทยาศาสตร์และการเรียนรู้ของเครื่องที่เขียนด้วยภาษาDโดยมีโปรแกรมย่อยพีชคณิตเชิงเส้นทั่วไป (GLAS) สามารถสร้างบนการใช้งาน CBLAS ได้[ 49 ]
ไลบรารีที่คล้ายกัน (ไม่สามารถใช้งานร่วมกับ BLAS ได้)
- ธาตุ
- Elemental เป็นซอฟต์แวร์โอเพนซอร์สสำหรับพีชคณิตเชิงเส้นตรงแบบหนาแน่นและเบาบางของหน่วยความจำแบบกระจาย และการเพิ่มประสิทธิภาพ [ 50 ]
- ฮาเซม
- เป็นไลบรารีเทมเพลต C++ ที่สามารถแก้สมการเชิงเส้นและคำนวณค่าลักษณะเฉพาะได้ ได้รับอนุญาตภายใต้ใบอนุญาต BSD [ 51 ]
- ลามะ
- ไลบรารีสำหรับแอปพลิเคชันคณิตศาสตร์เร่งความเร็ว ( LAMA ) เป็นไลบรารีเทมเพลต C++ สำหรับเขียนโปรแกรมแก้ปัญหาเชิงตัวเลขที่กำหนดเป้าหมายฮาร์ดแวร์ประเภทต่างๆ (เช่นGPUผ่านCUDAหรือOpenCL ) บน ระบบ หน่วยความจำแบบกระจายโดยซ่อนการเขียนโปรแกรมเฉพาะฮาร์ดแวร์จากนักพัฒนาโปรแกรม
- เอ็มทีแอล4
- ไลบรารี เทมเพลตเมทริกซ์เวอร์ชัน 4 (Matrix Template Library: MTL4 ) เป็นไลบรารีเทมเพลต C++ทั่วไปที่ให้ฟังก์ชัน BLAS ทั้งแบบเบาบางและหนาแน่น MTL4 สร้างอินเทอร์เฟซที่ใช้งานง่าย (คล้ายกับMATLAB ) และใช้งานได้หลากหลายด้วย การ เขียนโปรแกรมแบบทั่วไป
BLAS แบบเบาบาง
มีการเสนอ ส่วนขยายเพิ่มเติมหลายอย่างสำหรับ BLAS เพื่อจัดการกับเมทริกซ์แบบสปาร์สตลอดประวัติศาสตร์ของไลบรารีนี้ ในที่สุดก็มีการกำหนดมาตรฐานชุดรูทีนเคอร์เนลเมทริกซ์แบบสปาร์สจำนวนเล็กน้อยในปี 2545 [ 52 ]
BLAS แบบกลุ่ม
ฟังก์ชัน BLAS แบบดั้งเดิมยังได้รับการพอร์ตไปยังสถาปัตยกรรมที่รองรับการประมวลผลแบบขนานจำนวนมาก เช่นGPUด้วย โดยทั่วไปแล้ว ฟังก์ชัน BLAS แบบดั้งเดิมจะให้ประสิทธิภาพที่ดีสำหรับเมทริกซ์ขนาดใหญ่ อย่างไรก็ตาม เมื่อคำนวณผลคูณเมทริกซ์กับเมทริกซ์ของเมทริกซ์ขนาดเล็กจำนวนมากโดยใช้รูทีน GEMM สถาปัตยกรรมเหล่านั้นจะแสดงให้เห็นถึงการสูญเสียประสิทธิภาพอย่างมาก เพื่อแก้ไขปัญหานี้ ในปี 2017 ได้มีการกำหนดเวอร์ชันแบบแบตช์ของฟังก์ชัน BLAS ขึ้น[ 53 ]
ยกตัวอย่างเช่น รูทีน GEMM จากข้างต้น เวอร์ชันแบบแบตช์จะทำการคำนวณต่อไปนี้พร้อมกันสำหรับเมทริกซ์จำนวนมาก:
ดัชนีในวงเล็บเหลี่ยมแสดงว่าการดำเนินการนั้นกระทำกับเมทริกซ์ทั้งหมดใน สแต็ก บ่อยครั้งที่การดำเนินการนี้ถูกนำไปใช้กับโครงสร้างหน่วยความจำแบบแบตช์ที่มีช่วงก้าว ซึ่งเมทริกซ์ทั้งหมดจะถูกต่อกันในอาร์เรย์, และ
ฟังก์ชัน BLAS แบบแบตช์สามารถเป็นเครื่องมืออเนกประสงค์และช่วยให้สามารถใช้งานตัวรวมเลขชี้กำลังและตัวรวม Magnusที่จัดการช่วงเวลาการรวมที่ยาวนานด้วยขั้นตอนเวลาจำนวนมากได้ อย่างรวดเร็ว [ 54 ]ในที่นี้การยกกำลังเมทริกซ์ซึ่งเป็นส่วนที่มีค่าใช้จ่ายในการคำนวณสูงของการรวม สามารถดำเนินการแบบขนานสำหรับทุกขั้นตอนเวลาได้โดยใช้ฟังก์ชัน BLAS แบบแบตช์
ดูเพิ่มเติม
- รายชื่อห้องสมุดตัวเลข
- รายชื่อไลบรารีคณิตศาสตร์โอเพนซอร์ส
- ไลบรารี Math Kernel Libraryคือไลบรารีทางคณิตศาสตร์ที่ปรับให้เหมาะสมกับ สถาปัตยกรรม ของ Intelประกอบด้วย BLAS และ LAPACK
- พีชคณิตเชิงเส้นเชิงตัวเลขคือประเภทของปัญหาที่ BLAS แก้ไข
อ่านเพิ่มเติม
- BLAST Forum (21 สิงหาคม 2544), มาตรฐานฟอรัมทางเทคนิคของโปรแกรมย่อยพีชคณิตเชิงเส้นพื้นฐาน (BLAST)น็อกซ์วิลล์ รัฐเทนเนสซี: มหาวิทยาลัยเทนเนสซี
- Dodson, DS; Grimes, RG (1982), "ข้อสังเกตเกี่ยวกับอัลกอริทึม 539: โปรแกรมย่อยพีชคณิตเชิงเส้นพื้นฐานสำหรับการใช้งาน Fortran", ACM Trans. Math. Softw. , 8 (4): 403– 404, doi : 10.1145/356012.356020 , S2CID 43081631
- Dodson, DS (1983), "คำแก้ไข: ข้อสังเกตเกี่ยวกับ "อัลกอริทึม 539: รูทีนย่อยพีชคณิตเชิงเส้นพื้นฐานสำหรับการใช้งาน FORTRAN"", ACM Trans. Math. Softw. , 9 : 140, doi : 10.1145/356022.356032 , S2CID 22163977
- JJ Dongarra, J. Du Croz, S. Hammarling และ RJ Hanson, อัลกอริทึม 656: ชุดโปรแกรมย่อยพีชคณิตเชิงเส้นพื้นฐานของ FORTRAN ที่ขยายเพิ่มเติม, ACM Trans. Math. Softw., 14 (1988), หน้า 18–32
- JJ Dongarra, J. Du Croz, IS Duff และ S. Hammarling, ชุดโปรแกรมย่อยพีชคณิตเชิงเส้นพื้นฐานระดับ 3, ACM Trans. Math. Softw., 16 (1990), หน้า 1–17
- JJ Dongarra, J. Du Croz, IS Duff และ S. Hammarling, อัลกอริทึม 679: ชุดโปรแกรมย่อยพีชคณิตเชิงเส้นพื้นฐานระดับ 3, ACM Trans. Math. Softw., 16 (1990), หน้า 18–28
- BLAS ใหม่
- LS Blackford, J. Demmel, J. Dongarra, I. Duff, S. Hammarling, G. Henry, M. Heroux, L. Kaufman, A. Lumsdaine, A. Petitet, R. Pozo, K. Remington, RC Whaley, ชุดโปรแกรมย่อยพีชคณิตเชิงเส้นพื้นฐาน (BLAS) ที่ได้รับการปรับปรุง, ACM Trans. Math. Softw., 28-2 (2002), หน้า 135–151
- J. Dongarra, มาตรฐานฟอรัมทางเทคนิคของโปรแกรมย่อยพีชคณิตเชิงเส้นพื้นฐาน, วารสารนานาชาติของการประยุกต์ใช้งานประสิทธิภาพสูงและซูเปอร์คอมพิวเตอร์, 16(1) (2002), หน้า 1–111 และ วารสารนานาชาติของการประยุกต์ใช้งานประสิทธิภาพสูงและซูเปอร์คอมพิวเตอร์, 16(2) (2002), หน้า 115–199
ลิงก์ภายนอก
- หน้าแรกของ BLASบน Netlib.org
- คำถามที่พบบ่อยเกี่ยวกับ BLAS
- คู่มืออ้างอิงฉบับย่อ BLASจากคู่มือผู้ใช้ LAPACK
- บันทึกประวัติศาสตร์ปากเปล่าของลอว์สันหนึ่งในผู้เขียนดั้งเดิมของ BLAS กล่าวถึงการสร้าง BLAS ในการสัมภาษณ์ประวัติศาสตร์ปากเปล่า ชาร์ลส์ แอล. ลอว์สัน การสัมภาษณ์ประวัติศาสตร์ปากเปล่าโดย โทมัส ไฮจ์ วันที่ 6 และ 7 พฤศจิกายน 2547 ซานเคลเมนเต รัฐแคลิฟอร์เนีย สมาคมคณิตศาสตร์อุตสาหกรรมและประยุกต์ ฟิลาเดลเฟีย รัฐเพนซิลเวเนีย
- บทสัมภาษณ์ ประวัติศาสตร์ปากเปล่าของดองการ์ราในบทสัมภาษณ์ประวัติศาสตร์ปากเปล่านี้ แจ็ค ดองการ์ราได้สำรวจความสัมพันธ์ในช่วงแรกของ BLAS กับ LINPACK การสร้าง BLAS เวอร์ชันระดับสูงขึ้นสำหรับสถาปัตยกรรมใหม่ ๆ และงานในภายหลังของเขาเกี่ยวกับระบบ ATLAS เพื่อปรับแต่ง BLAS ให้เหมาะสมกับเครื่องจักรเฉพาะโดยอัตโนมัติ แจ็ค ดองการ์รา บทสัมภาษณ์ประวัติศาสตร์ปากเปล่าโดย โทมัส ไฮจ์ 26 เมษายน 2548 มหาวิทยาลัยเทนเนสซี น็อกซ์วิลล์ รัฐเทนเนสซี สมาคมคณิตศาสตร์อุตสาหกรรมและประยุกต์ ฟิลาเดลเฟีย รัฐเพนซิลเวเนีย
- BLAS มีประสิทธิภาพสูงขนาดนี้ได้อย่างไร?การคูณเมทริกซ์ขนาด 1000×1000 แบบง่ายๆ จำนวน 10 ครั้ง ( การคูณและบวกเลขทศนิยม 10 ครั้ง ) ใช้เวลา 15.77 วินาที บนโปรเซสเซอร์ 2.6 GHz ในขณะที่การใช้งาน BLAS ใช้เวลาเพียง 1.32 วินาที
- ภาพรวมของโปรแกรมย่อยพีชคณิตเชิงเส้นพื้นฐานแบบเบาบาง: มาตรฐานใหม่จากฟอรัมทางเทคนิค BLAS [2]
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ โปรแกรมย่อยพีชคณิตเชิงเส้นพื้นฐาน
Basic Linear Algebra Subprograms ( BLAS ) คือข้อกำหนดที่กำหนดชุดของรูทีนระดับต่ำสำหรับการดำเนิน การ ทางพีชคณิตเชิงเส้น ทั่วไป เช่นการบวกเวกเตอร์การคูณสเกลาร์ผลคูณดอท การ...
พื้นหลัง
ด้วยการถือกำเนิดของการเขียนโปรแกรมเชิงตัวเลข ไลบรารีซับรูทีนที่ซับซ้อนจึงมีประโยชน์ ไลบรารีเหล่านี้จะประกอบด้วยซับรูทีนสำหรับการดำเนินการทางคณิตศาสตร์ระดับสูงทั่วไป เช่น การหาค่าราก การผกผันเมทริกซ์ และการแก้ระบบสมการ ภาษาที่เลือกใช้คือ FORTRAN...
ฟังก์ชันการทำงาน
ฟังก์ชัน BLAS แบ่งออกเป็นสามชุดของรูทีนที่เรียกว่า "ระดับ" ซึ่งสอดคล้องกับทั้งลำดับเวลาของการกำหนดและการเผยแพร่ รวมถึงระดับของพหุนามในความซับซ้อนของอัลกอริทึม การดำเนินการ BLAS ระดับ 1 โดยทั่วไปใช้ เวลาเชิงเส้น O ( n ) การ ดำเนินการระดับ 2 ใช้เวลาเชิงกำลังสอง...
ระดับ 1
ระดับนี้ประกอบด้วยรูทีนทั้งหมดที่อธิบายไว้ในการนำเสนอ BLAS ฉบับดั้งเดิม (1979) [ 1 ] ซึ่งกำหนดเฉพาะ การดำเนินการเวกเตอร์ บน อาร์เรย์แบบก้าวเดิน : ผลคูณดอท , บรรทัดฐานเวกเตอร์ , การบวกเวกเตอร์ทั่วไปในรูปแบบ