Dapatkah aplikasi memengaruhi konsumsi daya secara substansial?

16

Adakah yang dapat dilakukan untuk satu aplikasi keperluan umum untuk memengaruhi konsumsi daya perangkat yang digunakan?

Saya tidak terbiasa dengan bagaimana pengoptimalan aplikasi individual dapat memengaruhi konsumsi daya secara umum, dapatkah seseorang menjelaskan jika pendekatan berbeda dalam menulis aplikasi memengaruhi konsumsi daya perangkat yang mereka jalankan?

Yaitu, dapatkah sebuah program tunggal, yang melakukan hal yang sama persis secara fungsional, ditulis dengan cara berbeda secara drastis mempengaruhi konsumsi daya perangkat secara umum, bukan tentang bagaimana berbagai program yang tidak terkait dapat memengaruhi konsumsi daya perangkat.

Juan Manuel
sumber
8
Jadikan kinerjanya lebih efisien.
Christopher Berman
Saya tidak mengatakan pertanyaan Anda langsung di luar topik, tetapi saya pikir sebuah buku akan lebih cocok daripada jawaban di situs tanya jawab. Anda harus memberikan setidaknya beberapa konteks, seperti apakah ini sistem yang disematkan, pengembangan ponsel, atau yang lainnya sepenuhnya. Jawaban apa pun harus sangat bergantung pada hal itu.
K.Steff
2
Apakah Anda berbicara tentang sistem tertanam bertenaga baterai? Secara umum, kunci untuk meminimalkan konsumsi daya adalah mengidentifikasi saat-saat ketika sistem benar-benar tidak perlu melakukan banyak hal, dan meminimalkan jumlah waktu di mana bagian mana pun dari sistem akan aktif ketika sebenarnya tidak ada apa-apa untuk itu. melakukan. Dalam kebanyakan kasus, akan ada batas yang cukup jelas tentang berapa banyak usaha yang berharga; jika perangkat akan menggunakan 1mAH / hari pada fungsi yang diperlukan, rutin sederhana yang membuang 10uAH / hari mungkin lebih baik daripada yang kompleks yang hanya membuang 1uAH / hari (karena yang terakhir hanya akan menghemat 1% energi).
supercat
1
Saya berpikir dalam sesuatu yang umum, bukan dengan konteks pada khususnya. Itu adalah pertanyaan 'hanya untuk rasa ingin tahu'. Tapi misalnya, apakah ada aturan untuk menghemat daya di perangkat seluler? atau menanamkan sistem? atau pengembangan aplikasi web? Mungkin menunda akses disk dan jaringan atau hal-hal seperti itu.
Juan Manuel
1
Saya kira Anda tidak mengerti intinya. Jika Anda mengubah aplikasi untuk menggunakan radio sebanyak setengahnya, Anda akan melihat konsumsi daya saat aplikasi itu berjalan turun. Radio pada telepon tidak menghasilkan daya dengan kecepatan konstan. Pengurasan daya tergantung langsung pada apa yang diminta untuk dilakukan oleh perangkat lunak.
Gort the Robot

Jawaban:

7

Kekhawatiran konsumsi daya seringkali merugikan kinerja, sehingga keduanya harus seimbang. Terapkan akuntansi biaya modal untuk mempertimbangkan perangkat keras yang lebih efisien, dan itu menjadi tradeoff yang sangat kompleks. (cukup Anda menghabiskan 100 jam untuk menghemat miliwatt / jam, atau $ 10 untuk PSU yang lebih efisien dalam pelaksana perangkat lunak yang menjalankannya). Satu-satunya waktu yang masuk akal secara komersial untuk mengkhawatirkan konsumsi daya (yang disebabkan oleh perangkat lunak) adalah server farm ukuran Google berjalan, perangkat bertenaga baterai, dan jika pemasaran ingin centang pada kotak Tree Hugging Greenie.

Terlalu rumit untuk meremehkannya dengan mengatakan "Jadikan algoritma Anda lebih efisien" - itu baru langkah pertama. Kurva kinerja / daya dan khususnya "kinerja yang dirasakan" / kurva daya adalah tidak linier. Itu tergantung jika Anda memiliki kontrol dan ke tingkat apa melalui OS yang digunakan.

Selain itu, pertanyaannya akan memiliki jawaban yang berbeda untuk setiap situasi tertentu. Misalnya saya pernah bekerja pada sistem bertenaga baterai (target 18 bulan pada sel 9V) yang lebih efisien daya berjalan pada kecepatan clock maksimum untuk durasi singkat daripada tidur, namun perangkat lunak lain yang mirip mikro berjalan lebih baik untuk menandai jam lambat sekitar satu menit kemudian tidur.

