Кіріспе

Жалпы сызықтық алгебра операцияларын орындау процедуралары Негізгі сызықтық алгебра кіші бағдарламалары (BLAS) – векторларды қосу, скалярлық көбейту, векторлық көбейту, сызықтық комбинациялар және матрица көбейту сияқты жиі қолданылатын сызықтық алгебра операцияларын орындау үшін төменгі деңгейдегі процедуралар жиынтығын сипаттайтын ереже. Олар сызықтық алгебра кітапханалары үшін де-факто стандартты төменгі деңгейлі процедуралар болып табылады; процедуралар C ("CBLAS интерфейсі") және Fortran ("BLAS интерфейсі") үшін де қолжетімді. BLAS ережесі жалпы мақсатта болғанымен, BLAS жүзеге асырулары көбінесе нақты машинада жылдамдық үшін оңтайландырылады, сондықтан оларды пайдалану айтарлықтай өнімділік артықшылықтарын беруі мүмкін. BLAS жүзеге асырулары векторлық тіркегіштер немесе SIMD нұсқаулары сияқты арнайы қалқыма нүктелік аппараттық құралдардың мүмкіндіктерін пайдаланады. Ол 1979 жылы Fortran кітапханасы ретінде пайда болды және оның интерфейсі BLAS техникалық (BLAST) форумымен стандартталды, соңғы BLAS есебі netlib веб-сайтында қолжетімді. Бұл Fortran кітапханасы анықтамалық жүзеге асыру ретінде белгілі (кейде шатастыратын түрде BLAS кітапханасы деп аталады) және жылдамдық үшін оңтайландырылмаған, бірақ ашық қолжетімді. Сызықтық алгебра процедураларын ұсынатын көптеген кітапханалар BLAS интерфейсіне сәйкес келеді, бұл кітапхана пайдаланушыларына қолданылып жатқан BLAS кітапханасына тәуелді емес бағдарламаларды жасауға мүмкіндік береді. Әртүрлі аппараттық платформаларға бағытталған көптеген BLAS кітапханалары әзірленді. Мысалдарға cuBLAS (NVIDIA GPU, GPGPU), rocBLAS (AMD GPU) және OpenBLAS кіреді. CPU-ге негізделген BLAS кітапханаларының тармақтарына келесілер жатады: OpenBLAS, BLIS (BLAS-қа ұқсас кітапханалық инстанциялау бағдарламалық құралы), Arm Performance Libraries, ATLAS және Intel Math Kernel Library (iMKL). AMD AMD платформасы үшін оңтайландырылған BLIS-тің түйінді нұсқасын ұстап тұрады. ATLAS – кез келген архитектураға автоматты түрде өзін-өзі оңтайландыратын портативті кітапхана. iMKL – Intel процессорларына басымдық берілген x86 және x86 64 үшін оңтайландырылған, тегін және коммерциялық дистрибутивті кітапхана. OpenBLAS – көптеген танымал архитектуралар үшін қолмен оңтайландырылған ашық кодты кітапхана. LINPACK-тің өлшемдері BLAS процедурасы gemm-ге көп көлеңке береді. Көптеген сандық бағдарламалық қамтамасы BLAS-пен үйлесімді кітапханаларды сызықтық алгебра есептеулерін орындау үшін пайдаланады, соның ішінде LAPACK, LINPACK, Armadillo, GNU Octave, Mathematica, MATLAB, NumPy, R, Julia және Lisp Stat.

Өмірбаян

