Mengenal dan memakai instruksi SIMD

Instruksi SIMD (Single Instruction Multiple Data) adalah jenis instruksi pada prosesor modern yang bisa melakukan operasi terhadap banyak data sekaligus (biasanya bentuknya adalah array/vector). Instruksi assembly dalam sebuah ISA biasanya hanya melakukan hal dasar berikut:

  • Menyalin data dari memori/register ke memori/register
  • Melakukan operasi terhadap satu atau lebih register dan menyimpan hasilnya di memori atau register (contoh: penjumlahan, perkalian, operasi bit, dsb). Beberapa operasi akan mempengaruhi flag pada CPU.
  • Memindahkan alur eksekusi ke alamat tertentu dalam kondisi tertentu (biasanya berdasarkan flag)
  • Melakukan manipulasi hardware spesifik (misalnya mengakses I/O, enable interrupt, enable paging, dsb)

Instruksi SIMD bisa melakukan load/save register dari/ke memori, melakukan manipulasi pada register, tapi satu instruksi bisa memproses banyak data sekaligus. Jika dilakukan dengan benar, ini bisa mempercepat program cukup signifikan. Instruksi SIMD tidak bisa melakukan branching ke banyak alamat sekaligus.

Sejarah SIMD ini cukup panjang: singkatnya tahun 1970an sudah dipikirkan ide ini dan sudah diimplementasikan di berbagai komputer besar, tapi baru masuk ke CPU untuk consumer di akhir abad lalu. Data yang diproses semuanya perlu berurutan (seperti array) dan biasanya disebut sebagai vector (tidak berhubungan dengan istilah vektor di matematika).

Lanjutkan membaca Mengenal dan memakai instruksi SIMD

Dari keyboard ditekan sampai muncul karakter di layar (bagian 3)

Di bagian sebelumnya sudah dibahas mengenai bagaimana layout text harus dilakukan. Setelah semuanya selesai, maka teks bisa ditampilkan ke layar. Di level aplikasi biasanya kita hanya perlu memanggil semua fungsi dasar untuk menampilkan teks. Di sisi library dan sistem operasi, masih ada langkah ekstra yang harus dilakukan. Teks perlu digambar ke sebuah buffer dan buffer perlu ditampilkan di sebuah permukaan gambar. Driver grafik akan menampilkan buffer tersebut ke layar.

Untuk aplikasi desktop, proses menampilkan teks ini di sisi programmer semudah memanggil fungsi print (mode teks) atau mengeset property tertenty. Jika kita memprogram microcontroller atau embedded system, akan lebih terasa proses berat yang harus dilakukan ketika menampilkan sesuatu. Contoh paling sederhana adalah 7 segment display.

Programmer perlu menyala matikan tiap garis dalam 7 segment display untuk menampilkan angka tertentu.

Display saat ini biasanya menggunakan akses per piksel. Mungkin yang paling sederhana adalah 8×8 dot matrix. Di sini kita perlu mengontrol tiap titik untuk menampilkan huruf/angka/bentuk yang kita mau.

Lanjutkan membaca Dari keyboard ditekan sampai muncul karakter di layar (bagian 3)

Single Board Computer dan Single Board Microcontroller

Belajar embedded system merupakan cara yang baik untuk lebih mengenal arsitektur komputer. Di PC/Tablet/Smartphone, ada begitu banyak “layer” yang mempersulit pemahaman kita tentang hardware, tapi di embedded system, kita bisa langsung berinteraksi dengan hardware, bahkan tanpa menggunakan sistem operasi sama sekali.

Saat ini ada dua jalur populer untuk belajar embedded system: menggunakan single board computer (misalnya: Raspberry Pi, BeagleBoard, BeagleBone Black, Cubie Board, RadXa, dsb), atau menggunakan single board microcontroller (misalnya: berbagai versi Arduino, Parallax Propeller, LaunchPad MSP430, dsb).  Singkatan SBC untuk single board computer sudah lazim digunakan, tapi single board microcontroller  biasanya tidak disingkat, tapi supaya artikel ini ringkas, akan saya singkat saja sebagai SBM.

Perlu diperhatikan bahwa saya menekankan pada kata populer, Anda tidak harus menggunakan SBM atau SBC untuk belajar embedded system, tapi keduanya akan membuat proses belajar menjadi lebih mudah.

Banyak pemula merasa bingung memilih dan membedakan fungsi keduanya. Jika Anda melihat berbagai proyek elektronik di Internet, sepertinya fungsi dan kemampuan keduanya hampir sama.   Untuk lebih jelasnya, saya akan membahas keduanya.

Lanjutkan membaca Single Board Computer dan Single Board Microcontroller

Asyiknya Open source

Sebagai orang yang cinta programming, saya sangat suka open source. Kali ini saya ingin menceritakan pengalaman pribadi saya dengan open source baru-baru ini. Sebagai orang yang sudah 3 kali mewakili Indonesia di Asia Open Source Symposium dan menjadi panitia ketika acara diadakan di Indonesia, saya sudah banyak mengemukakan dan mendengar masalah bagusnya open source sebagai ideologi dan untuk bisnis. Nah kali ini saya hanya akan membahas dari sudut pandang seorang pribadi yang cinta programming. Untuk Anda yang ingin mempertanyakan open source dari segi bisnis dan lain-lain, akan saya bahas lain waktu.

