Anda di halaman 1dari 4

Optimasi Perkalian Matrix untuk Single Processor

Yoga Prihatno (2210105072)


Bidang Studi Komputer dan Telematika, Jurusan Teknik Elektro Institut Teknologi Sepuluh Nopember Surabaya

1. PERKALIAN MATRIX Perkalian dari dua matrix dapat dilakukan bila jumlah kolom pada matrix di sebelah kiri sama dengan jumlah baris pada matrix di sebelah kanan. Bila A merupakan matrix mxn dan B adalah nxm matrix, maka matrix perkalian AB adalah mxp matrix dimana hasilnya didapatkan dari dot product baris A pada kolom B.

nilai dari matrix agar dapat dimasukkan ke dalam cache kemudian dilakukan perhitungan. Hasil dari perhitungan kemudian dikembalikan ke dalam memori yang lambat RAM. Proses perhitungan secara blocking ditunjukkan pada gambar 3.

Gambar 2: Transpose matrix, merubah nilai pada baris ke kolom dan sebaliknya.

Gambar 1: Ilustrasi perkalian matrix

Perkalian matrix pada single processor merupakan persoalan komputasi sederhana. Namun pada matrix berukuran besar mengambil banyak ruang memori. Akses memori yang terbatas ini menimbulkan proses komputasi tidak optimal karena proses perhitungan lebih cepat dari pada proses akses data. Perkalian matrix pada komputer terdapat beberapa metode diantara nave, transpose, dan blocking. Metode nave merupakan perkalian matrix dengan cara biasa dan akan digunakan sebagai referensi tingkat percepatan untuk metode lainnya. Matrix memiliki bentuk 2 dimensi sementara memori komputer dibaca secara 1 dimensi. Hal ini menjadi dasar metode transpose dimana perkalian antara baris matrix sebelah kiri dengan kolom matrix sebelah kanan diubah menjadi dengan baris matrix sebelah kanan. Perubahan susunan matrix ditunjukkan pada gambar 2. Memori pada komputer terdapat jenis yang akses datanya cepat disebut dengan cache. Namun cache tidak memiliki ukuran besar sehingga tidak mampu menampung data matrix yang berukuran besar. Metode blocking dilakukan dengan membagi data

Gambar 3: Prose perkalian matrix secara blocking.

2. PROGRAM PERKALIAN MATRIX Program ditulis ke dalam tiga bagian penting sesuai dengan metode yang digunakan yaitu nave, transpose, dan blocking. 2.1 Nave matrix multiplication Perkalian matrix secara nave ditulis secara sederhana dimana dilakukan perkalian secara dot product baris A dengan kolom B.
//naive matrix multiplication for(i=0;i<size;i++) { for(j=0;j<size;j++) {

result[i][j]=0; for(k=0;k<size;k++) { result[i][j] += a[i][k] * b[k][j]; } } }

2.2 Transpose matrix multiplication Metode perkalian matrix multiplication sama dengan secara nave. Namun sebelum proses perkaliannya dilakukan proses transpose dimana nilai pada baris ditukar dengan nilai pada kolomnya.
//transposing matrix b for(i=0;i<size;i++) { for(j=0;j<size;j++) { transpose[i][j] = b[j][i]; } } //transpose matrix multiplication for(i=0;i<size;i++) { for(j=0;j<size;j++) { result[i][j]=0; for(k=0;k<size;k++) { result[i][j] += a[i][k] * transpose[j][k]; } } }

//read a block m=0; for(x=i;x<min(i+blockSize,size);x++) { n=0; for(y=k;y<min(k+blockSize,size);y++) { aBlock[m][n] = a[x][y]; n++; } m++; } //read b block m=0; for(x=k;x<min(k+blockSize,size);x++) { n=0; for(y=j;y<min(j+blockSize,size);y++) { bBlock[m][n] = b[x][y]; n++; } m++; } //block multiplication for(x=0;x<blockSize;x++) { for(y=0;y<blockSize;y++) { for(z=0;z<blockSize;z++) { resultBlock[x][y] += aBlock[x][z] * bBlock[z][y]; } } } } //write resultBlock to result m=0; for(x=i;x<min(i+blockSize,size);x++) { n=0; for(y=j;y<min(j+blockSize,size);y++) { result[x][y] = resultBlock[m][n]; n++; } m++; } } }

