Jumat, 02 Juni 2017

Parallel Computation (Komputasi Paralel)

Komputasi paralel adalah salah satu teknik melakukan komputasi secara bersamaan dengan memanfaatkan beberapa komputer independen secara bersamaan. Ini umumnya diperlukan saat kapasitas yang diperlukan sangat besar, baik karena harus mengolah data dalam jumlah besar (diindustri keuangan, bioinformatika, dll) ataupun karena tuntutan proses komputasi yang banyak. Kasus kedua umum ditemui di kalkulasi numerik untuk menyelesaikan persamaan matematis di bidang fisika (fisika komputasi), kimia (kimia komputasi) dll.
Untuk melakukan aneka jenis komputasi paralel ini diperlukan infrastruktur mesin paralel yang terdiri dari banyak komputer yang dihubungkan dengan jaringan dan mampu bekerja secara paralel untuk menyelesaikan satu masalah. Untuk itu diperlukan aneka perangkat lunak pendukung yang biasa disebut sebagai middleware yang berperan untuk mengatur distribusi pekerjaan antar node dalam satu mesin paralel. Selanjutnya pemakai harus membuat pemrograman paralel untuk merealisasikan komputasi.
Pemrograman Paralel adalah teknik pemrograman komputer yang memungkinkan eksekusi perintah / operasi secara bersamaan. Bila komputer yang digunakan secara bersamaan tersebut dilakukan oleh komputer-komputer terpisah yang terhubung dalam satu jaringan komputer, biasanya disebut sistem terdistribusi. Bahasa pemrograman yang populer digunakan dalam pemrograman paralel adalah PVM (Parallel Virtual Machine).
PVM adalah suatu perangkat lunak yang mampu mensimulasikan pemrosesan paralel pada jaringan komputer. Saat ini ada dua bahasa pemrograman yang didukung oleh PVM, yaitu FORTRAN dan C. Versi PVM yang paling umum digunakan berbasis UNIX, meskipun ada juga PVM berbasis Windows. Cara kerja PVM adalah dengan membuat (spawning) proses-proses anak yang akan dikirim ke processor-processor yang tersebar di jaringan komputer. Dengan PVM bisa ditentukan berapa jumlah processor yang akan dilibatkan dalam proses komputasi.

# Jenis-Jenis Komputer Paralel
            Berdasarkan tingkatan perangkat keras yang mendukung paralelisme, secara umum komputer-komputer paralel dapat diklasifikasikan:

      ·         Multicore processing
Merupakan prosesor yang memiliki beberapa unit pengeksekusi. Sebuah prosesor multicore dapat melakukan beberapa instruksi per siklus dari beberapa aliran instruksi.

      ·         Symmetric multiprocessing
Merupakan sebuah sistem komputer dengan beberapa prosesor yang identik, dapat menggunakan struktur berbagi memori atau memori tersendiri yang saling terhubung melalui bus.

      ·         Distributed computing
Merupakan sebuah sistem komputer dengan memori terdistribusi, dimana masing-masing elemen pemrosesan dihubungkan oleh jaringan.

       ·         Cluster computing
Merupakan sekumpulan komputer yang bekerja sama,dihubungkan oleh jaringan, sehingga dapat dipandang sebagai sebuah kesatuan, cluster komputer ini dikoordinasi oleh sebuah komputer induk yang bertugas untuk mendistribusikan pekerjaan kepada masing-masing komputer lainnya.

       ·         Massive parallel processing
Merupakan sebuah komputer tunggal dengan banyak prosesor yang terhubung dalam sebuah jaringan. Di dalam MPP, tiap CPU mempunyai memory tersendiri, sistem operasi dan aplikasi yang sama. Tiap subsistem berkomunikasi satu dengan yang lainnya melalui interkoneksi berkecepatan tinggi.

       ·         Grid computing
Merupakan bentuk pemrosesan paralel yang paling terdistribusi. Grid computing memanfaatkan Internet sebagai saluran komunikasi antar komputer untuk menyelesaikan suatu permasalahan.

       ·         Specialized parallel computer

Komputer paralel yang dikhususkan untuk menyelesaikan tugas khusus.






Sumber :
https://id.wikipedia.org/wiki/Komputasi_paralel
http://yosafatksatria.blogspot.co.id/2015/02/parallel-computing.html
https://mahadisuta.blogspot.co.id/2012/12/implementasi-komputasi-paralel-dalam.html
http://ajuarna.staff.gunadarma.ac.id/Downloads/files/9254/ArtikelEpilog.pdf
https://dsitompul.files.wordpress.com/2008/11/komputasi-paralel3.doc

