23/07/10

Instalasi PyOpenCL

Dalam petualangan saya dengan OpenCL ini, saya sengaja mencari jalan pintas agar cepat akrab dengan OpenCL. Salah satu caranya adalah dengan menggunakan bahasa "yang gak terlalu rewel" seperti Python dalam membuat aplikasi yang nanti akan menggunakan OpenCL ini. Kode OpenCL sendiri tetap ditulis dalam bahasa yang digunakannya, yaitu subset bahasa C, namun aplikasi yang menggunakannya ditulis dalam bahasa Python. Untuk menggunakan OpenCL dari Python, kita bisa menggunakan PyOpenCL yang akan saya tunjukan proses instalasinya.

Bagi pengguna Ubuntu 10.04, saya sudah membuatkan paketnya dan meletakkannya di Launchpad PPA saya. Jalankan perintah berikut untuk memasang paket tsb.

$ sudo apt-add-repository ppa:fajran/opencl
$ sudo apt-get update
$ sudo apt-get install python-pyopencl

Bagi yang tidak menggunakan Ubuntu 10.04, lain kali akan saya tunjukkan cara instalasi manualnya. Tadinya mau ditulis juga tapi kok ada yang mengganjal :D Panduan resminya ada juga loh, jadi gak usah nunggu saya juga :P

Untuk menguji apakah PyOpenCL sudah dapat digunakan, silakan coba jalankan kode Python berikut.

import pyopencl as cl

for platform in cl.get_platforms():
    print 'Platform:', platform.name
    for device in platform.get_devices():
        print '-', device.name

Simpan dalam sebuah berkas, misalnya opencl-devices.py, lalu jalankan.

$ python opencl-devices.py
Platform: ATI Stream
- Intel(R) Core(TM)2 Duo CPU     P8600  @ 2.40GHz
Platform: NVIDIA CUDA
- GeForce 320M

Sepertinya sekian dulu bagian awal dari petualangan bersama OpenCL. Seharusnya seluruh yang dibutuhkan untuk membuat aplikasi OpenCL sudah ada, mulai dari driver, pustaka OpenCL, dan juga bahasa pemrograman yang dapat digunakan.

Setelah ini kita akan mencoba membuat aplikasi OpenCL dengan PyOpenCL.

Instalasi ATI Stream SDK di Linux

Andai ingin menjalankan aplikasi OpenCL namun tidak menggunakan VGA card yang mendukung (seperti NVIDIA dan ATI), Anda masih memiliki peluang untuk menjalankan aplikasi tersebut di atas CPU karena OpenCL memang memungkinkannya. Salah satu pustaka OpenCL yang mendukung hal ini adalah ATI Stream SDK. Menurut daftar hardware yang didukung oleh SDK ini, CPU yang didukung adalah CPU yang memiliki SSE3. Silakan cek artikel terkait di Wikipedia untuk melihat daftar CPU yang memiliki SSE3.

Apa yang akan saya tulis ini sebenarnya juga tertulis dalam petunjuk instalasi yang disediakan oleh ATI. Jadi akan lebih baik jika panduan utama tersebut juga dilihat.

Untuk memasang ATI Stream SDK ini, ada satu berkas yang harus dipasang di bawah direktori /etc sehingga Anda memerlukan akses root. Berkas-berkas lainnya sendiri tidak perlu diletakkan didirektori khusus dan pada dasarnya bisa diletakkan di mana saja.

Mari kita mulai memasang pustaka OpenCL ini..

Pertama, unduh dulu ATI Stream SDK dari http://developer.amd.com/gpu/atistreamsdk/pages/default.aspx. Ada dua berkas yang harus diunduh, yaitu ati-stream-sdk-v2.1-lnx32.tgz (atau yg versi 64 bit) dan icd-registration.tgz. Arsip untuk sistem 64 bit juga berisi berkas-berkas untuk sistem 32 bit. Jadi jika Anda memiliki mesin 32 bit dan 64 bit, cukup unduh arsip untuk sistem 64 bit saja.

