False Sharing

Dalam sebuah sistem multiprocessor terdapat sebuah masalah yang disebut dengan false sharing [1]. Masalah false sharing terjadi ketika terdapat beberapa proses atau thread dari prosesor yang berbeda yang memodifikasi variabel-variabel yang terdapat pada cache line yang sama. Ilustrasi untuk kasus false sharing pada SMP dengan dua prosesor diberikan oleh gambar di bawah ini [2]:

False cache line sharing dalam SMP

Di dalam gambar tersebut, terdapat dua thread, thread 0 dan thread 1, pada prosesor yang berbeda, CPU 0 dan CPU 1. Masing-masing thread memodifikasi variabel yang berbeda tetapi terdapat pada satu cache line. Ketika variabel pada CPU 0 berubah, cache line pada CPU 1 dianggap outdated. Begitu pula ketika variabel pada CPU 1 berubah, cache line pada CPU 0 dianggap outdated. Pada prosesor Intel, ketika ada cache line yang outdated, cache line tersebut akan diganti dengan cache line yang lebih baru yang terdapat pada memori utama. Terlihat bahwa setiap terjadi perubahan variabel menimbulkan akses ke memori utama. Akses ke memori utama memiliki latensi yang besar sehingga kondisi false sharing akan meningkatkan delay.

Referensi:

[1] Sae-eung, S. (2010). Analysis of False Cache Line Sharing Effects on Multicore CPUs.

[2] http://software.intel.com/en-us/articles/avoiding-and-identifying-false-sharing-among-threads

Melihat dari Sudut Pandang Kita

Sering kita jumpai nasehat-nasehat yang berisi tentang apa yang harus kita lakukan. Tidak jarang pula kita sampaikan nasehat-nasehat tersebut kepada orang lain. Ketika menyampaikan kepada orang lain, menurut saya, secara umum orang akan fokus kepada lawan bicara. Maksudnya adalah bahwa orang tersebut menyuruh atau mengharapkan lawan bicaranya melakukan isi nasehatnya. Apa yang salah dari hal tersebut? Tidak ada. Tidak ada yang salah dengan perilaku seperti itu. Akan tetapi, sekarang coba kita lihat isi beberapa nasehat yang mungkin pernah atau akan kita sampaikan kepada orang lain dengan sudut pandang yang berbeda.

Pertama kita lihat satu lagu nasehat yang populer: Tombo Ati. Kita lihat salah satu poin: Berkumpul dengan orang shalih. Saya pribadi secara refleks akan menangkap bahwa seseorang harus mencari orang shalih atau komunitas orang-orang shalih sebagai obat bagi hatinya. Jika kita lihat dari sudut pandang lain akan kita dapatkan pertanyaan: “Sudahkah kita menjadi orang shalih yang dapat menjadi obat bagi orang-orang terdekat kita?”. Jangan sampai kita ternyata adalah orang yang menjadikan hati orang terdekat kita sakit.

Kita lihat yang lain.

وَسَارِعُوا إِلَى مَغْفِرَةٍ مِنْ رَبِّكُمْ وَجَنَّةٍ عَرْضُهَا السَّمَاوَاتُ وَالْأَرْضُ أُعِدَّتْ لِلْمُتَّقِينَ
Dan bersegeralah kamu kepada ampunan dari Tuhanmu dan kepada surga yang luasnya seluas langit dan bumi yang disediakan untuk orang-orang yang bertakwa, [3:133]

الَّذِينَ يُنْفِقُونَ فِي السَّرَّاءِ وَالضَّرَّاءِ وَالْكَاظِمِينَ الْغَيْظَ وَالْعَافِينَ عَنِ النَّاسِ وَاللَّهُ يُحِبُّ الْمُحْسِنِينَ
(yaitu) orang-orang yang berinfaq, baik di waktu lapang maupun sempit, dan orang-orang yang menahan amarahnya dan memaafkan manusia. Allah menyukai orang-orang yang berbuat kebaikan. [3:134]

Kita lihat poin “menahan amarah” dan “memaafkan manusia”. Nasehat ini mungkin akan kita sampaikan kepada orang lain yang sedang marah supaya ia menahan amarahnya dan memaafkan orang yang berbuat salah. Dari sudut pandang lain kita bisa bertanya kepada diri kita sendiri: “Apakah saya yang membuat marah dan berbuat salah kepadanya?”, “Jika saya salah, apakah saya sudah meminta maaf kepadanya?”. Tidak lucu ketika kita meminta orang lain untuk menahan marah tetapi kita terus saja memancing kemarahannya.

Pada intinya adalah introspeksi/muhasabah dengan apa yang kita katakan dan kita perbuat. Jangan sampai kita menawarkan solusi kepada orang lain sedangkan kitalah sebenarnya sumber masalahnya dan ternyata kita belum berhenti menjadi sumber masalah.