Selasa, 25 April 2017

Tugas Pemrograman Jaringan

#Get IP

Kodingan Program :

import java.net.*;
public class getip {
public static void main(String args[]) throws Exception {
InetAddress host = null;
host = InetAddress.getLocalHost();
byte ip[] = host.getAddress();
for (int i=0; i<ip.length; i++) {
if (i > 0) {
System.out.print(".");
}
System.out.print(ip[i] & 0xff);
}
System.out.println();
}
}

Logika Kodingan :
Program ini bertujuan untuk mengetahui ip address dari pc yang kita gunakan, disini memerlukan import library untuk menghubungkan jaringan. selanjutnya beri nilai null pada host agar nanti bisa kita masukkan ip pada komputer tersebut.

Output :


#Get Name

Kodingan Program :
import java.net.*;
public class getName {
public static void main(String args[]) throws Exception {
InetAddress host = null;
host = InetAddress.getLocalHost();
System.out.println("Nama komputer Anda: " +
host.getHostName());
}
}

Logika Kodingan :
Hampir mirip dengan program Get IP, yang membedakannya adalah program ini untuk mengetahui nama dari komputer yang kita gundakan.

Output :


#IP To Name

Kodingan Program:

import java.net.*;
public class IPtoName {
public static void main(String args[]) {
if (args.length == 0) {
System.out.println("Pemakaian: java IPtoName <IP address>");
System.exit(0);
}
String host = args[0];
InetAddress address = null;
try {
address = InetAddress.getByName(host);
} catch (UnknownHostException e) {
System.out.println("invalid IP - malformed IP");
System.exit(0);
}
System.out.println(address.getHostName());
}
}

Logika Program :
untuk menjalankan program ini harus dengan cara java namafile namakomputer. jika tidak sesuai program akan error. fungsi dari program ini untuk mendapatkan informasi ip dan nama komputer yang digunakan.

Output :

#NS LookUp

Kodingan Program:
import java.net.*;
public class NsLookup {
public static void main(String args[]) {
if (args.length == 0) {
System.out.println("Pemakaian: java NsLookup <hostname>");
System.exit(0);
}
String host = args[0];
InetAddress address = null;
try {
address = InetAddress.getByName(host);
} catch(UnknownHostException e) {
System.out.println("Unknown host");
System.exit(0);
}
byte[] ip = address.getAddress();
for (int i=0; i<ip.length; i++) {
if (i > 0) System.out.print(".");
System.out.print((ip[i]) & 0xff);
}
System.out.println();
}
}

Logika PRogram:
program ini hampir mirip dengan program IPtoName, yang membedakannya adalah pada program ini untuk menampilkan hostname dari komputer sedangkan pada program IPtoName digunakan untuk mendapatkan IP dari komputer dan nama komputernya .

Output:


# Simple Client Server

Kodingan program Simple Server :

import java.io.*;

import java.net.*;

public class simpleServer {
public final static int TESTPORT = 5000;
public static void main(String args[]) {
ServerSocket checkServer = null;
String line;
BufferedReader is = null;
DataOutputStream os = null;
Socket clientSocket = null;
try {
checkServer = new ServerSocket(TESTPORT);
System.out.println("Aplikasi Server hidup ...");
} catch (IOException e) {
System.out.println(e);
}
try {
clientSocket = checkServer.accept();
is = new BufferedReader(new
InputStreamReader(clientSocket.getInputStream()));
os = new DataOutputStream(clientSocket.getOutputStream());
} catch (Exception ei) {
ei.printStackTrace();
}
try {
line = is.readLine();
System.out.println("Terima : " + line);
if (line.compareTo("salam") == 0) {
os.writeBytes("salam juga");
} else {
os.writeBytes("Maaf, saya tidak mengerti");
}
} catch (IOException e) {
System.out.println(e);
}

try {
os.close();
is.close();
clientSocket.close();
} catch (IOException ic) {
ic.printStackTrace();
}
}
}

Kodingan SimpleClient :

import java.io.*;

import java.net.*;