Saya baru membeli HP Android Acer BeTouch E130 beberapa minggu yang lalu. Device ini memiliki keyboard (bentuknya seperti Blackberry) dan harganya relatif murah. Sebenarnya banyak device android lain yang murah, tapi tanpa keyboard.

Sebagai penggemar command line dan terminal, hal yang ingin saya lakukan adalah menjalankan Debian di device saya. Android menggunakan kernel Linux yang lisensinya GPL, sehingga saya bisa mendapatkan source kernelnya dan mengcompilenya. Saya bisa mengcompile sendiri modul ext3 sehingga saya bisa menginstall Debian dalam lingkungan chroot.

Ketika mulai bermain dengan debian, saya mulai menyadari bahwa keyboardnya kurang nyaman untuk mengetik karakter yang sering dibutuhkan di command line dan program, misanya karakter tilde (untuk shortcut home directory) karakter kurung siku buka dan tutup (untuk indexing array), karakter kurung kurawal buka dan tutup (untuk blok kode program), dsb.

Untungnya program terminal dan client ssh yang saya gunakan (Android Terminal Emulator dan ConnectBot) sifatnya opensource, jadi saya bisa memodifikasinya. Untungnya lagi, proyek keduanya ada di github, jadi saya hanya perlu mem-fork sourcenya dan mengubahnya. Sayapun bisa berbagi perubahan yang saya lakukan pada dunia dengan sangat mudah.

Setelah debian terinstall, dan dengan keyboard yang sudah lebih nyaman, saya bisa menginstall debian dan aneka program di dalamnya. Saya bisa menginstall hampir semua program yang ada di desktop saya, misalnya server SSH, compiler C, Java, interpreter PHP, Perl, Python.
Lanjutkan membaca Asyiknya Open source

System programming

Banyak orang yang terkesima dengan orang yang memprogram di level kernel sistem operasi; banyak juga yang menganggap wilayah kompilasi atau interpretasi itu sesuatu yang rumit, dan sebaiknya diterima saja, tidak perlu dipelajari.

Sebagian orang bersifat tidak mau tahu. Misalnya ada yang bilang: mengapa belajar assembly atau C/C++, bahasanya nggak dipakai, mendingan belajar PHP, Ruby, Java atau .NET. Orang-orang tersebut tidak menyadari bahwa compiler dan atau runtime bahasa-bahasa tersebut dibuat dengan C dan C++. Sebagian besar library yang dipakai di berbagai bahasa juga diimplementasikan di C/C++.

Sebagian kemampuan prosessor juga tidak akan bisa dimanfaatkan secara maksimal oleh bahasa tingkat tinggi, tanpa bantuin assembly dan atau C/C++. Contoh terbaru adalah instruksi-instruksi STTNI (String & Text New Instructions) yang diperkernalkan di prosessor baru Intel dengan arsitektur Nehalem untuk mempercepat pemrosesan teks (dan parsing XML) tidak akan bisa dilakukan.

Bahkan jika Anda tidak memprogram dalam bahasa C sekalipun, pengetahuan tersebut bisa berguna, misalnya Anda bisa mengoptimasi penggunaan memori dan mengoptimasi kecepatan di PHP. Lihat juga posting saya mengenai Kritik PHP.

Sekarang pertanyaan berikutnya yang mungkin muncul adalah: bagaimana saya belajar pemrograman sistem?


System programming adalah aktivitas pembuatan software sistem. Ini cakupannya luas, dari mulai kernel sistem operasi, sampai compiler, dan aneka utility level sistem.

Lanjutkan membaca System programming

Representasi Bilangan Desimal di Komputer

Dalam dunia komputer, biasanya kita menggunakan representasi floating point untuk menyimpan bilangan desimal. Namun itu bukan satu-satunya representasi yang ada. Ada beberapa representasi lain yang berupa fixed point, misalnya BCD (binary coded decimal), Chen-Ho, dan DCD (Densely Coded Decimal). Jika diperlukan Anda pun bisa membuat representasi sendiri, sesuai yang Anda mau.

Metode penyimpanan yang ada tersebut dibuat dengan tujuan yang berbeda-beda, misalnya tujuan utama representasi floating point adalah dapat menampung angka dalam range yang besar, tapi dengan presisi yang berkurang/terbatas. Floating point juga biasanya basis 2, sehingga lebih cepat dieksekusi di komputer yang memakai binary logic (perlu dicatat, tidak semua komputer memakai binary logic).

Representasi desimal yang lain bertujuan agar dapat merepresentasikan bilangan secara eksak, namun rangenya terbatas. Variasi representasi dibuat untuk berbagai tujuan, misalnya DCD dibuat agar memori yang diperlukan lebih sedikit.
Lanjutkan membaca Representasi Bilangan Desimal di Komputer