Kalau pembaca punya contoh nasehat yang lain, mohon kesediaan pembaca untuk berbagi dengan saya dan pembaca lainnya. :)

Teknik Kompilasi: Pengantar

Bagi programmer, kata kompiler pasti sudah sangat akrab di telinga. Tapi tidak tahu juga sih kalau sekarang. Dengan semakin populernya bahasa scripting seperti javascript atau lua, mungkin kompiler mulai kurang diminati.
Kompiler adalah suatu program komputer yang menerima masukan program sumber (source code) dan menghasilkan suatu representasi yang dapat dieksekusi. Dieksekusi oleh apa? Dieksekusi oleh mesin. Baik mesin secara fisik maupun mesin secara virtual.
Lalu, kenapa kita perlu kompiler? Alasannya adalah masalah bahasa. Mesin (dalam hal ini adalah komputer) memiliki bahasa yang sulit dimengerti oleh manusia. Sedangkan bahasa manusia terlalu kompleks untuk dapat dimengerti mesin. Salah satu kekompleksan bahasa manusia adalah masalah ambiguitas. Satu kata atau satu kalimat yang sama bisa memiliki arti yang berbeda tergantung konteks. Bagaimana kita menjelaskan yang mana maksud kita secara jelas kepada komputer? Sampai saat ini para ahli belum dapat melakukannya. Nah, makanya kita butuh bahasa pemrograman. Bahasa pemrograman dirancang untuk jelas, tegas, dan tidak ambigu. Pada ujungnya, kita butuh kompiler untuk menerjemahkan bahasa pemrograman ke bahasa mesin.

Kompiler dapat dibagi menjadi 2 bagian besar:

  1. Bagian Analisis
  2. Bagian Sintesis/Generator

Bagian analisis berfungsi untuk membongkar kode sumber. Sedangkan, bagian sintesis berfungsi menghasilkan representasi yang dapat dieksekusi. Kita akan lihat lebih jauh untuk masing masing bagian.

Bagian analisis terdiri dari 3 bagian:

  1. Scanner
  2. Parser
  3. Semantic Analyzer

Scanner berfungsi untuk mendekomposisi kode sumber menjadi token-token. Token adalah satuan terkecil yang memiliki makna. Contoh token adalah variable, operator, dan keyword. Selain mendekomposisi, scanner juga memeriksa apakah suatu token dikenal atau tidak. Jika suatu token tidak dikenal, makan scanner akan memberikan error.

Parser berfungsi untuk memeriksa tata bahasa dari kode sumber. Misalkan, ketika ditemukan token variable, kemudian diikuti dengan token operator assignment dan konstanta, maka baris tersebut dikenali sebagai assignment statement.

Semantic Analyzer berfungsi untuk memeriksa makna dari kode sumber. Misalkan pada kasus assignment, akan diperiksa apakah tipe variable dan operand cocok.

Bagian sintesis terdiri dari 2 bagian:

  1. Generator kode antara
  2. Optimisasi

Kedua bagian ini opsional dan saling terkait. Generator kode antara dibutuhkan karena akan mempermudah tahap optimisasi. Kode antara dibuat karena lebih mudah dioptimisasi dibandingkan, misalnya, kode dalam bahasa mesin. Optimisasi berfungsi untuk meningkatkan efisiensi program. Program yang dioptimisasi akan menghasilkan program yang lebih kecil dan/atau lebih cepat.

*disarikan dari perkuliahan Dr.Ir. Rila Mandala, M.Eng. tentang Teknik Kompilasi

Akhirnya Website Ini Kembali Ke Jagat Maya

Pada bulan November 2012 yang lalu, domain zaniar.web.id telah habis masa sewanya. Notifikasi dari pihak penyedia domain telah datang berkali-kali. Akan tetapi, karena kemalasan, tagihan tidak kunjung dibayar. Pada akhirnya domain zaniar.web.id menemui ajalnya.

Pada suatu hari, muncul keinginan untuk mengisi website ini. Setelah melakukan pembayaran dan menghubungi pihak penyedia domain, ternyata domain zaniar.web.id tidak dapat diperpanjang. Katanya karena telah melampaui batas masa pembayaran. Katanya juga, domain zaniar.web.id dijadwalkan untuk dihapus dan baru dapat dibeli lagi setelah 3 bulan. Pada akhirnya, bulan Januari 2013 domain zaniar.web.id bisa kembali ke tangan saya.

Moral cerita kali ini adalah jangan terlambat membayar domain :D

This is my cool new OS!

Ambisi lama muncul kembali! Kali ini lebih konkrit.

Dulu saya punya keinginan untuk membuat sistem operasi. Nah, saya pun mulai cari informasi. Saya temukan situs http://mikeos.berlios.de/write-your-own-os.html. Saya ikuti petunjuk di situs tersebut dan…

Tampilan sistem operasi yang saya buat dijalankan di QEMU

Itulah hasilnya.

Apa yang akan saya lakukan berikutnya? Tunggu saja ;-)