Implementasi Parallel Progamming dengan OpenMP Pada Matriks Multiplication

Assalammu’alaikum

Kali ini saya akan sharing mengenai bagaimana implementasi multithreading programming menggunakan teknologi bahasa C/C++ dan memanfaatkan fitus OpenMP pada gcc. Berbeda dengan artikel sebelumnya uji coba yang saya lakukan menggunakan pthread (posix), kali ini saya akan memanfaatkan library OpenMP , yang akan mempermudah kita dalam membuat program yang bersifat multithreading.

Berikut spesifikasi teknologi yang saya gunakan :

  1. Ubuntu 12.04
  2. eclipse juno
  3. CDT (C/C++ Development Toolkit) for juno
  4. C/C++
  5. OpenMP
  6. GCC 4.6

Untuk kasus yang dicoba masih sama seperti artikel sebelumnya matriks multiplication atau perkalian matriks. Ordo matriks yang digunakan adalah 4×4, 8×8, 16×16, 32×32, 64×64, 100×100, 200×200, 400×400, 800×800,1600×1600. Continue reading

Implementasi Parallel Progamming POSIX Thread Pada Matriks Multiplication

Assalammu’alaikum

Kali ini saya akan sharing mengenai bagaimana implementasi multithreading programming menggunakan teknologi bahasa C/C++ dan memanfaatkan fitus POSIX pada gcc. Berikut spesifikasi teknologi yang saya gunakan :

  1. Ubuntu 12.04
  2. eclipse juno
  3. CDT (C/C++ Development Toolkit) for juno
  4. C/C++
  5. POSIX pThread
  6. GCC 4.6

Untuk kasus yang dicoba adalah matriks multiplication atau perkalian matriks. Ordo matriks yang digunakan adalah 4×4, 8×8, 16×16, 32×32, 64×64, 100×100, 200×200, 400×400, 800×800,1600×1600. Dengan menggunakan single thread atau sequential kemungkinan kompleksitas algoritma yang terjadi adalah eksponensial, akrena resource yang digunakan hanya 1 thread atau bahkan hanya 1 core processor dari 2 processor atau lebih yang kita miliki saat ini. Continue reading

How to Use OpenCV with Ubuntu and Eclipse

Assalammu’alaikum.. 😀

Kali ini saya akan share bagaimana menginstall opencv di ubuntu dan bagaimana menggunakan eclipse sebagai IDE yang digunakan untuk mengimplementasikan computer vision dengan menggunakan openCV. Pertama saya akan menjelaskan apa itu Computer Vision atau kita singkat dengan CV, cv merupakan suatu disiplin ilmu tersendiri (setidaknya menurut saya sendiri) yang basic-nya adalah menggunakan teknik-teknik image processing hingga penggunaan machine learning, tujuannya sebenarnya sederhana, yaitun memberikan kemampuan pengelihatan membedakan antara satu objek dengan objek lain dari apa yang dilihat oleh komputer. Biasa yang digunakan sebagai indra pengelihatan adalah camera seperti web-cam, atau mungkin yang komputer lihat adalah suatu gambar atau video lalu di process sehingga komputer dapat membedakan suatu objek tertentu yang diperintahkan oleh programmer.

Jika kita membuat program atau perangkat lunak CV dari awal (from scratch) mungkin akan sangat sulit, dikarenakan kita diharuskan mengolah matriks yang sangat kompleks dan mungkin ukurannya bukan ukuran yang kecil, misalkan image yang kita hadapi berukuran 640 x 430, artinya jumlah pixel yang akan ada dalam matriks atau ordo matriks yang kita hadapai adalah 640 x 430 dan artinya ada 275200 elemen nilai yang harus diakses dan dikenakan proses komputasi, dan itu baru satu gambar. Continue reading

Galeri BLOG Tugas Besar Grafika Komputer 2012

Assalamnu’alaikum..

Berikut ini adalah hasil beberapa tugas besar grafika komputer untuk semester genap, tahun ajaran 2011/2012, Jurusan Teknik Informatika , Fakultas Teknik dan Ilmu Komputer, Universitas Komputer Indonesia. Berikut adalah link url blog setiap kelas yang saya aja (semuanya ada 4 kelas) :

1. Kelas IF-13 ankatan 2008 :

http://if13unikom2008.wordpress.com/

2. Kelas IF-08 angkatan 2008 :

http://unikomif8.wordpress.com/

3. Kelas IF-09 angkatan 2008 :

http://unikomif9.wordpress.com/

4. Kelas IF-10 angkatan 2008 :

http://if102008.wordpress.com/

Hand Tracking dan Motion untuk kontrol mouse pointer komputer

Dah jarang posting, sekalinya posting lama banget hehehe..

Kali ini saya mu posting dan share soal TA saya sekarang (2011), kebetulan saya mengambil topik computer vision, implementasi hand tracking pada kontrol mouse pointer komputer dengan algoritma pyramidal lucas kanade.

Saya mengimplementasikan algoritmanya sebenarnya secara implisit, karena saya menggunakan library opencv untuk membantu saya dalam membuat aplikasi ini. Saya juga menggunakan QT Framework untuk membangun antarmukanya, agar lebih mudah tinggal drag and drop dan dengan menggunakan bahasa pemrograman C++.

Sebelumnya pada aplikasi ini saya menggunakan teknologi-teknologi sebagai berikut :