public class simpleClient {
public final static int REMOTE_PORT = 5000;
public static void main(String args[]) throws Exception {
Socket cl = null;
BufferedReader is = null;
DataOutputStream os = null;
BufferedReader stdin = new BufferedReader(new
InputStreamReader(System.in));
String userInput = null;
String output = null;
// Membuka koneksi ke server pada port REMOTE_PORT
try {
cl = new Socket(args[0], REMOTE_PORT);
is = new BufferedReader(new
InputStreamReader(cl.getInputStream()));
os = new DataOutputStream(cl.getOutputStream());
} catch(UnknownHostException e1) {
System.out.println("Unknown Host: " + e1);
} catch (IOException e2) {
System.out.println("Erorr io: " + e2);
}
// Menulis ke server
try {
System.out.print("Masukkan kata kunci: ");
userInput = stdin.readLine();
os.writeBytes(userInput + "\n");
} catch (IOException ex) {
System.out.println("Error writing to server..." + ex);
}
// Menerima tanggapan dari server
try {
output = is.readLine();
System.out.println("Dari server: " + output);
} catch (IOException e) {
e.printStackTrace();
}
// close input stream, output stream dan koneksi
try {
is.close();
os.close();
cl.close();
} catch (IOException x) {
System.out.println("Error writing...." + x);
}
}
}

Logika SimpleServer :
Kodingan simpleserver digunakan sebagai server untuk nantinya bisa chating dengan client, program ini harus dijalankan terlebih dahulu baru setelah itu menjalankan program simpleclient.  di kodingan ini diberikan nilai port yang harus sama dengan port pada client agar bisa terhubung. jika server sudah dijalankan maka client bisa dijalankan setelahnya ,lalu saat client terhubung dengan server maka server akan menampilkan pesan bahwa client telah terhubung.

Logika SimpleClient :
Kodingan SimpleClient digunakan sebagai client untuk nantinya bisa mengirim pesan dengan server. program ini dijalankan setelah simpleserver sudah berjalan.. diprogram ini memiliki nilai port yang harus sama dengan nilai port yang berada di simpleserver agar bisa terhubung dengan baik.


Ouput :



Senin, 24 April 2017

Quantum Computation

Quantum Computation adalah alat hitung yang menggunakan sebuah fenomena mekanika kuantum, misalnya superposis dan keterkaitan, untuk melakukan operasi data. Dalam komputasi klasik, jumlah data dihitung dengan bit; dalam komputer kuantum, hal ini dilakukan dengan qubit. Prinsip dasar komputer kuantum adalah bahwa sifat kuantum dari partikel dapat digunakan untuk mewakili data dan struktur data, dan bahwa mekanika kuantum dapat digunakan untuk melakukan operasi dengan data ini. Dalam hal ini untuk mengembangkan komputer dengan sistem kuantum diperlukan suatu logika baru yang sesuai dengan prinsip kuantum.
Ide mengenai komputer kuantum ini berasal dari beberapa fisikawan antara lain Charles H. Bennett dari IBM, Paul A. Benioff dari Argonne National Laboratory, Illinois, David Deutsch dari University of Oxford, dan Richard P. Feynman dari California Institute of Technology (Caltech).
Pada awalnya Feynman mengemukakan idenya mengenai sistem kuantum yang juga dapat melakukan proses penghitungan. Fenyman juga mengemukakan bahwa sistem ini bisa menjadi simulator bagi percobaan fisika kuantum.
Selanjutnya para ilmuwan mulai melakukan riset mengenai sistem kuantum tersebut, mereka juga berusaha untuk menemukan logika yang sesuai dengan sistem tersebut. Sampai saat ini telah dikemukaan dua algoritma baru yang bisa digunakan dalam sistem kuantum yaitu algoritma shor dan algoritma grover.
Walaupun komputer kuantum masih dalam pengembangan, telah dilakukan eksperimen dimana operasi komputasi kuantum dilakukan atas sejumlah kecil Qubit. Riset baik secara teoretis maupun praktik terus berlanjut dalam laju yang cepat, dan banyak pemerintah nasional dan agensi pendanaan militer mendukung riset komputer kuantum untuk pengembangannya baik untuk keperluan rakyat maupun masalah keamanan nasional seperti kriptoanalisis.
Telah dipercaya dengan sangat luas, bahwa apabila komputer kuantum dalam skala besar dapat dibuat, maka komputer tersebut dapat menyelesaikan sejumlah masalah lebih cepat daripada komputer biasa. Komputer kuantum berbeda dengan komputer DNA dan komputer klasik berbasis transistor, walaupun mungkin komputer jenis tersebut menggunakan prinsip kuantum mekanik. Sejumlah arsitektur komputasi seperti komputer optik walaupun menggunakan superposisi klasik dari gelombang elektromagnetik, namun tanpa sejumlah sumber kuantum mekanik yang spesifik seperti keterkaitan, maka tak dapat berpotensi memiliki kecepatan komputasi sebagaimana yang dimiliki oleh komputer kuantum.



