BAB I PENDAHULUAN 1.1 Latar Belakang Bilangan prima merupakan suatu hal yang mendasar dan sangat penting dalam bidang matematika secara umum dan teori bilangan secara khusus (Agrawal et al, 2002). Sejak zaman kuno banyak matematikawan yang tertarik mengenai permasalahan pada bilangan prima (Jin, 2005). Banyak algoritma kriptografi yang mengandalkan bilangan prima yang sangat besar untuk melakukan enkripsi dan deskripsi. Salah satu di antaranya adalah algoritma RSA yang saat ini banyak digunakan untuk mengamankan transaksi perbankan. Algoritma RSA mengandalkan fakta bahwa sulitnya menemukan faktor bilangan prima dari sebuah bilangan yang sangat besar. Selain pada algoritma kriptografi bilangan prima juga digunakan pada algoritma hashing. Di sisi lain yayasan EFF (Electronic Frontier Foundation) menawarkan hadiah sebesar $250.000 bagi individu ataupun kelompok yang pertama kali menemukan bilangan prima dengan panjang minimal 1000.000.000 digit. Dari fakta di atas sangat penting menemukan cara menentukan suatu bilangan termasuk prima atau bukan dalam waktu yang singkat. Beberapa dari algoritma pengujian bilangan prima hanya memberikan hasil berupa kemungkinan sebuah bilangan termasuk dari bilangan prima dengan tingkat kepercayaan tertentu. Algoritma Miller-Rabin memiliki tingkat kesalahan di bawah 25% yang berarti apabila dilakukan pengujian bilangan sebanyak 10 kali maka probabilitas bahwa bilangan yang dinyatakan prima oleh algoritma tersebut adalah 10.2510 = 0.999999. Sedangkan algoritma Solovay-Stressen memiliki tingkat kesalahan di bawah 50% (Dong, 2005). Akan tetapi terdapat kasus yang membutuhkan kepastian sebuah bilangan termasuk prima atau tidak, dengan demikian algoritma pengujian primalitas probabilistik pada masalah tersebut tidak dapat digunakan. Pada tahun 2002
1
2
tiga peneliti berkebangsaan India bernama Manindra Agrawal, Neeraj Kayal, dan Nitin Saxena telah membangun sebuah algoritma pengujian bilangan prima yang deterministik dalam waktu polinomial yang bernama algoritma AKS. Menariknya algoritma yang mereka buat tergolong sederhana dimana para ilmuwan yang lain membuat modifikasi yang kompleks terhadap algoritma pengujian lainnya, selain itu algoritma AKS juga dapat diimplementasikan secara paralel. MPI (Message Passing Interface) merupakan sebuah pustaka yang saat ini banyak digunakan untuk melakukan paralelisasi pada permasalahan–permasalahan sains yang membutuhkan kekuatan komputasi yang besar yang diselesaikan pada komputer klaster. Seiring dengan kemajuan zaman sistem High-Performance Computer pada setiap node-nya saat ini memiliki banyak core yang tidak hanya 1 atau 2 core di dalamnya bahkan hingga puluhan core yang siap digunakan untuk melakukan komputasi yang besar dengan waktu komunikasi antar core yang singkat sehingga mempersingkat waktu komputasi pada permasalahan yang besar secara menyeluruh. Pemrograman hybrid yang mengombinasikan MPI dan OpenMP sejak dekade terakhir ini sangat populer digunakan, MPI digunakan untuk melakukan paralelisasi pada level antar node sedangkan OpenMP berperan dalam paralelisasi antar core dalam sebuah node. Berdasarkan fakta bahwa algoritma pengujian bilangan prima memiliki peranan penting dalam bidang kriptografi maka penelitian dan perbaikan algoritma AKS merupakan sesuatu hal yang berharga untuk dilakukan. Pada penelitian ini akan diimplementasikan perbaikan dari algoritma AKS yang dikembangkan oleh Lenstra dan Pomerance secara paralel dengan menggunakan pustaka GMP, NTL, OpenMP dan MPICH kemudian akan dibandingkan waktu yang dibutuhkan pada implementasi– implementasi tersebut untuk mengetahui seberapa besar peningkatan kecepatan.
3
1.2 Rumusan Masalah Berdasarkan latar belakang masalah yang telah diuraikan sebelumnya, maka didapat rumusan masalah sebagai berikut : 1. Bagaimana mengimplementasikan algoritma AKS secara paralel dengan menggunakan teknik paralelisasi 1 tingkat dan 2 tingkat. 2. Bagaimana cara melakukan load balancing pada paralelisasi ditingkat pertama. 3. Bagaimana menentukan implementasi yang paling cepat dari implementasi – implementasi yang diusulkan. 1.3 Batasan Masalah Untuk menghindari pembahasan yang meluas maka kami membatasi pembahasan penelitian ini dengan hal sebagai berikut : 1. Implementasi paralel menggunakan teknik master-slave. 2. Algoritma AKS yang diimplementasikan versi perbaikan Lenstra dan Pomerance (2011). 3. Menggunakan pustaka NTL untuk melakukan operasi pemangkatan polinomial modular. 1.4 Tujuan Penelitian Tujuan dari penelitian ini adalah sebagai berikut : 1. Melakukan
perancangan
paralelisasi
yang
load
balance
serta
mengimplementasikannya pada paralelisasi tingkat antar node. 2. Mengimplementasikan secara paralel algoritma AKS dengan MPI dan OpenMP. 3. Mengetahui speed up yang diperoleh dari implementasi yang paling cepat dibandingkan dengan implementasi serial.
4
1.5 Manfaat Penelitian Diharapkan dengan penelitian ini, tercapai beberapa manfaat sebagai berikut: 1. Tersedianya implementasi paralel dari algoritma AKS yang cepat dan load balance. 2. Memacu penelitian lainnya untuk memperbaiki algoritma AKS baik dari segi algoritma maupun dari segi implementasi sehingga suatu saat secara praktik dapat digunakan oleh umat manusia. 1.6 Metodologi Penelitian Metodologi yang digunakan dalam penelitian ini sebagai berikut: 1. Studi Literatur Studi literatur dilakukan dengan pengumpulan informasi, teori, serta data pendukung dalam memahami algoritma AKS serta teknik–teknik paralelisasi yang mungkin untuk dilakukan. Literatur diperoleh dari buku-buku, jurnal, atau karya tulis ilmiah. 2. Analisis Untuk melakukan load balancing dan peningkatan kecepatan maka analisis algoritma perlu dilakukan untuk mengetahui titik-titik mana saja bagian dari algoritma yang dapat ditingkatkan kecepatannya dengan implementasi paralel. 3. Rancangan Pada tahap ini dilakukan desain teknik paralelisasi algoritma AKS secara menyeluruh pada paralelisasi dengan 2 tingkat maupun 1 tingkat, selain itu juga ditentukan cara pembagian beban kerja pada setiap node sehingga setiap node memperoleh beban kerja yang sama. 4. Implementasi Pada tahap ini, akan dilakukan penulisan kode program berdasarkan rancangan desain yang telah dibuat pada tahap perancangan. Penulisan kode program
5
akan menggunakan bahasa C++ dan pustaka yang digunakan di compile terlebih dahulu dalam mode thread safety. 5. Pengujian Pengujian dilakukan menggunakan beberapa data tes untuk menguji kebenaran implementasi dari program dan menggunakan data tes yang bernilai besar untuk menguji peningkatan kecepatan yang terjadi serta load balance nya.
1.7 Sistematika Penulisan Penelitian ini terdiri dari tujuh bab dengan sistematika masing-masing bab adalah sebagai berikut: BAB I PENDAHULUAN Bab ini memuat latar belakang, rumusan masalah, batasan masalah, tujuan dan manfaat penelitian, metodologi yang digunakan, dan sistematika penulisan. BAB II STUDI PUSTAKA Bab ini memuat beberapa penelitian terdahulu yang terkait pada topik permasalahan, metode yang digunakan, dan menjadi bahan referensi dalam penelitian ini BAB III LANDASAN TEORI
Bab ini memuat teori-teori yang digunakan dalam penelitian ini. BAB IV ANALISIS DAN RANCANGAN Bab ini memuat penjelasan serta analisis permasalahan, bentuk algoritma, dan perancangan terhadap implementasi yang akan dibuat, dari pustaka yang digunakan, sistem operasi, dan metode pengujian. BAB V IMPLEMENTASI
6
Bab ini memuat spesifikasi hardware dan software yang digunakan dan hasil implementasi kode sistem yang dikembangkan berdasarkan perancangan yang dilakukan beserta penjelasannya. BAB VI HASIL DAN PEMBAHASAN Bab ini memuat rangkuman hasil penelitian dan pengujian kebenaran implementasi, waktu eksekusi, dan permasalahan yang dihadapi beserta pembahasannya. BAB VII PENUTUP Bab ini berisi kesimpulan penelitian yang telah dilakukan disertai saran untuk pengembangan penelitian selanjutnya