Breaking News

Bahasa Pemrograman Software Paling Efisien Dalam Segi Energi, Waktu, dan Memori. Python Urutan Teratas ?

 


Software language engineering menyediakan teknik yang ampuh dan alat untuk merancang, menerapkan, dan mengembangkan bahasa perangkat lunak. Teknik tersebut bertujuan untuk meningkatkan produktivitas programmer dengan memasukkan fitur-fitur canggih dalam desain bahasa pemrograman, seperti misalnya sistem modular dan tipe yang kuat dan secara efisien menjalankan perangkat lunak tersebut dengan mengembangkan, misalnya, pengoptimalan kompiler yang agresif. 

Memang, sebagian besar teknik dikembangkan dengan tujuan utama untuk membantu software engineer dalam menghasilkan program yang dapat berjalan lebih cepat.

Sementara perhatian pada efisiensi energi komputer dimulai oleh produsen perangkat keras, dengan cepat menjadi perhatian bagi pengembang perangkat lunak (software engineer) juga. Faktanya, topik tersebut menjadi area penelitian yang baru dan intensif di mana beberapa teknik untuk menganalisis dan mengoptimalkan konsumsi energi dari sistem perangkat lunak sedang dikembangkan. 

Teknik tersebut telah memberikan pengetahuan tentang efisiensi energi struktur data dan bahasa android, dampak energi dari praktik pemrograman yang berbeda baik dalam aplikasi seluler dan desktop, efisiensi energi aplikasi dalam lingkup yang sama, atau bahkan tentang cara memprediksi konsumsi energi di beberapa sistem perangkat lunak, di antara beberapa pekerjaan lainnya.

Sebuah pertanyaan menarik yang sering muncul di bidang efisiensi energi perangkat lunak adalah apakah program yang lebih cepat juga merupakan program yang hemat energi? Jika jawabannya ya, maka mengoptimalkan sebuah program untuk kecepatan juga berarti mengoptimalkannya untuk energi, dan inilah yang hampir tidak pernah dilakukan oleh komunitas konstruksi kompilator sejak permulaan bahasa perangkat lunak. Namun, konsumsi energi tidak hanya bergantung pada waktu eksekusi, seperti yang ditunjukkan pada persamaan Energi = Waktu × Daya.

Kesalahpahaman yang sangat umum saat menganalisis konsumsi energi dalam perangkat lunak adalah bahwa program/perangkat lunak akan berperilaku dengan cara yang sama seperti waktu eksekusi. Dengan kata lain, mengurangi waktu eksekusi suatu program akan menghasilkan jumlah pengurangan energi yang sama. Faktanya, persamaan Energi, Energi (J) = Daya (W) x Waktu (s) menunjukkan bahwa pengurangan waktu menyiratkan pengurangan energi yang dikonsumsi.

Studi kasus ini bertujuan untuk menganalisis efisiensi energi bahasa perangkat lunak didasarkan pada CLBG (Computer Language Benchmarks Game). Dalam studi kasus yang dilakukan, rencananya akan digunakan 28 bahasa pemrograman dengan berbagai macam paradigma pemrograman yang terlampir pada tabel berikut.

Namun, disayangkannya Smalltalk harus menjadi pengecualian dalam studi kasus ini sebab compiler bagi bahasa tersebut berlisensi proprietary. Maka dari itu menjadi 27 bahasa pemrograman yang akan dilibatkan dalam studi kasus ini. Dalam studi kasus ini, tolak ukur atau benchmark dilakukan dengan menggunakan algoritma binary-trees, fannkuch-redux, dan fasta.