Kedua, ekstrak berkas SDK (saya menggunakan yang versi 64 bit) ke sebuah direktori, katakanlah /home/iang/apps.

$ mkdir /home/iang/apps
$ cd /home/iang/apps
$ tar xzf /path/ke/ati-stream-sdk-v2.1-lnx64.tgz

Nanti akan terbentuk direktori ati-stream-sdk-v2.1-lnx64 dengan segala isinya.

Ketiga, ekstrak berkas icd-registration.tgz ke sebuah direktori. Anda akan menemukan direktori etc/OpenCL/vendors/ dengan sebuah berkas bernama atiocl32.icd dan atiocl64.icd. Kedua berkas ini harus disalin ke dalam /etc/OpenCL/vendors/ (inilah mengapa akses root diperlukan). Berkas ICD ini berisi daftar driver OpenCL yang terpasang.

$ sudo mkdir -p /etc/OpenCL/vendors/
$ sudo cp etc/OpenCL/vendors/* /etc/OpenCL/vendors/

Percaya atau tidak, tahap instalasi sudah selesai! Jika Anda juga membaca panduan instalasi yang diberikan oleh AMD/ATI, maka bisa dilihat saya melewatkan tahapan ke 2, 3, dan 4. Ketiga tahap tersebut tetap akan penting untuk dilakukan namun belum kita perlukan sampai saat ini, namun nanti pada saat kita sudah siap melakukan kompilasi dan eksekusi aplikasi OpenCL.

Bagi yang sudah tidak sabar untuk mencoba, Anda bisa mencoba mengkompilasi aplikasi contoh yang diberikan oleh ATI. Jalankan saja perintah berikut.

$ cd /home/iang/apps/ati-stream-sdk-v2.1-lnx64/
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/iang/apps/ati-stream-sdk-v2.1-lnx64/lib/x86_64
$ make

Semua aplikasi contoh akan dikompilasi dan jika memang semua yang dibutuhkan sudah ada di komputer Anda, maka perintah make tadi akan selesai dengan sukses. Pada kasus saya, make berakhir dengan kegagalan karena pustaka aticalrt tidak ditemukan di komputer saya.

Namun walaupun begitu, sebagian aplikasi sudah terkompilasi dan dapat saya coba.

$ cd samples/opencl/bin/x86_64
$ ./Mandelbrot --size 512

OpenCL - persiapan

wah udah lama gak nulis2 :P

Tiba-tiba saya lagi pengen nulis mengenai petualangan dengan OpenCL berhubung saya lagi nyoba2 mainan yg satu ini. Jadi.. siap2 :D Tuk bagian pertama, mari kita lakukan persiapan agar bisa mulai main2..

Kalau make Mac OS X Snow Leopard, silakan langsung tunggu tulisan berikutnya. Pustaka OpenCL sudah terpasang jadi ya tinggal pake saja :D

Kalau make Linux dan kebetulan make vga card NVIDIA seri 8000an ke atas (intinya sudah dukung CUDA), maka coba pasang driver NVIDIA versi 190an ke atas (tepatnya saya kurang tahu) karena driver ini sudah menyertakan pustaka OpenCL. Paket nvidia-current yang dibawa oleh Ubuntu 10.04 (versi 195.36.24-0ubuntu1~10.04) sudah menyertakan pustaka OpenCL juga loh.

Kalau ngga make vga card NVIDIA tapi menggunakan ATI (Windows maupun Linux) err.. mulai seri berapa ya? maap saya gak tau, maka pasang dulu ATI Stream SDK. Baca petunjuk instalasinya untuk informasi lebih lanjut. Nanti saya akan tuliskan juga langkah-langkah instalasinya bagi pengguna Linux. Instalasi driver ATI juga mungkin (seharusnya?) diperlukan. Berhubung saya ngga make vga card dari ATI, maka saya tidak bisa memastikan hal ini.

Bagi pengguna Windows dan NVIDIA, silakan pasang CUDA Toolkit.

Bagi yang ngga make NVIDIA maupun ATI, jangan khawatir karena OpenCL juga bisa jalan di atas CPU, walau saya gak tau CPU seperti apa yang didukung :P Pasang saja ATI Stream SDK karena driver OpenCL dari ATI ini mendukung eksekusi OpenCL di atas CPU. Oh ya, ATI Stream SDK ini gak mensyaratkan penggunaan hardware apapun dari ATI. Saya aja bisa memakainya di atas komputer dg Intel Core2 Duo dan NVIDIA 320M.

yak sekian dulu.. selamat bersiap2 :D

sekedar pemicu tambahan..

>>> import pyopencl as cl
>>> for platform in cl.get_platforms():
...     for device in platform.get_devices():
...         print '- %s' % device.name
... 
- Intel(R) Core(TM)2 Duo CPU     P8600  @ 2.40GHz
- GeForce 320M
22/06/10

Ubuntu di MacBookPro 7,1

Gara-gara ada chip yg dipake oleh MacBookPro 7,1 (yaitu MCP89) yang ngga akur dengan Linux, maka SATA controller yang ada tidak bekerja. Alhasil harddisk dan dvdrom ngga dikenali oleh Linux dan gak bisa nginstal Linux. Sebuah laporan bug juga akhirnya dibuka, mempertanyakan mengapa kok Linux gak bisa bekerja.

Tiga puluh tiga komentar kemudian, sebuah patch akhirnya dibuat dan dikirim ke upstream. Patch ini mengakali masalah yang ada agar Linux menggunakan driver generic yang dapat digunakan sehingga harddisk dan dvdrom dapat dikenali dan dipakai. Seseorang pun akhirnya memasangkan patch tersebut ke kernel yang dipakai oleh Ubuntu dan membuat ulang cd instalasi Ubuntu 10.04 yang bekerja di MacBookPro 7,1!

CD dengan patch ini dapat langsung diunduh di http://macbookpro7-1.daviey.com/. Bagi pengguna Internet di Indonesia, saya sudah menyalin berkas ISO CD tadi ke Kambing di http://kambing.ui.ac.id/iso/misc/ubuntu-10.04-amd64-mbp7.1/.

Perlu dicatat, karena cuma make driver generic (dan ternyata DMAnya juga belum nyala di patch pertama ini), kinerja pengaksesan harddisk akan terasa lambat. Patch baru yang sudah memaksa DMA agar aktif sudah ada, mari kita tunggu ada yg ngepatch kernel yg dipake Ubuntu dan membuat cd instalasinya lagi *males bikin ndiri* hehe..

31/05/10

MacBookPro7,1 dengan Linux dan Windows 7

Satu kata tuk menggambarkannya: Bermasalah!

Linux (terlepas dari distro apapun itu) gak bisa jalan karena ternyata ada chipset yang digunakan oleh si MacBookPro (yaitu MCP89) yang tidak didukung oleh Linux, setidaknya sampe versi sebelum 2.6.35-rc1. Chip ini sepertinya menangani SATA sehingga kalau tidak didukung maka harddisk dan dvdrom drive tidak akan dikenali.

Info lebih lanjut:

Windows 7 juga sepertinya gak 100% lancar tuk dipasang. Kadang saat proses menyelesaikan instalasi (setelah boot pertama), Windows 7 akan diam membeku tidak bisa diapa-apakan lagi. Masalah yg sama juga bisa terjadi setelah login.

Setelah mencoba menginstal Windows 7 beberapa kali, akhirnya saya "beruntung" bisa menyelesaikan proses instalasi termasuk melakukan aktivasi. Sesuai saran di sebuah forum, saya harus memasang sebuah hotfix dari Microsoft agar masalah Windows 7 yang membeku ini tidak terjadi lagi. Mari kita lihat..

Info lebih lanjut: Diskusi di forum Apple

28/03/10

Qt is so Qt - Icip-icip QtWebKit

Beberapa hari belakangan ini saya lg seneng ngoprek2 Qt. Lgs pake C++ berhubung sekalian pengen latihan berbahasa yg satu ini lagi. Salah satu modul yang disediakan oleh Qt adalah QtWebKit yang membuka kemungkinan untuk melakukan integrasi WebKit (yayaya, ini html layout engine yg ituh..) dengan aplikasi yang kita buat.

Cara menggunakannya cukup mudah. Berikut ini kira-kira kode yang diperlukan untuk membuat sebuah peramban web super sederhana berbasiskan WebKit.

#include <QtGui>
#include <QtWebKit>

int main(int argc, char **argv) {
    QApplication app(argc, argv);
    QWebView view;
    view.load(QUrl("http://ngoprek.fajran.web.id"));
    view.show();
    return app.exec();
}

QWebView di atas adalah sebuah widget (turunan dari QWidget) yang menampilkan QWebPage dan lalu QWebFrame dalam sebuah antar muka grafis. Berhubung widget ini tidak berada di dalam widget lain, maka sebuah window akan dibuatkan khusus untuk menampilkan widget ini.

Salah satu proses integrasi yang dimungkinkan adalah pertukaran pesan dalam bentuk pemanggilan fungsi antara aplikasi yang ditulis dalam C++ dan aplikasi web yang dibuka. Aplikasi C++ bisa menyuruh aplikasi web untuk mengeksekusi sebuah skrip dalam javascript. Aplikasi C++ ini juga bisa memasukkan sebuah objek ke dalam halaman web yang nantinya bisa digunakan oleh aplikasi yang ada di dalamnya. Cara melakukan hal ini juga tidak terlalu susah, namun saya masih belum begitu paham tentang bagaimana menyusun data yang ingin dipertukarkan.

Selama icip2 QtWebkit saya juga menjumpai setidaknya 2 masalah. Yang pertama adalah tentang Font di CSS 3. Saya mencoba membuat halaman web yang menggunakan font yang kita atur sendiri. Namun mengapa apa yang saya coba di Firefox tidak bekerja di QtWebKit. Setelah gugling2 dikit, ternyata memang ada masalah di QtWebKit terkait dengan peletakan font. Jika kita sebut lokasi font dengan local(), alias font yang terpasang di sistem, dan dengan url(), atau lokasi lain, maka QtWebKit sama sekali tidak akan memasang font tersebut. Baca saja laporan bug-nya untuk informasi lebih lanjut.

Masalah kedua adalah mengenai event penekanan tombol keyboard. Walau browser-browser yang ada juga punya beberapa perbedaan, namun QtWebKit sama sekali berbeda. Nilai yang diberikan pada variabel keyCode dari objek event yang terbentuk memiliki perbedaan dalam tombol-tombol panah. Nilai yang terbentuk pada browser biasa adalah 37, 38, 39, dan 40 untuk kiri, atas, kanan, dan bawah, namun QtWebKit memberikan nilai 28, 30, 29, dan 31. Saya belum menemukan laporan masalah untuk yang satu ini walau ada laporan yang mirip. Sepertinya mesti bikin laporan baru hehehe..

Saya juga membuka sebuah repositori ngoprek2 Qt di GitHub. Silakan buka http://github.com/fajran/qtangoprek.

Untuk contoh kode integrasi antara QtWebKit dengan aplikasi Qt belum selesai saya buat. Seharusnya mudah tapi kok rumit karena banyak yang mesti ditulis agar contohnya menarik. hehe..

17/03/10

Ubuntu versi netinst

Debian punya satu tipe CD bernama netinst dapat digunakan untuk melakukan instalasi Debian secara minimalis. CD tersebut hanya berisi installer dan paket-paket dasar yang dibutuhkan untuk membangun sistem yang minimalis. Selain itu, ada juga versi business card yang hanya berisi installer sehingga akses ke repositori mutlak dibutuhkan untuk menginstal sistem, walau hanya melakukan instalasi minimalis.

Kedua jenis CD ini sangat berguna untuk melakukan instalasi sistem yang "bersih" dimana sistem hanya berisi paket-paket yang memang (pada umumnya) mutlak diperlukan saja. Dengan demikian, sistem dapat "dibangun" secara incremental dengan memasang paket-paket lainnya yang memang dibutuhkan. Sebagai contoh, jika ingin membangun sebuah web server, yang sebenarnya dibutuhkan kan hanya sistem dasar dan web server saja. Aplikasi lain yang tidak berhubungan sebenarnya (atau bahkan sebaiknya) tidak perlu dipasang.

Hari ini saya perlu memasang Ubuntu di dalam VirtualBox. Instalasi yang saya inginkan adalah instalasi yang super minimal seperti halnya yang dapat dihasilkan dengan menggunakan Debian versi netinst. Namun sayangnya Ubuntu tidak punya versi netinst sehingga saya harus menggunakan Ubuntu edisi server yang masih bisa digunakan untuk instalasi minimalis dengan tidak memasang paket-paket lainnya yang ditawarkan pada saat instalasi. Sayangnya lagi, saya sedang di kampus dengan koneksi wireless dan males nunggu 10-30 menit untuk mengunduh Ubuntu Server yang sekarang besarnya sudah sekitar 600MB.

Namun ternyata.. setelah Googling sedikit.. Ubuntu punya versi netinst! lebih tepatnya business card! Berkas ISO versi ini sangat kecil, hanya sekitar 20MB. CD ini hanya berisi installer dan paket-paket dasar yang perlu diinstal akan langsung diambil dari repositori.

Ada di manakah ISO CD Ubuntu versi super minimal ini? Memang sepertinya tidak ada keterangan resmi di website Ubuntu. Namun ada satu buah halaman wiki yang menerangkan hal ini. Silakan cek https://help.ubuntu.com/community/Installation/MinimalCD.

Halaman indeks menuju tempat mengunduh CD minimalis ini bisa dilihat di http://cdimage.ubuntu.com/netboot/. Pilih versi dan arsitektur yang diinginkan dan unduh berkas mini.iso. Ingat, Anda membutuhkan akses ke repositori untuk memasang Ubuntu versi minimalis dengan ISO CD ini.

Ah.. ternyata proses instalasi yang saya lakukan sambil menulis tulisan ini sudah hampir selesai.. sampai jumpa lagi! =D

10/03/10

Gerobak

Apa ini? singkatnya: apt-web yang lebih personal. Coba buka http://gerobak.dahsy.at/

Ada yang mau bantuin ngetes? Ada yang mau nyumbang sebuah VPS atau server beneran? Ada yang mau bantuin bikin?

Kok butuh VPS/server sendiri? Karena sepertinya Gerobak butuh sumber daya komputasi yang tidak kecil. Bisa bikin tetangga bahkan pemilik kontrakan ngomel2 kalau dipasang bareng-bareng dengan yang lain.

Kode sumber: http://github.com/fajran/gerobak. Lisensi: GNU AGPL 3

01/03/10

Dipijit lagi

Baru aja 7 bulan lewat dikit, kambing mengalami musibah lagi :(

Singkatnya, data ilang semua =D detilnya saya kurang tahu mengapa.

/dev/md0              5.5T  640G  4.9T  12% /mirror/data

Terakhir total data yang ada itu sekitar 3TB, jadi.. masih jauh perjalanannya..

Sekali lagi terima kasih kepada mirror-mirror tetangga shol, unej, ugm, ipb, kebo, komo, itb, foss-id dll. Mohon maaf kalau bakal disedot kambing besar-besaran..

Untuk info lebih lengkap mengenai kejadian yang terjadi beberapa hari yang lalu, silakan baca http://staff.blog.ui.ac.id/jp/2010/03/01/insider-info/

13/02/10

Restrukturisasi repositori openSUSE di Kambing

tl;dr Repositori openSUSE di Kambing tidak mengikuti struktur standar yang diberikan oleh openSUSE sehingga akan direstrukturisasi ulang agar mengikuti struktur asli.

Kalau melihat rsync.opensuse.org, openSUSE mengelompokkan repositorinya ke dalam beberapa modul rsync yang mungkin bisa dikelompokkan lagi menjadi hotstuff, updates, full, dan buildservice. Menurut dokumentasi tentang mirror repositori openSUSE, kelompok hotstuff berisi berkas-berkas yang paling sering diminta dan kelompok full berisi apa saja yang ada di download.opensuse.org. Kelompok updates dan buildservice masing-masing berisi paket-paket perbaikan dan berkas-berkas dari openSUSE Build Service.

Kali ini saya hanya akan membahas mengenai isi kelompok hotstuff dan full karena keduanya mungkin yang paling sering banyak dipakai. Isi kelpompok updates sudah termasuk di dalam kedua kelompok tersebut sehingga tidak perlu dibahas secara khusus. Untuk kelompok buildservice, sepertinya isinya tidak terlalu relevan untuk pengguna akhir (cmiiw) jadi tidak akan dibahas juga.

Kembali ke isi repositori. Kalau melihat isi kelompok hotstuff 160GB, kelompok ini hanya berisi repositori untuk openSUSE 11.1 (bukan yang terbaru kan nih?), update untuk 10.3 sampai 11.2, dan sebuah direktori repositories yang sepertinya berisi paket-paket terbaru yang dikelompokkan berdasar kategori tertentu. Berbeda dengan kelompok hotstuff, kelompok full tidak memiliki direktori repositories namun kelompok ini berisi memiliki repositori untuk openSUSE versi 11.0, 11.1, dan 11.3-Milestone1 yang masih dalam masa pengembangan.

Bagi yang ingin melihatnya sendiri, coba jalankan perintah berikut.

$ rsync -av rsync.opensuse.org::opensuse-hotstuff-160gb/ > opensuse-hotstuff-160gb.txt
$ rsync -av rsync.opensuse.org::opensuse-full/ > opensuse-full.txt

Tenang saja, perintah di atas tidak akan menyalin seluruh berkas yang ada melainkan hanya akan mengambil daftar berkas yang ada di dalamnya lalu dimasukkan ke dalam berkas opensuse-hotstuff-160gb.txt dan opensuse-full.txt. Buka kedua berkas tersebut untuk melihat apa yang ada di dalam repositori.

Sekarang coba lihat repositori openSUSE di Kambing.

$ rsync -av kambing.ui.ac.id::kambing/ > kambing.txt

Repositori di Kambing memiliki direktori repositories dan juga repositori untuk openSUSE versi 11.0 sampai 11.3-Milestone1! Kok bisa? padahal kan keduanya seharusnya berada dalam kelompok berbeda (menurut rsync.opensuse.org). Jawabannya adalah karena Kambing menggabungkan kedua kelompok tersebut. Isi opensuse-full yang ditambahkan dengan direktori repositories dari opensuse-hotstuff-160gb. Dengan melakukan hal ini sebenarnya Kambing telah membuat sesuatu yang tidak standar (mencampurkan dua repositori) dan sepertinya tidak baik untuk diteruskan.

Dalam beberapa hari ke depan, Kambing akan tobat melakukan penyimpangan ini dan akan melakukan restrukturisasi ulang repositori openSUSE. Penggabungan dua repositori ini akan dihapuskan dan akan kembali dipecah menjadi dua buah repositori terpisah, sesuai aslinya. Berikut ini struktur baru yang akan dibuat.

Berkas ISO tentu saja juga tidak akan dimasukkan karena memang sengaja dipisahkan di ftp://kambing.ui.ac.id/iso/opensuse/. Isi direktori khusus ISO ini diambil dari opensuse-full dengan mengatur agar hanya berkas ISO yang diambill. Tenang saja, struktur direktori tetap sama seperti aslinya.