Anda di halaman 1dari 10

MODEL PARALELISASI ALGORITMA FFT MENGGUNAKAN

KOMPILATOR LLVM

Iman Khaeruddin
Program Studi Teknik Informatika
Fakultas Teknologi Industri Universitas Gunadarma
@.....

ABSTRAK

Sistem tertanam menjangkau semua aspek dalam kehidupan modern dan banyak
contoh yang kita gunakan. Banyak alat rumah tangga seperti mikrowave, mesin cuci
dan pengering, yang didalamnya terdapat sistem tertanam yang menyediakan
fleksibilitas, efesiensi, dan fitur.
LLVM merupakan compiler yang ditulis dengan C++ dan didesign untuk
compile-time, link-time, run-time, dan idle-time.LLVM dijelaskan sebagai struktur
compiler yang menyediakan front-end untuk bahasa pemrograman seperti C, C++,
Java, dan ADA. Dengan menggunakan front-end, aplikasi yang ditulis dengan bahasa
pemrograman dapat diterjemahkan ke dalam LLVM IR.
LLVM IR merepresantasikan bitcode file dan didalamnya terdapat perintah
LLVM. Seperti halnya JVM, LLVM juga bisa digunakan sebagai satu set instruksi untuk
model LLVM.

Kata Kunci : C++, LLVM, Fast Fourier Transform.

PENDAHULUAN pengoptimalan dari platform atau


bahasa tertentu.
Latar Belakang Masalah LLVM dijelaskan sebagai struktur
compiler yang menyediakan front-end
LLVM merupakan compiler yang untuk bahasa pemrograman seperti C,
ditulis dengan C++ dan di design untuk C++, Java, dan ADA. Dengan
compile-time, link-time, run-time, dan menggunakan front-end, aplikasi yang
idle-time. Secara singkat LLVM akan ditulis dengan bahasa pemrograman
mengkompile kode program menjadi dapat diterjemahkan ke dalam LLVM
representasi pada tingkat rendah IR.
(LLVM IR) dan akan menghasilkan file LLVM IR merepresantasikan bitcode
bitcode yang nantinya bisa dijalankan file dan didalamnya terdapat perintah
oleh simulator. LLVM bisa membuat LLVM. Seperti halnya JVM, LLVM
sebuah mesin virtual untuk bahasa juga bisa digunakan sebagai satu set
pemrograman layaknya Java Virtual instruksi untuk model LLVM[3].
Mesin (JVM) pada Java, kode generator
untuk mesin tertentu, dan

1 | JURNAL MULTIMEDIA VOLUME 6 NOMOR 1 --- MEI 2015


Implementasi paralelisasi sebuah dari platform atau bahasa tertentu.
algoritma yang direpresentasikan dalam LLVM IR berdiri sendiri dari bahasa
LLVM IR dapat dilakukan dengan dan arsitektur, terletak antara modul
memetakan deretan IR tersebut ke dalam spesifikasi bahasa dan kode generator
model paralalelisasi dengan untuk mesin yang spesifik. LLVM
memperhatikan indepenensi data dan mencakup dukungan interprosedural
instruksi. agresifoptimasi, kompiler statis, dan JIT
kompiler.

TINJAUAN PUSTAKA Sistem Arsitektur LLVM

Bagian ini menjelaskan struktur dan


Pendekatan LLVM prinsip LLVM. Dalam penelitian ini
ini,llvm-gcc front-end akan digunakan
Sistem arsitektur LLVM dirancang
sebagai standar LLVM.. Kompiler ini
untuk memecahkan masalah dalam
akan menghasilkan output sebagai
sistem tradisional. Kompiler statis
LLVM IR, file biner akan disimpan
dalam sistem LLVM akan
dalam file yang disebut LLVM bitcode
mengkompilasi kode sumber menjadi
(*.bc).
representasi tingkat rendah yang
meliputi jenis informasi tingkat tinggi.
Kompiler LLVM ditulis dalam C++
yang dirancang untuk compile-time,
link-time, run-time, dan idle-time
optimasi program yang ditulis dalam
perintah bahasa pemrograman yang
berubah-ubah. Proyek LLVM dimulai
pada 2000 di University of Illinois di Gambar 1. Kompilasi LLVM
Urbana-Champaign, Amerika Serikat
dan masih dikembangkan sampai saat Gambar 1. menjelaskan kompilasi
ini. LLVM dan clang yang tersedia LLVM dengan front-end llvmgcc. File
untuk umum di bawah lisensi output dapat menjadi bitcode untuk
Universitas Illinois / NCSA Open LLVM JIT, yang dapat dieksekusi
Source, GPL, OSI yang sangat mirip setelah menghubungkan dengan host
dengan lisensi BSD. library. Gambar 2 menjelaskan
LLVM saat ini mendukung kompilasi sistemLLVM pada waktu link.Dalam
bahasa C, C++, Objective C, Ada, dan penelitian ini, output bitcode akan
Fortran, menggunakan front-ends yang diperhitungkan. Output ini berisi LLVM
dimulai dari versi 4.0.1 dan 4.2 dari IR yang akan dijelaskan pada bagian
GNU Compiler Collection (GCC). berikutnya.
Sebuah alternatif front-end untuk
bahasa C sedang dikembangkan di
bawah nama clang.
Menggunakan LLVM, seseorang dapat
membuat virtual mesin untuk bahasa
pemrograman seperti Java, kode
generator untuk arsitektur mesin
tertentu, dan pengoptimalan independen
2 | JURNAL MULTIMEDIA VOLUME 6 NOMOR 1 --- MEI 2015
[operation, result,
operand1, operand2]