Сандық бағдарламалау пайда болғаннан бастап, күрделі кіші программалар жиынтығы пайдалы болды. Бұл жиынтықтарда түбір табу, матрицаны инверсиялау және теңдеулер жүйесін шешу сияқты жалпы жоғары деңгейдегі математикалық операциялар үшін кіші программалар болар еді. Таңдау тілі FORTRAN болды. Сандық бағдарламалаудағы ең танымал кіші программалар жиынтығы IBM-нің Ғылыми кіші программалар жиынтығы (SSP) еді. Бұл кіші программалар жиынтығы бағдарламашыларға нақты проблемаларға назар аударуға және жақсы белгілі алгоритмдерді қайтадан іске асырудан аулақ болуға мүмкіндік берді. Кіші программалардың процедуралары орташа есептеулерден де жақсырақ болар еді; мысалы, матрицалық алгоритмдер жақсырақ сандық дәлдікке қол жеткізу үшін толық айналуды қолдануы мүмкін. Кіші программалардың процедуралары да тиімдірек болар еді. Мысалы, жиынтықта жоғарғы үшбұрышты матрицаны шешуге арналған бағдарлама болуы мүмкін. Жиынтықтар кейбір алгоритмдердің бір және қос дәлдіктегі нұсқаларын қамтитын болды. Бастапқыда бұл кіші программалар төменгі деңгейдегі операциялары үшін қатты кодталған циклдарды пайдаланды. Мысалы, егер кіші программа матрицаны көбейтуді орындау қажет болса, онда кіші программада үш ұялы цикл болар еді. Сызықтық алгебра бағдарламаларында көптеген жалпы төменгі деңгейдегі операциялар бар (әдебиетте "ядролық" операциялар деп аталады, бұл операциялық жүйелермен байланысты емес). 1973 және 1977 жылдар аралығында осы ядролық операциялардың бірнешесі анықталды. Бұл ядролық операциялар математикалық кіші программалар жиынтықтары шақыра алатын анықталған кіші программаларға айналды. Ядролық шақырулар қатты кодталған циклдарға қарағанда бірнеше артықшылықтарға ие болды: кіші программаның процедурасы оқуға оңайырақ болар еді, қателерге ұшырау ықтималдығы азайды және ядроны іске асыру жылдамдық үшін оңтайландырылуы мүмкін. 1979 жылы скалярлар мен векторларды пайдалана отырып, осы ядролық операциялардың сипаттамасы, 1-деңгейлі негізгі сызықтық алгебра кіші программалары (BLAS) жарияланды. BLAS сызықтық алгебраның LINPACK кіші программалар жиынтығын іске асыру үшін пайдаланылды. BLAS абстракциясы жоғары өнімділікті қамтамасыз ету үшін бейімдеуге мүмкіндік береді. Мысалы, LINPACK - бұл көптеген машиналарда өзгеріссіз пайдалануға болатын жалпы мақсаттағы жиынтық. LINPACK BLAS-тың жалпы нұсқасын пайдалана алады. Өнімділікті арттыру үшін әртүрлі машиналар BLAS-тың арнайы нұсқаларын пайдалана алады. Компьютерлік архитектура жетілдіріле келе, векторлық машиналар пайда болды. BLAS векторлық машина үшін машинаның жылдам векторлық операцияларын пайдалана алады. (Векторлық процессорлар кейіннен сұраныстан шығып қалғанмен, BLAS кіші программаларының ең жақсы жұмыс істеуі үшін қазіргі заманғы процессорлардағы векторлық нұсқаулар өте маңызды.) Басқа машиналардың мүмкіндіктері де пайда болды және оларды пайдалануға болады. Осының нәтижесінде, BLAS 1984 жылдан 1986 жылға дейін векторлық-матрицалық операцияларға қатысты 2-деңгейлі ядролық операциялармен толықтырылды. Жедел жад иерархиясы да пайдалану үшін маңызды екені анықталды. Көптеген компьютерлерде негізгі жадтан әлдеқайда жылдам кэш жады бар; матрицалық манипуляцияларды локальды түрде сақтау кэш жадының тиімді пайдаланылуын қамтамасыз етеді. 1987 және 1988 жылдары 3-деңгейлі BLAS матрицалық-матрицалық операцияларды орындау үшін анықталды. 3-деңгейлі BLAS блокпен бөлінген алгоритмдерді қолданады. LAPACK жиынтығы 3-деңгейлі BLAS-ты пайдаланады. Бастапқы BLAS тек тығыз сақталған векторлар мен матрицаларға қатысты. BLAS-қа қосымша кеңейтулер, мысалы, сирең матрицалар үшін, қарастырылды.

Функционалдылығы

BLAS функционалдығы "деңгейлер" деп аталатын үш жиынға жіктеледі, олар анықтама мен жарияланымның хронологиялық тәртібіне, сондай-ақ алгоритмдердің күрделілігіндегі полиномның дәрежесіне сәйкес келеді. 1-деңгей BLAS операциялары әдетте сызықтық уақытты, O(n) қажет етеді, 2-деңгей операциялары квадраттық уақытты, ал 3-деңгей операциялары кубикалық уақытты қажет етеді. Қазіргі заманғы BLAS іске асырулары әдетте барлық үш деңгейді де қамтиды.

BLAS-ты қолданатын кітапханалар

Armadillo Armadillo – жылдамдық пен қолданудың қарапайымдылығы арасындағы жақсы тепе-теңдікке ұмтылатын C++ сызықтық алгебра кітапханасы. Ол үлгілік кластарды пайдаланады және BLAS/ATLAS және LAPACK-ке қосымша байланыстарға мүмкіндік береді. Оған NICTA (Австралия) демеушілік етеді және ол тегін лицензия бойынша таратылады. LAPACK LAPACK – BLAS негізінде құрылған жоғары деңгейлі сызықтық алгебра кітапханасы. BLAS сияқты, оның да эталондық нұсқасы бар, бірақ libFlame және MKL сияқты көптеген баламалары да бар. Mir Mir – ғылым және машиналық оқыту үшін LLVM жеделдеткіші бар, D тілінде жазылған жалпы сандық кітапхана. Ол жалпы сызықтық алгебра кіші бағдарламаларын (GLAS) ұсынады. Оны CBLAS іске асыру негізінде құруға болады.

Ұқсас кітапханалар (BLAS-пен үйлесімсіз)

Elemental - бұл ашық бастапқы кодты бағдарламалық қамтамасыз ету, тығыз және сирек жадты тікелей сызықтық алгебра және оптимизация үшін арналған. HASEM – сызықтық теңдеулерді шеше алатын және өзіндік мәндерді есептей алатын C++ үлгі кітапханасы. Ол BSD лицензиясымен лицензияланған. LAMA – Accelerated Math Applications (LAMA) кітапханасы, әр түрлі аппараттық құрылғыларды (мысалы, CUDA немесе OpenCL арқылы GPU) қолдана отырып, бөлінген жад жүйелерінде сандық шешімдерді жазуға арналған C++ үлгі кітапханасы. Бұл кітапхана аппараттық ерекшеліктерді бағдарламашыдан жасырады. MTL4 – Matrix Template Library 4-ші нұсқасы, жалпы C++ үлгі кітапханасы болып табылады, ол сирек және тығыз BLAS функционалдығын қамтамасыз етеді. MTL4 интуитивті интерфейс (MATLAB-қа ұқсас) және жалпы бағдарламалаудың арқасында кең қолданылуға ие.

Бөлшекті BLAS

Кітапхана тарихы бойында BLAS-қа сирең матрицаларды өңдеу үшін бірнеше қосымшалар ұсынылды; 2002 жылы шамалы матрицаларға арналған негізгі процедуралар жиынтығы стандартталды.