Fokus utama penelitian ini adalah memahami efisiensi energi dalam bahasa pemrograman, disini juga akan dicoba untuk memahami bagaimana energi, waktu, dan memori berhubungan. Selain itu, akan dicoba untuk menjawab tiga pertanyaan penelitian berikut.


  1. Apakah bahasa yang lebih cepat selalu paling hemat energi?

  2. Bagaimana hubungan penggunaan memori dengan konsumsi energi?

  3. Bisakah kita secara otomatis memutuskan bahasa pemrograman apa yang terbaik dengan mempertimbangkan energi, waktu, dan penggunaan memori?



  1. Apakah bahasa yang lebih cepat selalu paling hemat energi?

Dengan melihat hasil keseluruhan ditunjukkan pada tabel dibawah yang didapat dari benchmark  menggunakan algoritma binary-trees, fannkuch-redux, dan fasta, dapat dilihat bahwa 5 bahasa teratas yang paling hemat energi mempertahankan peringkatnya saat diurutkan berdasarkan waktu eksekusi dan dengan perbedaan yang sangat kecil dalam nilai energi dan waktu. Fakta tersebut tidak mengherankan, karena dalam mayoritas benchmark 3 bahasa teratas tersebut, bahasa pemrograman yang tercepat dan paling hemat energi adalah salah satu dari 3 bahasa pemrograman itu. 



Selain itu, itu sudah menjadi rahasia umum bahwa 3 bahasa teratas ini (C, C ++, dan Rust) dikenal sangat dioptimalkan dan efisien untuk performa eksekusi, seperti yang juga ditunjukkan oleh data hasil bechmark di tabel tersebut. Jadi, karena waktu memengaruhi energi, dapat dibuat hipotesis bahwa bahasa-bahasa ini juga akan menghasilkan konsumsi energi yang efisien karena memiliki keuntungan besar dalam salah satu variabel yang memengaruhi energi, bahkan jika mereka rata-rata mengonsumsi lebih banyak daya.

Namun demikian, jika kita melihat bahasa yang lainnya pada tabel tersebut, kita dapat melihat bahwa hanya 4 bahasa yang mempertahankan peringkat energi dan waktu yang sama (OCaml, Haskel, Racket, dan Python), sedangkan sisanya tidak. Selain itu, dengan melihat masing-masing benchmark, dapat dilihat banyak kasus di mana terdapat urutan energi dan waktu yang berbeda.

Meskipun bahasa yang paling hemat energi di setiap benchmark hampir selalu menjadi yang tercepat, faktanya tidak ada bahasa yang secara konsisten lebih baik dari yang lain. Hal ini memungkinkan kita untuk menyimpulkan bahwa situasi di mana suatu bahasa akan digunakan adalah aspek utama untuk menentukan apakah bahasa tersebut merupakan pilihan yang paling hemat energi.

Dari hasil analisis yang ditampilkan pada tabel tersebut, jika digunakan untuk menjawab pertanyaan 1 yaitu “Apakah bahasa yang lebih cepat selalu paling hemat energi?”, maka didapat fakta bahwa bahasa yang lebih cepat tidak selalu merupakan paling hemat energi. Disamping itu, harus diakui pula bahwa C memang memiliki perbandingan 1:1 antara waktu dan energi dengan waktu eksekusi 1.00 dan energi yang digunakan 1.00, menjadikannya yang paling paling hemat energi.



  1. Bagaimana hubungan penggunaan memori dengan konsumsi energi?

Ada dua kemungkinan skenario utama yang dapat mempengaruhi konsumsi energi ini: penggunaan memori yang terus menerus dan puncak penggunaan memori. Dengan data yang telah dikumpulkan, akan dicoba untuk menjawab skenario yang kedua.

Lima bahasa teratas yang disajikan pada tabel diatas yang membutuhkan paling sedikit ruang memori (rata-rata) untuk mengeksekusi solusinya yaitu: Pascal (66Mb), Go (69Mb), C (77Mb), Fortran (82Mb), dan C ++ (88Mb); semua itu adalah bahasa compiled. Sedangkan, lima bahasa terbawah adalah: JRuby (1309Mb), Dart (570Mb), Erlang (475Mb), Lua (444Mb), dan Perl (437Mb); diantara semua itu, hanya Erlang bukan bahasa interpreted.