mattnz
sumber
ini sebenarnya jawaban yang benar, perangkat keras memainkan peran yang jauh lebih efektif dalam konsumsi daya daripada perangkat lunak. Contoh PSU yang lebih efisien menjadikan SEMUA perangkat, dan menaungi optimalisasi mikro dari satu aplikasi sehingga memberikan kontribusi yang tidak signifikan.
Ya, tetapi suatu program tidak menggunakan setiap bit perangkat keras pada perangkat dengan setara. Sebagai contoh, sebuah program yang tidak pernah menggunakan hard drive pada PC akan menggunakan daya yang jauh lebih kecil daripada yang terus membaca dan menulis ke hard drive.
Gort the Robot
@StevenBurnap yang tidak relevan tergantung pada HD, beberapa putaran HD dan jus tarik sepanjang waktu. Optimalisasi daya paling signifikan akan selalu datang dari perangkat keras (dan mikrokode di dalamnya). Perangkat lunak yang sama dengan Green HD akan menggunakan lebih sedikit daya, sehingga perangkat keras masih membuat lebih banyak perbedaan.
2
Itu tidak benar. Pasang Kill-a-watt ke sistem Anda, dan jalankan dua aplikasi, pertama aplikasi yang hanya menambah angka dalam satu infinite loop, dan lainnya yang memindai file 5 GB berulang kali. Anda akan melihat perbedaan. Konsumsi daya jelas akan bervariasi pada komputer, kadang-kadang secara dramatis, tergantung pada apa yang diminta untuk dilakukan.
Gort the Robot
Berikut adalah contoh yang menunjukkan perubahan konsumsi daya PC berdasarkan murni pada perangkat lunak apa yang berjalan: codinghorror.com/blog/2005/08/…
Gort the Robot
2

Hal terbaik yang dapat Anda lakukan adalah mengoptimalkan algoritme dan logika bisnis aplikasi Anda.

Anda juga dapat mengadopsi proses kompilasi tertentu, banyak coder lupa tentang fungsi inline dan optimisasi dalam fase kompilasi, sebagian besar waktu ini memberi Anda sedikit keunggulan dalam hal kinerja dan, akibatnya, dalam hal optimasi konsumsi daya.

pengguna827992
sumber
Ini adalah jawaban yang benar. Mengoptimalkan adalah satu-satunya cara.
superM
1
Bagaimana ini jawaban yang benar? Ada jauh lebih banyak daya yang tenggelam dalam suatu sistem daripada CPU.
James
1
@James perangkat lunak Anda hanya menggunakan CPU? tidak ada lagi?
user827992
3
@ user827992: Tidak, itu intinya. Hal-hal seperti radio (GSM / 3G / Wifi) dan layar mengkonsumsi daya jauh lebih banyak daripada CPU. Mengoptimalkan algoritme Anda tidak akan membantu Anda di sini. Saya akan mengatakan bahwa dalam sistem di mana konsumsi daya menjadi perhatian, mengoptimalkan kode Anda adalah optimasi prematur.
James
1
@ user827992: Ya, tetapi penghematan ini sangat kecil dibandingkan dengan sumber konsumsi baterai lainnya. Anda dapat mengoptimalkan ke -Ofinity semau Anda, tetapi jika misalnya, kode Anda mengurungkan beberapa tanda di suatu tempat Anda mati.
James
2

Jawaban yang tepat adalah ....

"We should forget about small efficiencies, 
say about 97% of the time: premature 
optimization is the root of all evil"
Donald Knuth

Fokus pada pemberian nilai kepada klien Anda. Buat solusi yang bersih, mudah dimengerti dan mudah dirawat.

Kemudian jika Anda membutuhkan lebih banyak "kekuatan" Anda dapat membuat profil aplikasi Anda. Dengan profiling Anda akan menentukan titik kemacetan bahwa ketika diubah, akan memberikan manfaat terbesar dan meningkatkan "efisiensi".

Michal Franc
sumber
4
Saya akan mengatakan ini tidak menjawab pertanyaan, karena Anda mengatakan "Konsumsi daya bukan masalah Anda; fokus pada nilai untuk klien". Dan itu terdengar sangat mirip mantra manajemen. OP mungkin memiliki justifikasi serius untuk meminta konsumsi daya yang lebih rendah.
K.Steff
Yah saya salah mengerti "konsumsi daya". Masih saya pikir dia harus mengatur tingkat konsumsi daya yang ketika tercapai, optimasi harus dilakukan dengan menganalisis bagian-bagian dari sistem yang memakan terlalu banyak daya. Ini bisa dilakukan dengan serangkaian tes stres.
Michal Franc
1

Meskipun benar bahwa dalam hal CPU tidak ada banyak yang harus dilakukan, seringkali ada fitur perangkat yang mengkonsumsi daya saat digunakan. Pada PC, sebagian besar tidak ada yang peduli, tetapi memang benar bahwa disk read will (dengan asumsi drive non-SSD) menyebabkan hard drive berputar dan kepala bergerak, yang akan menghabiskan sedikit daya. Pada PC ini sepele, tetapi pada perangkat seluler, ini bisa menjadi masalah yang sangat nyata.

Di telepon, contoh paling jelas dari hal ini adalah komunikasi. Mengirim sinyal nirkabel membutuhkan energi. Pada PC, terhubung ke catu daya 500 WATT, itu tidak penting. Di telepon, tidak. Aplikasi yang terus-menerus melakukan polling server untuk sejumlah besar data akan menggunakan daya yang jauh lebih besar daripada yang tidak menggunakan jaringan sama sekali.

Ini adalah masalah yang sangat nyata, hanya google untuk "Aplikasi Android menguras baterai saya". Berikut adalah satu dari banyak halaman yang memberi tahu pengembang cara meminimalkan konsumsi daya.

Secara umum, Anda ingin mengoptimalkan kinerja secara umum (yaitu membuat CPU sebanyak mungkin) dan juga untuk penggunaan jaringan. Berkomunikasi sesedikit mungkin dengan pesan sekecil mungkin.

Seperti yang orang lain katakan, ini adalah tugas untuk setelah sebagian besar kode Anda selesai, ketika Anda telah mengidentifikasi masalah dan menggunakan daya profil.

Gort the Robot
sumber