Subprogram Aljabar Linear Dasar

**Subprogram Aljabar Linear Dasar** (SALD, dalam Bahasa Inggris: *Basic Linear Algebra Subprograms, BLAS*) adalah spesifikasi yang mengatur kumpulan rutin tingkat rendah yang berkaitan dengan melakukan operasi aljabar linear umum seperti penambahan vektor, perkalian skalar, perkalian titik, kombinasi linear, dan perkalian matriks. Operasi-operasi tersebut secara *[[de facto]]* adalah standar rutin tingkat rendah untuk pustaka tentang aljabar linear. Meskipun spesifikasi SALD bersifat umum, implementasi SALD pada perangkat tertentu sering kali mengoptimalkan aspek kecepatan, agar penggunaannya dapat memberikan peforma yang menguntungkan secara substansial. Implementasi SALD akan memanfaatkan perangkat keras titik kambang khusus seperti register vektor atau instruksi SIMD.

SALD berasal dari pustaka Fortran pada tahun 1979 dan antarmukanya distandarkan oleh BLAS Technical (BLAST) Forum, dengan laporan SALD terbaru dapat ditemukan pada situs web netlib. Pustaka Fortran ini dikenal sebagai implementasi acuan dan tidak dioptimalkan untuk kecepatan, tetapi berada dalam domain publik.

Kebanyakan pustaka menawarkan rutinitas aljabar linear yang kompatibel dengan antarmuka SALD, memungkinkan pengguna pustaka untuk mengembangkan program yang tidak bergantung dengan pustaka SALD yang mereka gunakan. Contoh perpustakaan SALD meliputi: *AMD Core Math Library* (ACML), *Arm Performance Libraries*, *Automatically Tuned Linear Algebra Software* (ATLAS), *Intel Math Kernel Library* (MKL), dan *OpenBLAS*. ACML sudah tidak didukung oleh produsennya. ATLAS adalah pustaka portabel yang secara otomatis mengoptimalkan dirinya sendiri keadaan arsitektur ia dijalankan. MKL adalah *freeware* dan *vendor library* berbayar yang dioptimalkan untuk x86 dan x86-64 dengan penekanan kinerja pada prosesor Intel. OpenBLAS adalah pustaka *open-source* yang dioptimalkan untuk banyak arsitektur populer. LINPACK *benchmark* sangat bergantung pada *routine* `gemm`pada SALD untuk prosesnya dalam mengukur performa.

Banyak aplikasi perangkat lunak numerik menggunakan pustaka yang kompatibel dengan SALD ketika melakukan komputasi aljabar linear, termasuk Armadillo, LAPACK, LINPACK, GNU Octave, Mathematica, MATLAB, NumPy, R, dan Julia.

## Fungsi
Fungsi SALD dikategorikan ke dalam tiga kelompok rutin yang disebut dengan "tingkat", yang bersesuaian dengan urutan kronologis dari definisi dan publikasi, serta derajat polinomial dalam kompleksitas algoritma; Operasi SALD tingkat 1 biasanya memakan waktu linear, O(n), operasi tingkat 2 waktu kuadratik, dan operasi tingkat 3 waktu kubik.  Implementasi SALD modern biasanya menyediakan ketiga tingkat tersebut.

### Tingkat 1
Tingkat ini terdiri dari semua rutin yang dijelaskan dalam presentasi asli SALD (1979), yang hanya mendefinisikan operasi vektor pada susunan langkah: hasil kali titik, norma vektor, penambahan vektor secara umum dengan bentuk

: \boldsymbol{y} \leftarrow \alpha \boldsymbol{x} + \boldsymbol{y}

(disebut  dengan "`axpy`", "***a''' '''x''' '''p'''lus '''y***") dan beberapa operasi lainnya.