Rata-rata bahasa compiled membutuhkan 125Mb, bahasa mesin virtual membutuhkan 285Mb, dan bahasa lainnya membutuhkan 426Mb. Jika diurutkan berdasarkan paradigma pemrograman mereka, bahasa imperatif membutuhkan 116Mb, berorientasi objek 249Mb, fungsional 251Mb, dan yang terakhir scripting membutuhkan 421Mb. 

Selain itu, 5 bahasa teratas yang mengonsumsi energi DRAM paling sedikit (rata-rata) adalah: C (5J), Rust (6J), C ++ (8J), Ada (10J), dan Java (11J); dari semua itu, hanya Java yang bukan bahasa compiled. 5 bahasa terbawah adalah: Lua (430J), JRuby (383J), Python (356J), Perl (327J), dan Ruby (295J); semua itu adalah bahasa interpreted. Rata-rata bahasa compiled mengonsumsi 14J, bahasa mesin virtual mengonsumsi 52J, dan bahasa interpreted mengonsumsi 236J.

Apabila diperhatikan visual dari tiga grafik dibawah ini, yang merupakan hasil benchmark dengan CLGB yang dilakukan menggunakan algoritma binary-trees, fannkuch-redux, dan fasta,



dapat dilihat bahwa tampaknya tidak ada korelasi yang konsisten antara konsumsi energi DRAM dan puncak penggunaan memori (peak memory usage). Untuk memverifikasi ini, pertama-tama diuji konsumsi energi DRAM dan puncak penggunaan memori untuk normalitas menggunakan uji coba Shapiro-Wilk. Karena data tidak terdistribusi normal, perlu dihitung koefisien korelasi urutan peringkat Spearman. Hasilnya adalah nilai ρ Spearman sebesar 0,2091 yang berarti antara tidak ada hubungan linier (ρ = 0) dan hubungan bernilai positif yang hanya naik sedikit (ρ = 0,3).

Meskipun diharapkan bahwa dari uji coba tersebut setidaknya akan membuktikan sedikit korelasi antara konsumsi energi DRAM dan puncak penggunaan memori, hasil menyatakan bahwa hubungan tersebut hampir tidak ada. Jadi untuk pertanyaan 2 yaitu “Bagaimana hubungan penggunaan memori dengan konsumsi energi?”, hasil analisis telah menunjukkan bahwa konsumsi energi DRAM tidak ada hubungannya dengan berapa banyak memori yang disimpan pada titik tertentu, tetapi mungkin lebih terkait dengan cara penggunaan memori tersebut.



  1. Bisakah kita secara otomatis memutuskan bahasa pemrograman apa yang terbaik dengan mempertimbangkan energi, waktu, dan penggunaan memori?

Ada banyak situasi di mana seorang software engineer harus memilih bahasa perangkat lunak tertentu untuk mengimplementasikan algoritmanya sesuai dengan persyaratan fungsional atau non fungsional. Misalnya, jika ia mengembangkan perangkat lunak untuk perangkat yang dapat dikenakan (wearables), penting untuk memilih bahasa dengan tiga pertimbangan diatas dan menerapkan teknik yang dapat membantu menghemat baterai. Contoh lain adalah implementasi background tasks. Dalam kasus ini, waktu eksekusi mungkin bukan menjadi perhatian utama, dan mungkin lebih lama daripada waktu yang terkait dengan interaksi pengguna.