Beberapa instruksi lain ada yang tidak


mengambil, mengambil tiga atau
bahkan lebih operan. Contoh penting
termasuk panggilan instruksi dan
instruksi phi digunakan untuk mewakili
kode dalam bentuk SSA.
Tercatat bahwa instruksi LLVM
merupakan polimorfik yang berarti
sebuah instruksi dapat menerima
beberapa jenis operan. Beberapa
instruksi memiliki panjang variabel.
Dari sudut pandang kompiler, fitur ini
akan mengurangi jumlah opcodes yang
berbeda dan karena itu memungkinkan
densitas yang tinggi dalam file bitcode
Gambar 2. LLVM pada saat waktu link
LLVM.

LLVM Intermediate Representation


Bentuk Penugasan Statis Tunggal
(IR)
Bentuk Static Single Assignment (SSA)
Set instruksi virtual LLVM dirancang
telah digunakan oleh LLVM sebagai
untuk menjadi representasi tingkat
kode representasi yang utama.Suatu
rendah dengan dukungan untuk analisis
programdikatakandalam bentukSSAjika
tingkat tinggi dan transformasi[3]. Pada
masing-masing variable didefinisikan
bagian ini, penjelasan tentangLLVM IR
tepat satu kali dan setiap penggunaan
akan diberikan. Pertama, akan
variable didominasi oleh variabel yang
ditampilkan metode
pengalamatan.Kemudian, bentuk sudah didefinisikan. Bentuk SSA sangat
sederhana karena hanya dengan definisi
penugasan dan jenis informasi tingkat
tunggal dapat mencapai penggunaan
tinggi akan diperkenalkan.Pada bagian
nilai tertentu.
terakhir, akan dijelaskan set instruksi.
Akibatnya dalam LLVM IR, setiap
Tiga Alamat Memori instruksi yang menghitung nilai akan
ditugaskan mendaftar dengan nama
Instruksi LLVM memiliki metode yang konkrit. Jika nilai tidak memiliki
representasi kode yang sama dengan nama, secara otomatis akan dinamai
arsitekturRISC (Reduced Instruction Set oleh sistem LLVM. Sebuah contoh
Computing). Hal ini mirip dengan sederhana bahasa C dan keluaranLLVM
bahasa mesin, dengan angka kecil yang IR diberikan di bawah ini.
sederhana,operasi orthogonal.
Kebanyakan operasi LLVM, termasuk
semua operasi aritmatika dan logika Bahasa C:
dalam bentuk tiga alamat : Int x = 0;
Int y;
Y = (x+1) * 2;

3 | JURNAL MULTIMEDIA VOLUME 6 NOMOR 1 --- MEI 2015


LLVM IR: Instruksi ADD membutuhkan dua
%y.temp = add i32 x, 1; operan dengan tipe kelas pertama yang
%y = nul i32 %y.temp, 2; sama. Ada juga kasus khusus, di mana
tidak mungkin untuk menentukanjenis
tipe data. Itu adalah ketika nilai-nilai
yang diakses oleh pointer. Contoh
Informasi Tingkat Tinggi sederhanaditunjukkan pada gambar 3.
LLVM merupakan kompiler yang
sangat powerful. Setiap nilai SSA atau
lokasi memori harus memiliki hubungan
dan mematuhi peraturannya. Dilihat
dari sudut kompiler, memungkinkan
transformasi tingkat tinggi dari kelas
yang lebih besar pada kode tingkat
rendah dan memasok banyak informasi
untuk pengoptimalan. Dalam peneletian
ini, di mana LLVM IR digunakan
sebagai “bahasa mesin” untuk model Gambar 3. Contoh pointer LLVM
LLVM, informasi tingkat tinggi
memungkinkan rekonstruksi lengkap Dalam contoh di atas, baik x dan y
dari LLVM IR menjadi set instruksi ditulis sebagai pointer, tetapi nilai yang
yang utuh untuk model LLVM. ditunjuk oleh pointer memiliki panjang
yang berbeda dalam memori. Panjang
nilai integer adalah 32 bit (satu kata)
Tabel 1. Tipe data LLVM sedangkan panjang nilai double 64bit.
Misalkan sebuah perintah LOAD perlu
Klasifikasi Tipe memuat nilai yang ditunjukkan oleh y.
Integer i1,i2,i3,...i8,...i16,...i32,...i Karena tahu y sebagai pointer, perintah
64 LOAD dapa tmengakses lokasi yang
Floating float, double benar dalam memori, tetapi tidak bisa
point memutuskan berapa banyak kata yang
First class integer, floating point, harus dibaca dari memori.
array, label
Primitive label, void, integer,
floating point Fast Fourier Transform (FFT)
Derived integer, array, function, FFT (Fast Fourier Transform)
pointer, structure, opaque merupakan metode untuk pemecahan
sinyal diskrit.FFT (Fast Fourier
Transform) adalah algoritma
Tabel 1 menunjukkan gambaran tentang
komputasional yang efisien dan lebih
tipe data dalam LLVM. Tipe ini dapat
cepat dari algoritma DFT (Discrete
digunakan untuk semua jenis tipe data,
Fourier Transform) dan STFT (Short
kecuali tipe data structure. Dalam
Time Fourier Transform).FFT (Fast
sistem LLVM, setiap instruksi harus
Fourier Transform) digunakan untuk
memiliki operan dengan jenis tipe data
memisahkan sinyal menjadi komponen
tertentu.Sebagai contoh, instruksi
penyusun frekuensinya yang tidak bisa
LOAD atau STORE harus memiliki
dipisahkan secara langsung hanya
pointer dan operan primitif lain.

