PNUP, Makassar, 3 November 2016
Pengaruh Struktur Pemrograman Dan Compiler Pada Kecepatan Operasi
Menggunakan Arduino Uno
Dadan Nurdin Bagenda1), Rida Hudaya 2) 1 Teknik Elektronika, Politeknik Negeri Bandung
email: dadannb@polban.ac.id
2 Teknik Elektronika, Politeknik Negeri Bandung email: rida_hudaya@yahoo.com
Abstract
Arduino Uno banyak digunakan sebagai basis dari tugas akhir pada aplikasi mikrokontroler yang juga mulai merambah ke dunia industri. Bentuk modul ini compact dan IDE-nya user friendly, namun pemrogramannya bahasa C dimana salahsatu contohnya lebih sulit dalam manajemen register dibandingkan assembler, juga hasil level optimasi default compiler-nya relatif lambat, hal ini dapat berdampak memperlambat eksekusi. Hal ini berdampak besar jika digunakan pada aplikasi massive yang membutuhkan proses cepat.
Maka akan dilakukan pengujian Arduino Uno dengan membandingkan berbagai struktur pemrograman, sehingga dapat mengetahui perintah dan struktur yang paling cepat. Dan membandingkan kecepatan hasil dari berbagai level-compile-nya, diharapkan dapat mengetahui level-compile paling optimal dari sisi ukuran file.
Arduino Uno yang digunakan dengan Chip ATMega328 berbentuk DIP. IDE Arduino 1.6.10 sebagai editor, compiler, Flash programming/Uploader sekaligus HMI console protokol USART. Osiloscope sebagai penampil data. Metodologi yang digunakan adalah kuantitatif experimental.
Setelah membandingkan beberapa struktur pemrograman pada Arduino Uno menggunakan software compiler IDE Arduino, mendapatkan hasil waktu tempuh sbb; untuk output tercepat ke pin I/O adalah perintah
“DDRB=0B111111” 1.67% dari digital.Write() dengan pin alias, tipe data “char” 25% dari float (tipe
terlambat), mengakses 1 byte memory SRAM 0.005% dari EEPROM Internal, operasi aritmatika tidak dapat diambil kesimpulan karena sangat bervariasi tergantung nilainnya, fungsi perulangan “for” memiliki waktu
tempuh 99.63% dari “while”, dengan tipe data char metoda perulangan decrement 74.53% dari increment,
dengan tipe data int metoda perulangan increment 83.08% dari decrement, dengan tipe data float metoda perulangan decrement sama dengan increment, pengiriman serial 1040us/byte pada 9600bps dan 40us/byte pada 250000bps, pengiriman paralel 289us/byte pada LCD. Setelah membandingkan berbagai opsi compiler ukuran file *.hex dapat berubah namun tidak menjamin kecepatan proses, untuk beberapa perintah dasar opsi Compiler
‘-O3’ cenderung menambah waktu tempuh, namun sebagian besar opsi ini dapat mengurangi waktu tempuh sampai 78.23% dari standar compiler.
Keywords: pemrograman, level-compile, kecepatan operasi, arduino.
I. PENDAHULUAN
I.1 Latar Belakang Masalah
Mikrokontroler merupakan hardware pengendali berukuran relatif kecil yang diidentikkan dengan dunia otomasi (serba otomatis), baik di lingkungan pendidikan (tugas akhir), industri, maupun masyarakat pada umumnya.
Arduino merupakan perusahaan yang memproduksi software (compiler) IDE Arduino, juga memproduksi hardware Board Arduino. Board Arduino diproduksi berbagai tipe. Arduino pun semakin banyak digunakan oleh perusahaan besar seperti google yang menggunakan arduino untuk Accessory Development Kit[8] dan NASA yang
menggunakan arduino untuk prototyping[9].
Bahkan arduino sudah mulai digunakan dalam
akuisisi data, terlihat dengan tersedianya Lab View Interface for Arduino (LVIFA)[10].
Bentuk modul ini compact dan IDE-nya user friendly, namun pemrogramannya bahasa C dimana salahsatu contohnya lebih sulit dalam manajemen register dibandingkan assembler, juga hasil level optimasi default compiler-nya relatif lambat, hal ini dapat berdampak memperlambat eksekusi.
Menurut Robert Sedgewick dalam bukunya berjudul Algorithms “Program komputer akan bermanfaat optimalisasinya jika algoritmanya digunakan untuk tugas yang sangat besar atau akan digunakan berkali-kali”[7].
I.2 Perumusan Masalah
PNUP, Makassar, 3 November 2016
ISBN: 978-602-18168-0-6
1. Pemrograman C yang lebih sulit dalam
manajemen register pada memory
dibandingkan dengan assembler. Perbedaan struktur pemrograman C pada PC dapat mengakibatkan perbedaan pada kecepatan proses eksekusinya, seperti pada penelitian sebelumnya[3][4][6]. Namun ini perlu diuji
pada mikrokontroler yang memiliki resource jauh lebih kecil.
2. Proses default-compile dari compiler IDE
Arduino yang standar, sehingga
mengakibatkan ukuran file *.hex lebih besar, hal ini dapat berakibat pada proses eksekusi yang lebih lambat.
I.3. Tujuan Penelitian
Dari permasalahan diatas perlu dicari solusinya, penulis mengatasi permasalahan ini dengan cara sbb.:
1. Mengukur dan membandingkan berbagai
struktur pemrograman pada modul
hardware Arduino Uno menggunakan software compiler IDE Arduino, sehingga mendapatkan baris perintah atau struktur pemrograman paling optimal dari sisi
kecepatannya.
2.
Mengukur dan membandingkan berbagai option-compile pada compiler IDE Arduino menggunakan optimasi GNU C,yang bersumber dari penelitian
sebelumnya[3] (teruji pada software PC
compiler). Diharapkan dapat menghasilkan data percobaan option-compile paling optimal dari sisi ukuran file. Dengan asumsi, semakin kecil ukuran file akan mempercepat proses eksekusinya.
I.4. Ruang Lingkup dan Batasan Masalah
Penelitian ini memiliki ruang lingkup dan batasan sbb.:
1. Metodelogi penelitian yang digunakan adalah kuantitatif experimental 2. Kombinasi pengujian diantaranya;
Struktur pemrograman dan level option-compile pada compiler IDE Arduino.
3. Optimasi pengujian terukur pada; Kecepatan dan ukuran program *.hex 4. Peralatan hardware yang digunakan
dalam penelitian ini sbb.:
Arduino Uno.
Osilloscope GW Instek
GDS-1102A-U, 2 channel.
5. Peralatan software yang digunakan dalam penelitian ini sbb.:
IDE Arduino 1.6.10 sebagai editor, compiler, Flash programming/ Uploader sekaligus console HMI
II. KAJIAN LITERATUR
Penelitian-penelitian lain pun memicu gagasan penelitian ini, dengan ringkasan yang disusun pada tabel 2.1. Tabel 2.1 juga bisa mewakili penelitan apa saja yang terkait langsung dengan penelitian ini dan menunjukan pada ranah apa kaitannya. Tabel ini pun menunjukan area penelitian sebelumnya yang dijadikan sumber referensi oleh penulis, nampak bahwa penelitian yang akan dilakukan ini mencakup 3 area diantaranya menggunakan arduino dan mengoptimasi dari sisi Compiler juga struktur pemrograman.
Tabel 2.1. Ranah Tinjauan Pustaka
No Peneliti – Judul – Guide - University of Minnesota [6]
6. Tips for Optimizing C-Cpp Code - Clemson
papernya yang berjudul “A functional language
and compiler for the Arduino micro-controller”[1], memuat penelitiannya yang
PNUP, Makassar, 3 November 2016
Mircea D., dari German[2] pada artikelnya
yang berjudul “Optimize Arduino Memory
Usage“ meneliti bagaimana pengaruh perbedaan kecepatan penggunaan memori RAM pada arduino. Juga menjelaskan ukuran memori berbagai tipedata seperti pada tabel 2.2
Tabel 2.2. Ukuran memori berbagai tipedata[2].
Tipedata Ukuran (Bytes) Nilai
boolean, bool 1 true(1) or false(0)
char 1 ASCII character or signed value in the range [-128, 127]
unsigned char, byte, uint8_t 1
ASCII character or unsigned value in the range [0, 255]
int, short 2 signed value in the range [-32768, 32767]
unsigned int,
word, uint16_t 2
unsigned value in the range [0, 65535]
long 4 signed value in the range [2147483648, 2147483647]
unsigned long,
uint32_t 4
unsigned value in the range [0, 4294967295]
float, double 4
floating point value in the range [-3.4028235e+38, 3.4028235e+38]
NOTE: float and double are the same in this (Arduino) platform
Menurut Nitika G. dalam penelitiannya yang berjudul Optimal Code Compiling in C–
India 2015 “Teknik Optimasi digunakan untuk
mempercepat program komputer. Ini terfokus pada meminimalisir waktu yang terbuang oleh CPU dan memberikan tranformasi sourcecode pengganti yang berfungsi sama”[3].
Dengan arah pengertian yang sama juga
disampaikan oleh Michael E. Lee.
“Optimization is the process of improving the speed at which a program executes. Depending on context it may refer to the human process of making improvements at the source level or to a compiler's efforts to re-arrange code at the assembly level (or some other low level.” [4]
Artinya, Optimasi program merupakan penggantian sourcecode lama menjadi baru sehingga dapat mempercepat proses operasi.
Juga Clemson University di US yang menjelaskan bagaimana cara mengoptimasi code C dan CPP secara umum pada buku yang berjudul “Tips for Optimizing C-CPP Code”[5].
III. METODE PENELITIAN
Metodologi yang digunakan pada
penelitian ini adalah kuantiatif experimental, dimana penelitian dilakukan dengan cara
mencoba berbagai struktur pemrograman dan
mengukur masing-masing kecepatan
operasinya, juga mencoba berbagai level option compiler dan mengukur masing-masing kecepatan operasinya juga ukuran file hasil compile-nya.
Untuk mencapai tujuan, dapat diurutkan bahwa tahapan rencana penelitian dan indikator kinerja seperti berikut,
KEGIATAN PENELITIAN INDIKATOR KINERJA
PENELITIAN
Perbandingan Kecepatan penggunakan Memori sram
dan eeprom
Didapatkan salah satu yang tercepatnya diantara 2 jenis memori sram dan eeprom.
Perbandingan penggunaan berbagai tipe data pada
pengulangan pengulangan while (increment
dan decrement until zero)
Didapat data pengulangan fungsi while tercepat
Perbandingan Level
Optimalisasi Ukuran file terkecil
Luaran : Didapat kombinasi tercepat, dan beberapa kombinasi cepat lainnya bermanfaat berdasarkan kebutuhan.
Gambar 3.1. Tahapan rencana penelitian dan indikator kinerjanya
Tahap penelitian dimulai dengan penyiapan seluruh komponen elektronik dan beberapa peralatan pengujiannya. Dimulai dari hardwere sampai software ini seperti yang tertulis pada ruang lingkup pada bab pendahuluan.
Yang diamati/diukur tegantung pada pengujiannya, jika yang diuji adalah struktur pemrograman maka yang diukur adalah waktu eksekusinya. Jika yang diuji adalah level optimasinya maka yang diukur adalah kecepatan eksekusinya, kecepatan compile-nya dan ukuran hasil/file *.hex-nya.
Pelaksannaan teknis penelitian ini diawali dengan penyusunan tempat, waktu dan bahan, lalu melakukan persiapan dasar seperti alat ukur dan dasar objek yang akan diukurnya. Setelah itu memecah urutan garis besar penelitian menjadi daftar pekerjaan yang lebih rinci.
1. Peralatan hardware yang digunakan dalam penelitian ini sbb.:
PNUP, Makassar, 3 November 2016
ISBN: 978-602-18168-0-6
Osilloscope GW Instek GDS-1102AU, 2 channel instrumen pengukur utama. 2. Peralatan software yang digunakan dalam
penelitian ini sbb.:
IDE Arduino 1.6.10 sebagai editor, compiler, uploader sekaligus HMI console dengan protokol USART.
Freewave 3 Software yang dapat menghubungkan GW Instek GDS-1102A-U dengan PC.
Gambar 3.2. Pin I/O Atmega328 vs. Arduino Uno
Gambar 3.2 menggambarkan kaitan pin I/O arduino uno dengan pin I/O original Atmega328, sehingga kita dapat mengetahui register I/O yang tepat untuk mengujinya.
IV. HASIL DAN PEMBAHASAN
IV.1. Kecepatan Dasar Arduino UNO dan IDE Compilernya
Kecepatan dasar Arduino UNO dan IDE Compilernya ini dilakukan dengan cara menggunakan program pada bagian perulangan utama dan diukur pada oscilloscope.
Kecepatan tertinggi untuk memberikan logika out pada pin I/O menggunakan perintah pengaksesan register I/O secara langsung. Ini terlihat pada pengujian berbagai perintah pemberian logika out pada pin I/O dari dari tabel 4.1 dengan hasil sbb:
Tabel 4.1. Kecepatan perintah logika out pin I/O No. Perintah Runtime (us)
1 digitalWrite(pinOUT, 1); 3.68
2 digitalWrite(pinOUT, 0); 3.6
3 digitalWrite(8, 1); 3.36
4 digitalWrite(8, 0); 3.28
5 PORTB=0B111111; 0.064
6 PORTB=0B000000; 0.06
7 Akhir dari void loop 0.251
Gambar IV.1. Waktu tempuh DDRB=0B111111 di awal eksekusi.
Dengan beberapa percobaan ini dapat disimpulkan bahwa output ke pin I/O perintah
“DDRB=0B111111” waktu tempuhnya 1.67% dari “digital.Write()” dengan pin alias. Dan pada akhir “void loop()” membuat jeda mulai
0.250 us s/d 0.252 us
IV.2. Kecepatan Beberapa Struktur Program Dengan Standar Option Compiler
Bagian sub program ini menjelaskan
beberapa struktur program dengan standar
option compiler atau tanpa mengatur option
compiler. Dengan beberapa pengujian sbb;
Pengujian berbagai tipe data, EEPROM 8
bit, Operasi aritmatika, Fungsi perulangan
“for()”
dan
“while()”
, Pengujian waktu
tempuh
proses
mengirimkan
data,
Pencacahan atau ADC.
Pengujian berbagai tipe data ini diuji
dengan mengeksekusi operasi “j=1”, dan j
hanyalah nama variablenya. Dari tabel 4.2
dapat dilihat bahwa, tipedata “char” adalah
tipedata yang paling cepat, waktu tempuh sampai 25% dari float (tipe terlambat).
Tabel 4.2. Pengujian berbagai tipe data No. Perintah Keterangan Runtime (us)
1 j=1; int, unsigned int 0.252
2 j=1;
float,double, long, long int, long double,
unsigned long 0.504
3 j=1;
char,
unsigned char, 0.126
Pengujian
pengaksesan
memori
EEPROM dilakukan dengan memberikan
data yang tidak lebih dari 8 bit. Ini
dilakukan agar dapat dibandingkan dengan
tipe data “char” yang juga 8 bit dari memori
PNUP, Makassar, 3 November 2016
2.44 ms
. Waktu tempuh mengakses 8 bit
dengan memory SRAM jauh lebih cepat
yaitu
0.005%
dari waktu tempuh EEPROM
Internal.
Operasi aritmatika tidak dapat diambil kesimpulan karena sangat bervariasi tergantung nilai operand-nya. Karena waktu operasi ini pada tipedata char bervariasi mulai dari 0.000 us unuk perkalian 1 s/d 6.564 us untuk perkalian 10.
Penggunaan fungsi perulangan “for()” rata -rata menempuh waktu 99.63% dari kecepatan
“while()”.
(100+99+100+98.7+100.5+100+99.37+100+ 99+99+100+100)/12=99.63%
Ini didapat dari hasil berbagai pengukuran
fungsi “for()” dan fungsi ”while()”.
Jika fungsi perulangan “for()”
menggunakan tipe data “unsigned char”
lebih cepat prosesnya jika mundur (j--)
menggunakan decrement, tipedata ini
merupakan looping paling cepat. Jika
menggunakan tipe data “int” lebih cepat
prosesnya jika maju (j++) menggunakan
increment. Jika menggunakan tipe data
“float” memiliki waktu tempuh yang sama
baik maju maupun mundur, dengan tipedata
ini merupakan looping paling lambat.
Hasil waktu tempuh tipe data “char” baik pada fungsi perulangan “for()” maupun “while()”, selalu lebih cepat menggunakan
metoda decrement atau perulangan dengan masing-masing presentasi sebagai berikut.
(75+72.28+76.5+74.35)/4=74.53%
Hasil waktu tempuh tipe data “int” baik pada fungsi perulangan “for()” maupun “while()”,
selalu lebih cepat menggunakan metoda increment atau perulangan dengan masing-masing presentasi sebagai berikut.
(81.28+84.8+80.9+85.35)/4=83.08% Dari hasil percobaan fungsi perulangan baik
menggunakan “for()” maupun “while()” dapat
disimpulkan bahwa;
Jika menggunakan tipe data “char” maka waktu tempuhnya akan lebih cepat jika
menggunakan metoda decrement,
mencapai rata-rata 74.53% dari pada waktu tempuh increment, struktur ini merupakan struktur perulangan paling cepat
sedikitnya 2% dari waktu tempuh tipe
“float” dengan nilai operand yang sama.
Dan jika menggunakan tipe data “int” maka waktu tempuhnya akan lebih cepat jika menggunakan metoda increment,
mencapai rata-rata 83.08% dari pada waktu tempuh decrement.
Dan jika menggunakan tipe data “float”memiliki waktu tempuh yang cenderung sama baik increment maupun decrement, dengan tipedata ini merupakan looping
paling lambat.
IV.3. Kecepatan Berbagai Opsi Optimasi
Compiler
Berbagai Opsi Optimasi compiler tersebut di terapkan pada baris program berikut:
#pragma GCC optimize (“-Os”)
yang diletakan pada baris program paling atas.
Tabel 4.3. No kode pengujian untuk tabel-tabel selanjutnya
No. Perintah Keterangan
1 PORTB=0B000000 terkecil
2 digitalWrite(pinOUT, 0) aliasnya int
3 j=1 int
4 j=j*10 int
5 for(j=1;j<=254;j++){} float
6 Algoritma selection sort
int array 10 data
7 Algoritma selection sort
int array 5 data
8 Algoritma prima 0-20 int
9 Algoritma prima 0-10 int
Tabel 4.3 diatas berikutnya akan dijadikan kode pengujian 1 sampai dengan 9, seperti berikut.
Table 4.4Pengujian waktu tempuh pada berbagai opsi
No. Runtime(us)
tanpa -Os -O0 -O1 -O2 -O3
1 0.06 0.06 0.372 0.124 0.12 0.12
2 3.6 3.6 3.76 3.6 3.52 3.52
3 0.308 0.308 0.748 0.496 0.496 0.496
4 1 1 1.44 0.81 0.81 0.81
5 3060 3060 3480 2200 2200 2200
6 103 103 232 81 82.5 71
7 27 27 72.8 21 19.8 8.44
8 3380 3380 3760 3340 3340 3340
9 980 980 1100 970 960 960
Berdasar pada tabel 4.4, Waktu tempuh
hasil “-O3” selalu lebih cepat dengan rata-rata:
(97.8+81+71.9+68.9+31.3+98.8+98)/7 = 78.2%
Dari perhitungan diatas dapat disimpulkan
bahwa penggunaan Opsi Optimasi Compiler “
-O3” dapat mengurangi waktu tempuh program
PNUP, Makassar, 3 November 2016
ISBN: 978-602-18168-0-6
disamping itu ukuran file hasil compile cenderung jadi lebih besar seperti table 4.5.
Table 4.5.Pengujian ukuran file pada berbagai opsi
No. Size(bytes) pada berbagai opsi compiler tanpa -Os -O0 -O1 -O2 -O3
1 454 454 508 466 466 466
2 686 686 764 698 696 696
3 468 468 520 478 478 478
4 484 484 542 504 504 504
5 982 982 1084 898 898 898
6 752 752 988 728 712 938
7 690 690 928 688 652 946
8 666 666 784 722 712 712
9 666 666 784 722 712 712
V.KESIMPULAN
1. Perbandingan beberapa struktur
pemrograman mendapatkan hasil waktu tempuh sbb;
output tercepat ke pin I/O adalah
perintah “DDRB=0B111111” 1.67%
dari digital.Write() dengan pin alias,
tipe data “char” 25% lebih cepat dari float (tipe terlambat),
mengakses 1 byte memory SRAM
0.005% dari EEPROM Internal, operasi aritmatika tidak dapat diambil kesimpulan karena sangat bervariasi tergantung nilainnya,
fungsi perulangan “for” memiliki
waktu tempuh 99.63% dari “while”,
o dengan tipe data char metoda
perulangan decrement 74.53% dari increment,
o dengan tipe data int metoda
perulangan increment 83.08% dari decrement,
o dengan tipe data float metoda
perulangan decrement sama
dengan increment,
pengiriman serial 1040us/byte pada
9600bps dan 40us/byte pada
250000bps, pengiriman paralel 289us/byte pada LCD.
2. Setelah membandingkan berbagai opsi compiler ukuran file *.hex dapat berubah namun tidak menjamin kecepatan proses, untuk beberapa perintah dasar opsi
Compiler ‘-O3’ cenderung menambah
waktu tempuh, namun sebagian besar opsi ini dapat mengurangi waktu tempuh sampai 78.23% dari standar compiler.
UCAPAN TERIMA KASIH
Alhamdulillah kami ucapkan karena
atas karena ridho-Nyalah penelitian ini
dapat dimulai dan diselesaikan. Juga kami
ucapkan banyak terimakasih kepada;
1. Dr.Ir. Ediana Sutjiredjeki, MSc. selaku Kepala UPPM Politeknik Negeri Bandung yang memberikan kesempatan untuk mendanai penelitian ini.
2.
Malayusfi, BSEE., M.Eng
selaku Ketua Jurusan Teknik Elektro yang mendukung penelitian ini.3. Para Reviewer yang memberikan banyak saran dan masukan yang bermanfaat. 4. Pihak lain yang tidak bisa disebutkan
satupersatu yang telah banyak membantu hingga penelitian ini selesai.
REFERENSI Sumber Jurnal dan Penelitian:
[1] Suchocki, R. - A functional language and compiler for the Arduino micro-controller The Scheme '14 proceedings, University of Indiana as CS Techreport 718. Washington. 2014
[2] Mircea D., - Optimize Arduino Memory Usage. Code project Article. German. 2015
[3] Nitika G. - Optimal Code Compiling in C. (IJCSIT) Vol. 6 (3) , 2015, 2050-2057 ISSN:0975-9646, India. 2015
[4] Clemson University - Tips for Optimizing C-Cpp Code.. USA 2011
[5] W. Durfee - Arduino uC Guide. University of Minnesota. ver. oct-2011 USA 2011
[6] Michael E. Lee - Optimization of Computer Programs in C. USA. 1997 1999-04-20 ML
[7] Robert Sedgewick –Algorithms. Brown University. USA. Addison-Wesley. ISBN O-201 -06672-6 1983
Sumber Dokumentasi dan Berita:
[8] http://makezine.com/2011/05/10/google-
picks-arduino-for-android-open-accessory-kit/
[9] http://ntrs.nasa.gov/search.jsp?R=201400 02626
[10] https://decibel.ni.com/content/groups/l