Pada tabel dibawah disajikan perbandingan tiga karakteristik bahasa: konsumsi energi, waktu eksekusi, dan penggunaan memori puncak. Untuk membandingkan ukuran bahasa yang menggunakan lebih dari satu karakteristik pada satu waktu, digunakan algoritma pengoptimalan multi-objective untuk melakukan penyortiran bahasa-bahasa pemrograman ini kedalam kelompok-kelompok tertnetu, yang dikenal sebagai Pareto optimization. Perlu digunakan algoritma seperti demikian karena dalam beberapa kasus mungkin bisa saja tidak ada solusi yang secara bersamaan mengoptimalkan semua tujuan (objective). Misalnya, energi, waktu, dan memori adalah tujuan pengoptimalan. Dalam kasus ini, solusi dominan tidak ada, tetapi setiap solusi adalah satu set dari bermacam bahasa perangkat lunak. Di sini, solusinya disebut Pareto optimal.



Teknik ini digunakan untuk menghitung peringkat yang berbeda untuk bahasa perangkat lunak yang dianalisis. Pada Tabel diatas disajikan empat peringkat multi-objective: waktu & memori, energi & waktu, energi & memori, dan energi & waktu, & memori. Untuk setiap peringkat, setiap baris mewakili satu set Pareto optimal, yaitu, satu set berisi bahasa yang setara satu sama lain untuk tujuan yang mendasarinya. Dengan kata lain, setiap baris adalah satu pangkat atau posisi.

Satu bahasa perangkat lunak dalam suatu posisi menandakan bahwa bahasa tersebut sudah jelas yang terbaik untuk karakteristik yang dianalisis. Beberapa bahasa dalam satu baris menyiratkan bahwa terjadi hasil seri, karena pada dasarnya mereka serupa; namun pada akhirnya, bahasa-bahasa tersebut sedikit condong ke salah satu tujuan di atas yang lain sebagai gantinya.

Maka untuk pertanyaan 3 yaitu “Bisakah kita secara otomatis memutuskan bahasa pemrograman apa yang terbaik dengan mempertimbangkan energi, waktu, dan penggunaan memori?” dari hasil penelitian ini, didapat jawaban: Ya, hampir selalu mungkin untuk memilih bahasa terbaik apabila hanya dipertimbangkan waktu eksekusi dan penggunaan energi. Tetapi jika memori juga menjadi perhatian, tidak mungkin lagi untuk secara otomatis memutuskan satu bahasa terbaik.


Kesimpulan

Dalam artikel ini, pertama-tama disajikan hasil analisis dan perbandingan efisiensi energi dari 27 bahasa perangkat lunak terkenal dari software repository populer, The Computer Language Benchmarks Game. Dapat diperlihatkan bahasa, jenis eksekusi, dan paradigma perangkat lunak yang paling hemat energi di beberapa benchmark terhadap persoalan yang berbeda.

Melalui pengukuran waktu eksekusi dan puncak penggunaan memori, dapat dihubungkan keduanya dengan energi untuk memahami tidak hanya bagaimana penggunaan memori memengaruhi konsumsi energi, tetapi juga bagaimana waktu dan energi berhubungan. Hal itu memungkinkan peneliti untuk memahami jika bahasa yang lebih cepat selalu paling hemat energi. Seperti sebagaimana kenyataan yang ditemukan, bahwasanya tidak selalu demikian.

Akhirnya, sebagaimana keseringannya software engineer memiliki sumber daya yang terbatas dan mungkin peduli dengan lebih dari satu karakteristik efisiensi yang dikatakan sebagai bahasa terbaik/terburuk menurut kombinasi dari tiga karakteristik sebelumnya: Energi & Waktu, Energi & Memori Puncak, Memori Puncak & Waktu, dan Energi & Waktu & Memori Puncak.



REFERENSI

Rui Pereira, Marco Couto, Francisco Ribeiro, Rui Rua, Jácome Cunha, João Paulo Fernandes, and João Saraiva. 2017. Energy efficiency across programming languages: how do energy, time, and memory relate? In Proceedings of the 10th ACM SIGPLAN International Conference on Software Language Engineering (SLE 2017). Association for Computing Machinery, New York, NY, USA, 256–267. DOI:https://doi.org/10.1145/3136014.3136031


No comments