1. ubuntu 10.10

2. QT Framework 4.7

3. OpenCV 2.2

4. library X11

5. WebCam 5 MP

6. C++ programming language

7. eclipse helios

8. Qt Creator & Qt Designer

Continue reading

Program Sederhana Menghitung Pecahan Uang

Nah kali ini ada sedikit sample program bahasa C.. yaa  sederhana sih.. sedikit sumbangan soal dari temen..

mudah-mudahan sedikit banyak bermanfaat.

kali ini soalnya, program sederhana untuk menghitung pecahan dari mata uang.

misalkan kita menginputkan nilai mata uang 152000, maka akan menghasilkan :

Output
100000 : 1
50000 : 1
20000 : 1
10000 : 0
5000 : 0
2000 : 1
1000 : 0

Nah ada 2 cara.

Cara yang pertama dengan hanya menggunakan Switch() {} ya tapi masalahnya agak panjang source codenya ,    ini dia nih :

#include <stdio.h>
#include <conio.h>

main(){

long int uang,temp;//mendeklarasikan var uang sebagai input pertama.
int i,jml;//jml sebagai penghitung jumlah pecahan mata uang.

printf("\nMasukan Jumlah Uang : ");scanf("%li",&uang);
printf("\n========================================");

temp=uang;//inisialisasi var temp dengan nilai dari variabel uang

printf("\nOutput Pecahan Uang : ");
for(i=1;i<=7;i++){//mengulang proses mengulang untuk mengecheck jumlah uang.

switch (i) {

case 1 : jml = temp / 100000; /*membagi(division) temp dengan jenis pecahan sehingga
sehingga mendapatkan jumlah pecahan*/
temp = temp - (100000*jml); /*mengurangi temp dengan jumlah pecahan dikali pecahan
mata uang*/
printf("\n%d) 100000 :",i); //mengeluarkan jenis pecahan
break;

case 2 : jml = temp / 50000;
temp = temp - (50000*jml);
printf("\n%d) 50000 :",i,temp);
break;

case 3 : jml = temp / 20000;
temp = temp - (20000*jml);
printf("\n%d) 20000 :",i,temp);
break;

case 4 : jml = temp / 10000;
temp = temp - (10000*jml);
printf("\n%d) 10000 :",i,temp);
break;

case 5 : jml = temp / 5000;
temp = temp - (5000*jml);
printf("\n%d) 5000 :",i,temp);
break;

case 6 : jml = temp / 2000;
temp = temp - (2000*jml);
printf("\n%d) 2000 :",i,temp);
break;

case 7 : jml = temp / 1000;
temp = temp - (1000*jml);
printf("\n%d) 1000 :",i,temp);
break;
}

printf(" %d",jml);//output jumlah pecahan
}

getch();

}

proses pertama adalah menginputkan data banyak uang yang mau dihitung. Lalu dilakuakn inisialisasi untuk var temp, sebagai tempat penyimapanan nilai sementara. Lalu masuk ke perulangan dengan for(){} lalu dilakukan pengkondisian, sesuai dengan banyak pecahan yang ingin dikeluarkan. lalu output dapat dikeluarkan sesuai dengan kebutuhan.

Akan tetapi code diatas terlalu panjang, lihat saja sampai berbaris2 hehehe, nah sebenarnya bisa diperpendek agar lebih efisien. Yaitu dengan menggunakan array seperti pada Cara ke-2. Silahkan lihat source codenya :

#include <stdio.h>
#include <conio.h>

main(){

long int uang,temp,data[7]={100000,50000,20000,10000,5000,2000,1000};
int i,jml;

printf("\nMasukan Jumlah Uang : ");scanf("%li",&uang);
printf("\n========================================");

temp=uang;
printf("\nOutput Pecahan Uang : ");
for(i=0;i<=6;i++){
jml = temp / data[i];
temp = temp - (data[i]*jml);

printf("\n%d) %li : %d",i,data[i],jml);
}

getch();

}

Nah kan lebih pendek dari yang sebelumnya, padahal output yang dikeluarkan sama.
Dalam cara ke 2 kita menggunakan array sebagai tempat penyimpanan data pecahan yang akan dipakai.

Disana ada 7 pecahan mata uang sehingga kita dapat membuat array dengan banyak data 7 buah,setelah itu sebenarnya algoritma yang digunakan sama. Yang berbeda saat didalam statement perulangan/looping. Kita tidak perlu melakukan pengkondisian, Cukup menulis rumus, misal : jml= temp / 100000, namun karena kita telah menulis semua data pecahan di dalam array, jadi kita hanya tinggal menggunakan index dalam array untuk memanggil nilai pecahan yang ingin kita gunakan, misalkan ingin mencari jumlah mata uang pecahan 100000, maka kita cukup menulis : jml = temp / data[1]; , artinya kita memanggil data nilai pecahan yang ada pada index pertama dengan begitu kita dapat memasukan nilai iterasi sebagai pengganti konstanta yang kita pakai untuk menentukan index yang ingin kita pakai nilainya. misalkan :  jml = temp / data[i]; , maka dia akan mengeluarkan nilai pecahan sesuai dengan index yang dimasukan ketika nilai ke-i. begitulah sekilas tentang logika program sederhana tersebutttt……

Semoga dapat bermanfaat.