Friday, January 19, 2018

Efisiensi Memory dengan Sparse Matrix, Very Magnificent !

Bismillah. Masih seputar problematika komputasi matrix ordo tinggi yang sedang saya hadapi di MATLAB. Saya harus melakukan komputasi dengan matriks berordo 60rb x 60rb. Sepekan ini, saya stuck dibuatnya.

Pertama, saya menjumpai persoalan ketersediaan memory, solusi yang saya lakukan adalah menambah virtual memory hingga 30 GB. Persoalan memory selesai, saya jumpa persoalan komputasi. Beberapa kali setelah menanti luaama sekali, laptop macet, tidak respons sama sekali hingga harus di shutdown paksa.

Kedua, saya memperkecil pemakaian memory untuk matriks dengan menggunakan format 'single' hingga 50% efisiensinya. Namun ternyata persoalan komputasi masih belum teratasi.

Nah, yang ketiga ini, sepertinya mantap. Saya menggunakan konsep Sparse Matrix, yaitu matriks yang sebagian besar elemennya bernilai nol. Cocok sekali dengan matriks yang sedang saya hadapi. MATLAB sudah mendukung olah sparse matrix ini. Luar biasa MATLAB ini... salut totalitas... Dengan Sparse Matrix ini, nilai2 elemen array tidak disimpan semuanya di memory, tetapi hanya elemen yang tidak nol disimpan sebagai list. Sehingga konsumsi memorynya berkurang signifikan.

Penggunaannya juga simpel sekali. Misalnya begini,
A=eye(60000);    % matriks identitas berordo 60rb x 60rb
B=A^2;                % operasi kuadrat matriks
Memory yang harus tersedia adalah 60rb x 60rb x 8bytes ~ 29 GB untuk A dan 29 GB untuk B. Totalnya 58 GB. Belum lagi lama komputasinya, bisa berjam-jam dengan resiko laptop macet total. Ngeri bukan.... Laptop saya jelas ndak nutut...

Sekarang kita lihat kalau menggunakan Sparse Matrix, seperti ini:
A=sparse(eye(6000));   % menyimpan matriks identitas dalam format sparse
B=A^2;                         % operasi kuadrat
Saya lihat penggunaan memory-nya hanya 8 MB untuk A, berarti kira2 16 MB untuk A dan B. Dan lama komputasinya hanya 0.5 detik. Haduh.... saya kehabisan kata2 untuk mengungkapkan rasa takjub dan rasa syukur bisa ketemu solusi ini... Alhamdulillah alhamdulillah alhamdulillah....

Sebenarnya saya jumpa istilah ini, secara tidak sengaja, sejak awal ketika menemui persoalan, namun saya mengabaikannya, saya kira bukan untuk kasus ini. Dan saya jatuh bangun mencari2 solusi sesuai dengan logika2 fikiran saja.

Hikmah yang saya pelajari dari kasus ini adalah bahwa kadang/seringkali Allah sudah menujukkan jalan keluar bagi persoalan2 saya, namun dengan keterbatasan fikiran ini saya merasa bahwa itu bukan solusinya, radar saya tidak peka atau enggan atau lain2, sehingga saya lebih asik mencari2 solusi sendiri. Kedua, dengan asumsi bahwa segala yang saya lakukan ini dalam takdir Allah, maka saya mengambil pelajaran bahwa Allah saja lah yang berkuasa menghilangkan rintangan dan persoalan pada timing yang Ia Kehendaki, Dia Maha Mengetahui Maha Bijaksana. Alhamdulillah.

Referensi:
Maaf saya tidak sempat memberikan penjelasan terkait Sparse Matriks, monggo dibrowsing sendiri
https://www.mathworks.com/help/matlab/math/constructing-sparse-matrices.html
https://en.wikipedia.org/wiki/Sparse_matrix

No comments:

Post a Comment