4 | JURNAL MULTIMEDIA VOLUME 6 NOMOR 1 --- MEI 2015


dengan melihat sinyal tersebut dalam
kawasan waktu.[10]
FFT (Fast Fourier
Transform)didefinisikan oleh rumus :

Xk = frekuensi
k = 0,1,2,…,(N-1)
N = jumlah sample pada masing-masing
frame
i = bilangan imajiner (√− 1)
n = 1,2,3, . . . (N-1)

Hasil dari data yang telah melalui


proses FFT, seperti gambar di bawah ini.

Gambar 3.1 Alur proses LLVM

Model Pararelisasi Algoritma FFT


Pada bagian ini akan dijelaskan hasil
kompilasi dan pemodelan algoritma
FFT berupa model pararelisasi dari file
bitcode yang telah berhasil dikompile
dengan menggunakan LLVM kompiler.
Berikut model pararelisasi untuk
algoritma FFT.

5 | JURNAL MULTIMEDIA VOLUME 6 NOMOR 1 --- MEI 2015


6 | JURNAL MULTIMEDIA VOLUME 6 NOMOR 1 --- MEI 2015
optimasi dari model pararelilasi file
bitcode.

Gambar . Model paralelisasi human


readable

Di atas merupakan model pararelisasi


file bitcode hasil kompilasi
menggunakan LLVM compiler yang
sudah diubah menjadi human readable.
Setelah dilakukan optimasi dengan cara
menghilangkan penggunaan perintah
yang yang sama secara pararel sehingga
total langkah yang harus dikerjakan
menjadi lebih efektif. Berikut hasil

7 | JURNAL MULTIMEDIA VOLUME 6 NOMOR 1 --- MEI 2015


8 | JURNAL MULTIMEDIA VOLUME 6 NOMOR 1 --- MEI 2015
Gambar . Model paralelisasi setelah
optimasi

Dari hasil analisa di atas, pembuatan


model pararelisasi serta optimasi file
bitcode telah diimplementasikan. Dapat
dilihat bahwa jumlah proses yang harus
dilaksanakan oleh file bitcode yang
sudah dioptimasi menjadi lebih efektif.
Perbandingan antara file bitcode yang
sudah dioptimasi dengan yang belum
adalah 34:39. Optimasi file bitcode ini
dilakukan dengan cara manual yaitu
menghilangkan penggunaan perintah
yang sama secara pararel.

9 | JURNAL MULTIMEDIA VOLUME 6 NOMOR 1 --- MEI 2015


IV. KESIMPULAN

Dalam penelitian ini pembuatan model


pararelisasi untuk algoritma Fast
Fourier Transform dengan kompiler
LLVM telah dilaksanakan.
Telah berhasil melakukan optimasi file
bitcode ke dalam model pararelisasi
sehingga menghasilkan proses yang
lebih efektif.
Ukuran file bitcode (*.bc) hasil
kompilasi dengan LLVM Compiler
lebih kecil dibanding dengan file
executable (*.exe) dengan rasio
perbandingan 6:70.

DAFTAR PUSTAKA

[1] Kadir, Abdul dan Heriyanto. 2005.


Algoritma pemrograman Menggunakan
C++. Yogyakarta: Andi.

[2] Munir, Rinaldi. 2007. Algoritma &


pemrograman Dalam Bahasa Pascal dan
C. Bandung: Informatika.

[3] Le, Anh Quang. 2008. Implementation of


a LLVM Simulator based on the
AMIDAR Processor Model. Vietnam.

[4] Darmayanti, Amalia Rizka. 2010.


Perancangan Dan Sintesis Arsitektur
Hardware IFFT (Invers Fast Fourier
Transform) 32 Titik Berbasis Bahasa
Pemrograman VHDL. Semarang.

[5] E. Oran Brigham, “The Fast Fourier


Transform and Its Applications” ,
Prentice Hall, 1988.

10 | JURNAL MULTIMEDIA VOLUME 6 NOMOR 1 --- MEI 2015

Anda mungkin juga menyukai