2.3 Blocking matrix multiplication Secara blocking dibagi menjadi beberapa proses membaca blok matrix A ke cache, membaca blok matrix B ke cache, melakukan perkalian matrix blok A dengan blok B, dan menuliskan hasil perkalian blok ke memori lambat RAM.
//blocking matrix multiplication for(i=0;i<size;i+=blockSize) { for(j=0;j<size;j+=blockSize) { //read result block m=0; for(x=i;x<min(i+blockSize,size);x++) { n=0; for(y=j;y<min(j+blockSize,size);y++) { resultBlock[m][n] = result[x][y]; n++; } m++; } for(k=0;k<size;k+=blockSize) {

3. HASIL OPTIMASI Kinerja pada optimasi perkalian matrix dengan metode transpose dan blocking menunjukkan hasil yang mencolok bila dibandingkan dengan metode nave. Hasil percobaan dengan berbagai ukuran matrix terhadap waktu yang dibutuhkan dalam satuan detik ditunjukkan pada tabel 1.

Table 1. Percobaan untuk berbagai ukuran matrix terhadap waktu komputasi yang diperlukan dalam satuan detik. Ukuran matrix 10 50 100 150 200 250 300 350 400 450 500 550 600 650 700 750 800 850 900 950 1000 Nave 0 0.001 0.01 0.009 0.024 0.129 0.156 0.266 0.357 0.746 1.228 1.586 2.486 4.413 6.275 9.422 11.501 13.982 14.537 22.172 23.366 Transpose 0.001 0 0.004 0.008 0.022 0.037 0.12 0.23 0.279 0.523 0.702 0.706 0.893 1.396 1.492 2.182 3.088 3.276 3.515 4.499 5.187 Block 0.001 0.001 0.005 0.007 0.017 0.035 0.059 0.115

ditunjukkan flops yang dibutuhkan untuk setiap metode pada berbagai ukuran matrix.
1200 1000 Flops(106) 800 600 400 200 0 Nave Transpose Blocking

0.321 0.374 0.49 0.498 1.378 1.185 1.626 1.802 1.782 2.523 2.785 3.658
Tingkat Percepatan 9 8 7 6 5 4 3 2 1 0

Gambar 5: Grafik jumlah flops untuk berbagai metode.

Grafik menunjukkan percepatan yang sangat tinggi untuk metode transpose dan blocking bila dibandingkan dengan metode nave. Tingkat percepatannya ditunjukkan pada gambar 6.

10 100 200 300 400 500 600 700 800 900 1000 Ukuran Matrix

0.167

Pada tabel ditunjukkan metode nave menjadi yang paling cepat bila ukuran matrixnya kecil. Hasil pada tabel 1 bila digambarkan dalam grafik dapat dilihat pada gambar 4.
25

Transpose Blocking

Ukuran Matrix 20 Waktu (detik) 15

Gambar 6: Grafik tingkat percepatan dibandingkan dengan metode nave.

4. KESIMPULAN
10 Nave 5 Transpose 0 10 100 200 300 400 500 600 700 800 900 1000 Blocking

Ukuran Matrix

Gambar 4: Grafik kinerja pada beberapa metode.

Jumlah flops yang dilakukan untuk setiap ukuran matrix dapat dihitung dengan persamaan 2(n)3/waktu, dimana n adalah ukuran dari matrix. Pada gambar 5

Dari penerapan optimasi yang diterapkan didapatkan beberapa kesimpulan diantaranya : 1. Metode transpose dan blocking menunjukkan kinerja yang lebih cepat dibandingkan metode nave untuk matrix ukuran besar. 2. Metode blocking menunjukkan sebagai metode yang paling cepat. 3. Metode nave paling cepat bila ukuran matrix kecil. 4. Dalam penulisan program perlu diperhatikan karakteristik akses data untuk dihasilkan kinerja program yang optimal.

1000

100

200

300

400

500

600

700

800

900

10

DAFTAR REFERENSI [1] Single Processor Optimizations Matrix Multiplication Case Study, K a t h y Y e l i c k , yelick@cs.berkeley.edu, www.cs.berkeley.edu/~yelick/cs267

_spr07 [2] Optimize Your Code: Matrix Multiplication, http://blogs.msdn.com/b/xiangfan/archive/200 9/04/28/optimize-your-code-matrixmultiplication.aspx.