### Tingkat 2
Tingkat ini mengandung operasi matriks dan vektor umum (***ge'''neralized '''m'''atrix-'''v'''ector'', <code>gemv</code>), termasuk diantaranya adalah sebuah perkalian matriks dan vektor yang secara umum berbentuk

: <math>\boldsymbol{y} \leftarrow \alpha \boldsymbol{A} \boldsymbol{x} + \beta \boldsymbol{y}</math>

Dan ''solver'' untuk menyelesaikan

: <math>\boldsymbol{T} \boldsymbol{x} = \boldsymbol{y}</math>

dengan <math>\boldsymbol{T}</math> berupa matriks segitiga. Desain SALD Tingkat 2 dimulai pada tahun 1984, dengan hasil yang dipublikasikan pada tahun 1988. Subrutin Tingkat 2 secara khusus ditujukan untuk meningkatkan kinerja program yang menggunakan SALD pada [[prosesor vektor]], karena SALD Tingkat 1 suboptimal "karena mereka menyembunyikan sifat operasi matriks-vektor dari [[kompilator]]." 

=== Tingkat 3 ===
Pada Tingkat ini, yang diterbitkan secara resmi pada tahun 1990, berisi ''operasi matriks dengan matriks'', termasuk "[[perkalian matriks]] umum" (***ge**neral **m**atrix **m**ultiplication'',<code>gemm</code>), dalam bentuk

: <math>\boldsymbol{C} \leftarrow \alpha \boldsymbol{A} \boldsymbol{B} + \beta \boldsymbol{C}</math>,

dengan <math>\boldsymbol{A}</math> dan <math>\boldsymbol{B}</math> secara opsional dapat dikenai [[Transpos|operasi transpos]] maupun [[konjungat Hermite]] di dalam rutin tersebut. Selain itu, ketiga matriks dapat dinyatakan dalam blok data yang kontinu (''strided''). Perkalian matriks <math>\boldsymbol{AB}</math> yang biasa dapat dilakukan dengan menetapkan <math>\alpha</math> bernilai sama dengan satu dan <math>\boldsymbol{C}</math> sebagai matriks nol dengan ukuran yang sesuai. Salah satu rutin yang juga termasuk dalam Level 3 adalah komputasi

: <math>\boldsymbol{B} \leftarrow \alpha \boldsymbol{T}^{-1} \boldsymbol{B}</math>,

dengan <math>\boldsymbol{T}</math> berupa matriks segitiga.

== Sparse BLAS ==
Beberapa ekstensi BLAS untuk menangani [[matriks rongga]] (Inggris: ''sparse matrix'') telah diusulkan selama sejarah pustaka; satu himpunan kecil rutin kernel untuk matriks rongga akhirnya distandarkan pada tahun 2002.

== Referensi ==
<references />

== Daftar pustaka ==

* 
* 
* 
* J. J. Dongarra, J. Du Croz, S. Hammarling, and R. J. Hanson, Algorithm 656: An extended set of FORTRAN Basic Linear Algebra Subprograms, ACM Trans. Math. Softw., 14 (1988), pp.&nbsp;18&#x2013;32.
* J. J. Dongarra, J. Du Croz, I. S. Duff, and S. Hammarling, A set of Level 3 Basic Linear Algebra Subprograms, ACM Trans. Math. Softw., 16 (1990), pp.&nbsp;1&#x2013;17.
* J. J. Dongarra, J. Du Croz, I. S. Duff, and S. Hammarling, Algorithm 679: A set of Level 3 Basic Linear Algebra Subprograms, ACM Trans. Math. Softw., 16 (1990), pp.&nbsp;18&#x2013;28.

**New BLAS'''

* L. S. Blackford, J. Demmel, J. Dongarra, I. Duff, S. Hammarling, G. Henry, M. Heroux, L. Kaufman, A. Lumsdaine, A. Petitet, R. Pozo, K. Remington, R. C. Whaley, An Updated Set of Basic Linear Algebra Subprograms (BLAS), ACM Trans. Math. Softw., 28-2 (2002), pp.&nbsp;135&#x2013;151.
* J. Dongarra, Basic Linear Algebra Subprograms Technical Forum Standard, International Journal of High Performance Applications and Supercomputing, 16(1) (2002), pp.&nbsp;1&#x2013;111, and International Journal of High Performance Applications and Supercomputing, 16(2) (2002), pp.&nbsp;115&#x2013;199.

## Pranala luar

* BLAS homepage on Netlib.org
* BLAS FAQ
* BLAS Quick Reference Guide from LAPACK Users' Guide
* Lawson Oral History One of the original authors of the BLAS discusses its creation in an oral history interview. Charles L. Lawson Oral history interview by Thomas Haigh, 6 and 7 November 2004, San Clemente, California. Society for Industrial and Applied Mathematics, Philadelphia, PA.
* Dongarra Oral History In an oral history interview, Jack Dongarra explores the early relationship of BLAS to LINPACK, the creation of higher level BLAS versions for new architectures, and his later work on the ATLAS system to automatically optimize BLAS for particular machines. Jack Dongarra, Oral history interview by Thomas Haigh, 26 April 2005, University of Tennessee, Knoxville TN. Society for Industrial and Applied Mathematics, Philadelphia, PA
* How does BLAS get such extreme performance? Ten naive 1000&#xD7;1000 matrix multiplications (1010 floating point multiply-adds) takes 15.77&nbsp;seconds on 2.6&nbsp;GHz processor; BLAS implementation takes 1.32&nbsp;seconds.
* An Overview of the Sparse Basic Linear Algebra Subprograms: The New Standard from the BLAS Technical Forum