Sumber:
https://id.wikipedia.org/wiki/Komputer_kuantum




Mobile Computing

Mobile Computing atau komputasi bergerak memiliki beberapa penjelasan, salah satunya komputasi bergerak merupakan kemajuan teknologi komputer sehingga dapat berkomunikasi menggunakan jaringan tanpa menggunakan kabel dan mudah dibawa atau berpindah tempat.
  • Beberapa pengertian tentang mobile computing diantaranya :

  1. Mobile computing merupakan paradigma baru dari teknologi yang mampu melakukan komunikasi walaupun user melakukan perpindahan.
  2. Merupakan kemajuan teknologi komputer, sering disebut sebagai mobile computer (portable computer) yang dapat berkomunikasi dengan jaringan tanpa kabel (nirkabel).
  3. Merupakan sekumpulan peralatan(hardware), data, dan perangkat lunak aplikasi yang bermobilisasi/berpindahlokasi.
  4. Merupakan kelas tertentu dari system terdistribusi dimana beberapa node dapat melepaskan diri dari operasi terdistirbusi, bergerak bebas, dan melakukan koneksi kembali pada jaringan yang berbeda.
  5. Tidak sama dengan wireless computing.

Dari definisi diatas dapat dipahami mengapa dibutuhkannya mobile computing. Kata kuncinya adalah manusia dinamis yang senantiasa bergerak dan berkembang dari satu keadaan ke keadaan yang lain. Sehingga membutuhkan suatu device yang mampu mengikuti pergerakan setiap manusia. Bergerak disini dilihat dari dua sisi yaitu orang dan device. Atau dapat disebut juga dengan sebuah komputasi menggunakan teknologi yang tidak terhubung secara fisik, atau dalam jarak jauh atau lingkungan mobile.

Cara Kerja Mobile Computing
mobile computing berarti menyatukan seluruh sumberdaya TI ke dalam sekumpulan layanan yang bisa digunakan secara bersama-sama untuk memenuhi kebutuhan komputing perusahaan. Infrastruktur mobile computing secara kontinyu menganalisa permintaan terhadap sumberdaya dan mengatur suplai untuk disesuaikan terhadap permintaan tersebut. Dimana data disimpan atau computer mana yang memproses permintaan tidak perlu dipikirkan. Sebagaimana arus listrik; untuk memanfaatkannya, tempat pembangkit atau bagaimana proses pengkabelan jaringan listrik tidak perlu diketahui. Dalam menyelesaikan masalah system monolitik dan sumberdaya yang terfragmentasi, mobile computing bertujuan menciptakan keseimbangan antara pengaturan suplai sumberdaya dan kontrol yang fleksibel

Kelebihan dari Mobile Computing
  1. Komputasi simulasi dan penyelesaian masalah dapat berjalan lebih cepat dan mencakup domain yang lebih luas. 
  2. Pool dari aplikasi dan pustaka standard, akses terhadap model dan perangkat berbeda, metodologi penelitian yang lebih baik. 
  3. Akses terhadap sumber data global dan hasil penelitian lebih baik. 
  4. Perkalian dari sumber daya: Resource pool dari CPU dan storage tersedia ketika idle.
  5. Ukuran dan kompleksitas dari masalah mengharuskan orang-orang dalam beberapa organisasi berkolaborasi dan berbagi sumber daya komputasi, data dan instrumen sehingga terwujud bentuk organisasi baru yaitu virtual organization.

Kekurangan dari Mobile Computing
  1. Kekurangan pada mobile computing yang lebih dItekankan disini adalah mengenai hambatan yang dialami oleh masyarakat Indonesia dalam mengaplikasikan teknologi mobile computing. Hambatan-hambatan tersebut adalah sebagai berikut :
  2. Manajemen institusi yang terlalu birokratis menyebabkan mereka enggan untuk merelakan fasilitas yang dimiliki untuk digunakan secara bersama agar mendapatkan manfaat yang lebih besar bagi masyarakat luas. 
  3. Masih sedikitnya sumber daya manusia yang kompeten dalam mengelola mobile computing. 
  4. Kurangnya pengetahuan yang mencukupi bagi teknisi IT maupun user non teknisi mengenai manfaat dari mobile computing itu sendiri. 



Sumber :
https://www.academia.edu/17287529/Makalah_mobile_computing?auto=download